Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ayuda conTReeView y PopupMenu (https://www.clubdelphi.com/foros/showthread.php?t=71018)

rruffino 24-11-2010 22:27:49

Ayuda conTReeView y PopupMenu
 
Hola a todos. Tengo un treeview cargado de manera estática, y le he asignado un popu menu. Lo que quiero lograr es que cuando hago click derecho sobre la raiz no me muetre el popupmenu y que si lo haga cuando hago click derecho sobre un hijo. El tree es de dos niveles, es decir, varios padres con varios hijos, no tengo padres dentro de padres. Esto es a fines de que cuando haga click derecho en el hijo me de la opción de agregarlo a una especie de favoritos para tener un acceso directo sin necesidad de buscar por el tree. Desde ya les agradezco su disposición y ayuda.:D

Neftali [Germán.Estévez] 25-11-2010 13:04:40

Se me ocurren dos opciones que deberías probar.

La primera es que una vez que visualices el PopupMenu, si no es el item que deseas lo vuelvas a ocultar. Si no recuerdo mal hay un evento que salta al visualizar el menú.

La otra opción (un poco más compleja) es que no asignes el PopupMenu a la propiedad y lo muestres manualmente. De esta forma puedes decidir cuando motrarlo y cuando no. Pare ello debes capturar el Click derecho del ratón, y utilizar el procedimiento del PopupMenu para mostrarlo manualmente (Popup o DoPopup).

Caro 25-11-2010 14:49:29

Hola, siguiendo las ideas de Neftali, me ha funcionado de esta forma, utilizando el evento OnContextPopup.

Código Delphi [-]
procedure TForm1.TreeView1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
var
 Nodo: TTreeNode;
begin
  Nodo := TreeView1.GetNodeAt(MousePos.X, MousePos.Y);
  if (Nodo <> nil) then
   begin
    TreeView1.Select(Nodo);
    if Not(Nodo.HasChildren) then
     TreeView1.PopupMenu := PopupMenu1
    else
     TreeView1.PopupMenu := Nil;    
   end;
end;

No debes asignar el popupmenu en diseño al TreeView.

Saluditos

rruffino 25-11-2010 15:06:14

ultima consulta.... creo
 
Hola y muchas gracias por las respuestas. He implementado esto ultimo y me funciona barbaro. Ahora, en el popup menu realizo una operación y esta no me toma el indice que esta seleccionado en el arbol, es decir, que cuando hago click derecho sobre un hijo me muestra el popupmenu pero cuando accedo a la operacion del popup no me toma el indice del arbol en donde estoy parado. Si primero hago click izquierdo y luego click derecho si me funciona al pelo, pero queria hacerlo solo con el derecho. Les agradezco si me tiran hilo de como hacerlo. Gracias!!!!:rolleyes:

Caro 25-11-2010 15:24:46

Cita:

Empezado por rruffino (Mensaje 383232)
Ahora, en el popup menu realizo una operación y esta no me toma el indice que esta seleccionado en el arbol.......

Hola de nuevo, cambia esta linea:

Código Delphi [-]
    TreeView1.Select(Nodo);

por esta otra, para que te tome el indice correctamente

Código Delphi [-]
    TreeView1.Selected := Nodo;

Saluditos

rruffino 25-11-2010 15:45:28

Solucionado
 
Perfecto Caro, funciona al pelo.
Agradezco las respuestas de todos.
Saludos!!;)


La franja horaria es GMT +2. Ahora son las 00:14:52.

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