Fórum Posição do Componente #269239

18/02/2005

0

Como faço para descobrir a posição (x,y) do componente em relação ao form.

obs.: Lembrando que se ele estiver dentro de TPanel por exemplo, a propriedade Top estará em relação ao Tpanel, e assim por diante.

Tentei pegar pegar o parent do Componente, deu certo, mas quando o componente, está dentro de apenas um.

Se ele tiver dentro de um Tpanel, esse Tpanel esta dentro de outro, ja complica, pois teria que pegar o parente duas vezes.


Sistemald

Sistemald

Responder

Posts

18/02/2005

Massuda

Uma forma é converter a posição do componente para coordenadas da tela e converter essa nova posição para as coordenadas relativas ao form. Por exemplo (não testei):
function GetTopLeft(AForm: TForm; AControl: TControl): TPoint;
begin
  Result := AForm.ScreenToClient(AControl.ClientToScreen(Point(AControl.Left, AControl.Top)));
end;



Responder

Gostei + 0

18/02/2005

Paulo_amorim

Olá

Pode-se tentar fazer (adapte o valor inicial de C, se necessário)
function RetornaTop( controle: TControl): Integer;
var
   c: TControl;
begin
     c := controle;
     Result := c.Top;
     while not (c.Parent is TForm) do
     begin
          c := c.Parent;
          Inc(Result, c.Top);
     end;
end;

Espero que ajude
Até+


Responder

Gostei + 0

18/02/2005

Beppe

Paulo, vc não levou em conta a espessura das bordas.


Responder

Gostei + 0

18/02/2005

Sistemald

Valeu novamente galera, agora acho que me viro.

Estou terminando um componente tipo Lookcombobox, porém muito mais configuravél, e a lista é preenchida por query embutida no componente.

em breve postarei aqui no forum.


Responder

Gostei + 0

18/02/2005

Paulo_amorim

Olá

Paulo, vc não levou em conta a espessura das bordas.

Eu pensei nisso. Ia incluir um teste no tamanho tanto de Border quanto Bevel, mas deixei quieto...

Até+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar