Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Eventos Del Treeview (https://www.clubdelphi.com/foros/showthread.php?t=59323)

rgstuamigo 22-08-2008 16:37:46

Eventos Del Treeview
 
Holas amigos del foro, tengo un TreeView en mi formulario y necesito hacer lo siguiente :
Cuando le de doble click o Enter en uno de su nodos que me muestre un formulario que esta relacionado con este nodo; pero teniendo en cuenta que el nodo debe ser hoja; la verdad he logrado hacerlo pero no me satisface,pues tiene un problema que cuando selecciono el nodo, y le doy doble click en otro lado igual me hace el evento. Agradeceria cualquier ayuda, o sugerencia.

roman 22-08-2008 17:00:30

Puedes usar el método GetHitTestInfoAt del TreeView, que te permite saber en qué parte exactamente se da el click:

Código Delphi [-]
procedure TForm1.TreeView1DblClick(Sender: TObject);
var
  Node: TTreeNode;
  P: TPoint;

begin
  // Coordenadas donde se da el doble click
  P := TreeView1.ScreenToClient(Mouse.CursorPos);

  // Si se dió sobre la etiqueta del nodo ...
  if htOnLabel in TreeView1.GetHitTestInfoAt(P.X, P.Y) then
  begin
    // Obtener el nodo
    Node := TreeView1.GetNodeAt(P.X, P.Y);

    // Si es nodo hoja ...
    if not Node.HasChildren then
      ShowMessage(Node.Text);
  end;
end;

// Saludos

Caro 22-08-2008 17:03:33

Hola rgstuamigo, puedes utilizar lal función GetHitTestInfoAt del TreeView.

Editado: controlando lo del hijo mas, así quedaría mi codigo:

Código Delphi [-]
procedure TForm1.TreeView1DblClick(Sender: TObject);
var
 Punto : TPoint;
begin
 Punto := TreeView1.ScreenToClient(Mouse.CursorPos);

 if (htOnItem in TreeView1.GetHitTestInfoAt(Punto.X , Punto.Y)) AND Not (TreeView1.Selected.HasChildren) then
  showmessage('Estamos en el item '+TreeView1.Selected.Text);
end;

Saluditos

rgstuamigo 22-08-2008 17:24:06

Gracias por reponder roman tu codigo es bueno es lo que necesitaba,
Gracias tambien a Caro por responder aunque tu codigo es mas corto que el roman tiene u pequeño detalle que acepta tambien a nodos que son padres y lo que yo queria era que solo sea a un nodo hijo.
Pero como hago para el Enter?
Gracias a los dos son un veneno=bueno,rapido,eficaz ;para responder. Saludo.....:cool:


La franja horaria es GMT +2. Ahora son las 04:44:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi