Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-02-2008
JM75 JM75 is offline
Miembro
 
Registrado: sep 2006
Posts: 25
Poder: 0
JM75 Va por buen camino
Cómo controlar donde se ha hecho doble click en un TTreeView

Hola,
tengo un componente TTreeView llamado Arbol en el cual hay un arbol con varios nodos y éstos con subnodos.

El componente Arbol tiene en el evento OnDblClick un código que lo que hace es mostrar la pantalla asociada del subnodo sobre el que se ha hecho doble click.

Para saber cual es el subnodo sobre el que se ha hecho doble click utilizo la propiedad Selected de Arbol que me dice cual es.

El problema está en que si selecciono un subnodo y hago doble click en otro sitio del componente TTreeView que no sea un nodo o un subnodo, me muestra la pantalla asociada al nodo seleccionado.

Por ejemplo, si selecciono el subnodo Nodo1_Subnodo1 y despliego y pliego rápidamente el nodo Nodo2, se cree que he hecho un doble click y me muestra la pantalla asociada al subnodo Nodo1_Subnodo1. Lo deseable es que no me mostrara esa pantalla.

Si no me he explicado bien me lo decís.

Un saludo y muchas gracias de antemano
Responder Con Cita
  #2  
Antiguo 21-02-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Tal vez pudieras encontrar una solución, pero, a mí me parece que el diseño (siempre quise decir esto) no parece muy adecuado. Es decir, que acaso no sea buena idea utilizar el "DoubleClick" para lo que quieres hacer y te convenga buscar otro camino. Pero puedo equivocarme, claro está. Además es la primera impresión que me da, nada más.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 21-02-2008
JM75 JM75 is offline
Miembro
 
Registrado: sep 2006
Posts: 25
Poder: 0
JM75 Va por buen camino
Hola dec,
tras hacer distintas pruebas en el evento DoubleClick, creo que llevas razón. Habrá que buscar la solución por otro camino. Probaré otros métodos del método TTreeView o de otro componente a ver si doy con una solución. Cuando la tenga la pondré aquí.

Gracias.
Responder Con Cita
  #4  
Antiguo 21-02-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola JM75

Puedes usar la función GetHitTestInfoAt del TreeView y tu le indicas en que momento quieres que haga algo, cuando se hace click en el Label en el icono, hay varias opciones.

Ejemplo, muestra el mensaje cuando se ha hecho click sobre las etiquetas del TreeeView.

Código Delphi [-]
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if (Button = mbLeft) and (htOnLabel in TreeView1.GetHitTestInfoAt(X, Y)) then
  Showmessage('Seleccionado');
end;

existe también
htOnItem -> En un item, su texto, o su BITMAP
htOnIcon -> En un Icono
........

Revisa la ayuda esta bien explicado. Espero te sirva.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 22-02-2008
JM75 JM75 is offline
Miembro
 
Registrado: sep 2006
Posts: 25
Poder: 0
JM75 Va por buen camino
Hola Caro,
gracias por tu respuesta. Voy a a utilizar tu solución con otra que he encontrado que resuelve algunos casos.

Cuando hago doble click sobre un subnodo, en el evento "DoubleClick" le he quitado la selección a dicho subnodo, por lo que si vuelvo a hacer doble click en otra parte del TTreeView ya no muestra ninguna pantalla al no haber ningún subnodo seleccionado.

El caso en que mi solución no es útil es si primero seleccionas un subnodo y después haces doble click en otro sitio del TTreeView. Como el subnodo sigue seleccionado, se muestra la pantalla asociada.

Un saludo.
Responder Con Cita
  #6  
Antiguo 22-02-2008
JM75 JM75 is offline
Miembro
 
Registrado: sep 2006
Posts: 25
Poder: 0
JM75 Va por buen camino
Hola,
la solución de Caro me ha solucionado el problema.

He utilizado la función "MouseDown" de Caro tal y como la ha puesto, salvo que en vez de mostrar un mensaje lo que hace es guardar en una variable booleana si se se ha pulsado sobre un label del árbol o no. Y en evento "DoubleClick" compruebo la variable boolena, y solo se ejecuta el código que ya tenía si la variable booleana es true.

Gracias por las respuestas.
Responder Con Cita
  #7  
Antiguo 23-02-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Creo que puedes ahorrarte el paso por el evento OnMouseDown y la variable booleana:

Código Delphi [-]
procedure TForm1.TreeView1DblClick(Sender: TObject);
var
  HitTests: THitTests;
  MousePos: TPoint;

begin
  MousePos := TreeView1.ScreenToClient(Mouse.CursorPos);
  HitTests := TreeView1.GetHitTestInfoAt(MousePos.X, MousePos.Y);

  if htOnLabel in HitTests then
    ShowMessage(TreeView1.Selected.Text);
end;

Bye
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Doble click en CxGrid El_Perrito Varios 3 30-03-2007 21:23:18
Doble Click en el título de la Ventana nemo API de Windows 0 25-07-2006 19:56:39
Evento Doble Click en DBgrid enecumene Conexión con bases de datos 1 03-07-2006 07:15:42
Doble click en titulo de grid rafita Varios 4 13-06-2006 10:22:04
Como controlar contenido de TTreeView FunBit OOP 2 22-07-2005 10:21:53


La franja horaria es GMT +2. Ahora son las 01:53:47.


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