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
me retorna um valor. Mas eu acho que este valor está em uma escala diferente. Aliás, tenho certeza de que está em uma escala diferente. Acho que o problema agora está apenas na conversão de escala.
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