Ordena o TabOrder automaticamente de acordo com a posição Top e Left do Componente



procedure TFTabOrder.SetChildTabOrders(const Parent: TWinControl);
  procedure FixTabOrder(const Parent: TWinControl) ;
  var
    i, Cont: Integer;
    List: TList;
  begin
    List := TList.Create;
    try
      for i := 0 to Parent.ControlCount - 1 do begin
        if Parent.Controls[i] is TWinControl then begin
          if List.Count = 0 then
            Cont := 0
          else begin
            with Parent.Controls[i] do
              for Cont := 0 to List.Count - 1 do
                if (Top < TControl(List[Cont]).Top) or ((Top = TControl(List[Cont]).Top) and (Left < TControl(List[Cont]).Left)) then
                  Break;
          end;
          List.Insert(Cont, Parent.Controls[i]);
          FixTabOrder(TWinControl(Parent.Controls[i]));
        end;
      end;
      for i := 0 to List.Count - 1 do
        TWinControl(List[i]).TabOrder := i;
    finally
      List.Free;
    end;
  end;
begin
  FixTabOrder(Parent);
end;


Exemplo: Download do exemplo

0 comentários:

Postar um comentário