DETERMINAR A POSICAO DE UM CONTROLE
                    Estou tentando determinar a posição de um controle (Top e Left) dentro de um formulário. As propriedades Top e Left nativas de qualquer controle retornam a posição do mesmo em relação ao container em que eles estão. Por exemplo, se estão no Form, Top e Left serão relativas ao Form. Porém, se o controle estiver dentro de uma PictureBox, por exemplo, Top e Left serão relativas a PictureBox.
Como eu posso determinar as coordenadas de um controle relativas ao Form, mesmo este controle estando dentro de outro recipiente (como a PictureBox, do exemplo)?
                
            Como eu posso determinar as coordenadas de um controle relativas ao Form, mesmo este controle estando dentro de outro recipiente (como a PictureBox, do exemplo)?
                    Bom dia HIDDEN!
Use a propriedade PARENT
            Use a propriedade PARENT
    Dim topo As Integer
    Dim esq As Integer
    topo = btnCommand1.Top + btnCommand1.Parent.Top
    esq = btnCommand1.Left + btnCommand1.Parent.Left
                    Não está dando certo. Vou explicar o que eu desejo realizar: posicionar um controle (Image) ao lado de um TextBox, toda vez que este receber o foco. Para isso, preciso determinar a posição da TextBox para assim posicionar o Image ao lado esquerdo dela.
Estou usando a seguinte abordagem:
Sendo Text1 minha TextBox e Image1 meu controle Image.
Num módulo, claro:
Ps.:
            Estou usando a seguinte abordagem:
 
GetWindowRect Text1.hwnd, contRect
Image1.Top = contRect.Top
Sendo Text1 minha TextBox e Image1 meu controle Image.
Num módulo, claro:
Public Declare Function GetClientRect Lib [Ô]user32[Ô] (ByVal hwnd As Long, lpRect As RECT) As Long
Public Type RECT
       Left  As Long
       Top   As Long
       Right  As Long
       Bottom As Long
End Type
Global contRect As RECT
Ps.:
GetWindowRect Text1.hwnd, contRect 
                    Consegui resolver o problema, ao menos parcialmente. Quando faço chamada da função GetWindowRect, ela me retorna a posição do controle desejado em relação a tela como um todo (VB.Screen). Desta forma tenho que subtrair a posição do controle da posição do Formulário.
Digo que a solução está parcialmente resolvida por conta deste detalhe: Image1.Top = (contRect.Top - FrmT - 25) * VB.Screen.TwipsPerPixelY
Tenho que subtrair 25, que é referente a altura da bara de tÃtulos da janela. Mas essa altura pode variar, de acordo com o sistema operacional. Se alguém souber de uma chamada da API para determinar a altura da barra de tÃtulo de uma janela, a função estará completa.
                 
         Dim FrmT As Long, FrmL As Long
         Dim WinW As Long, WinH As Long
         
         WinW = VB.Screen.Width / VB.Screen.TwipsPerPixelX
         WinH = VB.Screen.Height / VB.Screen.TwipsPerPixelY
         FrmT = Form1.Top / VB.Screen.TwipsPerPixelY
         FrmL = Form1.Left / VB.Screen.TwipsPerPixelX
         GetWindowRect Image1.hwnd, contRect
         Image1.Top = (contRect.Top - FrmT - 25) * VB.Screen.TwipsPerPixelY
         Image1.Left = (contRect.Left - FrmL - 3) * VB.Screen.TwipsPerPixelX
Digo que a solução está parcialmente resolvida por conta deste detalhe: Image1.Top = (contRect.Top - FrmT - 25) * VB.Screen.TwipsPerPixelY
Tenho que subtrair 25, que é referente a altura da bara de tÃtulos da janela. Mas essa altura pode variar, de acordo com o sistema operacional. Se alguém souber de uma chamada da API para determinar a altura da barra de tÃtulo de uma janela, a função estará completa.
                        Tópico encerrado , respostas não são mais permitidas
                    
                
