Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   TreeView excepción (https://www.clubdelphi.com/foros/showthread.php?t=19160)

jymy788 07-03-2005 09:57:43

TreeView excepción
 
Buenos días a todos.

Vamos a ver si me sé explicar: estoy utilizando un TtreeView (en Delphi 7)para hacer una estructura recursiva entre tablas de la base de datos, vamos, que tengo un porrón de nodos. De todas formas ese no es el problema, el caso es que si intento arrastrar un nodo (de dentro) al nodo raiz, y sobre paso este por encima, se cuelga mi aplicación y se cierra inmediatamente sin mostrarme ni un puñetero mensaje de error.

Supongo que me he explicado como el culo, vamos ni que fuera lunes. Esto me pasaba también si intentaba arrastrar (drag over) un elemento desde la parte superior a cualquiera de los nodos "escondidos" por el scroll ya que no cabían en la pantalla y el treeview se hacia la "picha un lío" para tratar de encontrar el nodo target donde soltar el elemento.

Esto lo solucioné de la siguiente manera, metiendo en el evento drag over estas lineas de código

if Y <= DistanceToScroll then
SendMessage(TV.Handle, WM_VSCROLL, SB_LINEUP, 0)
else if Y >= TV.ClientHeight - DistanceToScroll then
SendMessage(TV.Handle, WM_VSCROLL, SB_LINEDOWN, 0);

Pues bien, esta "solución" no es del todo válida porque si el drag over se hace muy deprisa o se te va la pinza y te mueves por el árbol hasta el final, donde no hay nodos, la aplicación casca igual.

En fin, si alguien me puede echar un cable con esto, estaría eternamente agradecido.

jymy788 08-03-2005 09:39:41

Ya he visto que la gente ha leído mi problema y aun así no tengo solución. Yo le he seguido dando vueltas y supongo que una solución sería evitar de alguna manera el drag & drop fuera del "contenedor" del componente, pero tampoco he conseguido hacerlo así que, una vez más, si alguien me puede echar un cable... ES IMPORTANTE !!!

Gracias a todos.

Lepe 08-03-2005 14:09:19

Cita:

una solución sería evitar de alguna manera el drag & drop fuera del "contenedor"
en el dragOver pon : Accept := sender = source;
solo permitirá el arrastrar y soltar dentro del mismo Treeview.

El hecho de que casque es que el elemento seleccionado en el treeview sea nil. Comprueba siempre esa posiblidad:
Código Delphi [-]
if treview1.selected <> nil then //
begin
  treview1.selected.text ===> aqui no hay posible fallo, se puede acceder a Text sin problemas
end

Tienes que hacer esa comprobación tanto para el nodo Origen como Destino de la operacion "arrastrar y soltar"

Para ser más exactos, pon el código de Ondragdrop para localizar el fallo.

Saludos


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

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