Fórum Pegar item sob o ponteiro do mouse, no TreeView #272206
14/03/2005
0
Eu sei que se eu precisar saber qual item está sob o ponteiro do mouse, basta fazer TreeView1.GetNodeAt(X, Y) num evento qualquer relacionado ao mouse. Porém, eu não posso usar estes eventos do Treeview. Eu tenho que usar os eventos do PopupMenu, de cada um dos itens que criei nele (evento do ´Colar´, do ´Excluir´, etc).
Minha dúvida é: Como saber qual o item do Treeview que está sob o ponteiro do mouse, estando executando um evento do PopupMenu?
Exemplo de evento EXCLUIR Item:
procedure TForm1.mnExcluirClick(Sender: TObject); Var TargetNode: TTreeNode; begin // Captura o Node sob o ponteiro do mouse TargetNode := TreeView1.GetNodeAt(XMouse, YMouse); TreeView1.Items.Delete(TargetNode); end;
Wbb
Curtir tópico
+ 0Posts
14/03/2005
Rômulo Barros
procedure TForm1.Button1Click(Sender: TObject); Var Temp : TPoint; begin TargetNode := TreeView1.GetNodeAt(Temp.X, Temp.Y); ... ... end;
Gostei + 0
14/03/2005
Wbb
Valeu.
Gostei + 0
15/03/2005
Marcelo Saviski
Gostei + 0
15/03/2005
Wbb
De onde você retira os valores das variáveis X e Y? Pergunto pois atualmente já uso variáveis X e Y globais, que armazenam as coordenadas do ponteiro do mouse durante o evento OnMouseDown, para em seguida usá-las da seguinte dorma:
[b:ef73829c4d]TargetNode := TreeView1.GetNodeAt(XMouse, YMouse);[/b:ef73829c4d]
Isso é necessário, pois estou executando esta linha de código dentro de um evento de um item de PopupMenu, o que me obriga a ter as coordenadas armazenadas em variáveis globais. Porém eu gostaria de saber se tem um jeito de fazer isso de outra forma, ou seja, sem que seja preciso armazenar as coordenadas em variáveis globais.
Eu já até tentei criar uma variável do tipo TMouse e a partir dela pegar as coordenadas, mas estas são as coordenadas em relação à tela como um todo e não em relação ao TreeView, como seria necessário.
Valeu.
wbb
Gostei + 0
15/03/2005
Marcelo Saviski
var Point: TPoint; begin Point := TreeView.ScreenToClient(Mouse.CursorPos); with Point do TargetNode := TreeView1.GetNodeAt(X, Y); if Assigned(TargetNode) then //faz algo com o TargetNode end;
Isso teoricamente funciona
Sobre o TMouse, não precisa criar, já existe um Mouse pronto pra uso :)
Gostei + 0
15/03/2005
Wbb
Obrigado pela atenção.
Gostei + 0
15/03/2005
Marcelo Saviski
Gostei + 0
15/03/2005
Wbb
De qualquer forma, tentei usar sua indicação mas não obtive sucesso, apesar da idéia inicial estar perfeita.
Valeu.
Gostei + 0
15/03/2005
Marcelo Saviski
se vc colocar depois do:
[i:bd33606c6e][color=green:bd33606c6e]TargetNode := TreeView1.GetNodeAt(X, Y); [/color:bd33606c6e][/i:bd33606c6e]
colocar
que tipo de valores vem, que vão aparecer no caption do form, valores negativos, numeros exorbitantes, ou numeros normais, maiores que 0 e menores que o tamanho do TreeView?
Gostei + 0
15/03/2005
Wbb
wbb
Gostei + 0