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 |
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. ;) |
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. |
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.
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 |
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. |
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. |
Creo que puedes ahorrarte el paso por el evento OnMouseDown y la variable booleana:
Bye |
La franja horaria es GMT +2. Ahora son las 14:44:01. |
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