Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi [TTreeView] Während Drag&Drop auf Select reagieren (https://www.delphipraxis.net/122312-%5Bttreeview%5D-waehrend-drag-drop-auf-select-reagieren.html)

RWarnecke 13. Okt 2008 19:54


[TTreeView] Während Drag&Drop auf Select reagieren
 
Hallo zusammen,

ich möchte gerne in meinem TreeView per Drag & Drop Einträge verschieben können. Das funktioniert auch schon soweit. Nur habe ich das Problem, wenn ich eine Node selektiere während des Drag, dann wird diese Node nicht erweitert. Wie kann ich das realisieren ?

toms 13. Okt 2008 21:29

Re: [TTreeView] Während Drag&Drop auf Select reagieren
 
Meinst du so?

Delphi-Quellcode:
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  Node: TTreeNode;
begin
  Node := TreeView1.GetNodeAt(X, Y);
  if Assigned(Node) then
    Node.Expand(False);
end;

RWarnecke 13. Okt 2008 22:33

Re: [TTreeView] Während Drag&Drop auf Select reagieren
 
Jepp, genau so meine ich das toms. Danke.

Ich habe noch zusätzlich dieses Beispiel gefunden.

RWarnecke 22. Okt 2008 16:43

Re: [TTreeView] Während Drag&Drop auf Select reagieren
 
Ich habe das Beispiel in einer etwas anderen Form verwendet. Ich habe das Verschieben in eine eigene Procedure gesteckt. Nun habe ich das Problem dabei, dass sich mein Programm fast regelmäßig aufhängt, wenn ich zu schnell die Kategorien wechsel mit der Maus. Mit dem Debugger habe ich herrausgefunden, dass ich immer in der Procedure für das Verschieben hängen bleibe. Nur weiß ich nicht warum. Hier die Procedure zum Verschieben :
Delphi-Quellcode:
procedure TMainForm.MoveNode(TargetNode, SourceNode : TTreeNode);
var
  nodeTmp : TTreeNode;
  i : Integer;
begin
  with TV_Category do
  begin
    nodeTmp := Items.AddChild(TargetNode,SourceNode.Text);
    nodeTmp.ImageIndex := SourceNode.ImageIndex;
    nodeTmp.SelectedIndex := SourceNode.SelectedIndex;
    for i := 0 to SourceNode.Count -1 do
    begin
      MoveNode(nodeTmp,SourceNode.Item[i]);
    end;
  end;
end;
Das funktioniert auch alles wunderbar, wenn ich langsam damit arbeite. Das Programm bleibt in der For-Schleife hängen und wiederholt immer die Kategorie, die als letztes vor dem Aufhängen angeklickt wurde. Ich wollte damit erreichen, dass ich auch Nodes verschieben kann, die noch mehrere Childs haben.

Jetzt meine Frage, wird das OnDragOver-Ereignis auch dann aufgerufen, wenn ich nur eine Node anklicke ? Kann ich das irgendwie verhindern, dass sich diese Procedure aufhängt und wenn ja wie ?

Tom 22. Okt 2008 17:36

Re: [TTreeView] Während Drag&Drop auf Select reagieren
 
Zitat:

Zitat von RWarnecke
Ich wollte damit erreichen, dass ich auch Nodes verschieben kann, die noch mehrere Childs haben.

MoveNode verschiebt den Konten inkl. Childs. Also ist hier keine Sonderbehandlung notwendig.

RWarnecke 22. Okt 2008 18:09

Re: [TTreeView] Während Drag&Drop auf Select reagieren
 
Danke Tom, ich habe das Drag & Drop jetzt mit MoveTo gemacht. Es scheint besser zu sein. Ich werde es mal beobachten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz