Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Virtual TreeView Nodes vertauschen (MoveUp/MoveDown) (https://www.delphipraxis.net/132134-virtual-treeview-nodes-vertauschen-moveup-movedown.html)

oki 6. Apr 2009 20:51


Virtual TreeView Nodes vertauschen (MoveUp/MoveDown)
 
Hi Leute,

entweder es ist zu spät oder ich weis auch nicht. Ich möchte die Position eines Nodes im Zweig eines Baumes eine Position nach oben oder nach unten verschieben. Also ein klassisches MoveUp/MoveDown. Die Hilfe war fruchtlos, die Suche in der DP auch und in meinem Gehirn gleich ganz. Kann mir mal einer die Erleuchtung bringen?

Dank und Gruß oki

toms 7. Apr 2009 04:47

Re: Virtual TreeView Nodes vertauschen (MoveUp/MoveDown)
 
Hallo

ungetestet:
z.B den nächsten Node ermitteln mit VST.GetNext(..)
Dann VST.MoveTo(...) anwenden.

oki 7. Apr 2009 08:29

Re: Virtual TreeView Nodes vertauschen (MoveUp/MoveDown)
 
Hi Toms,

nach MoveTo hatte ich gesucht, leider nur im pdf zum VTree. Ich schau noch mal nach. Da muss mir dann was entgangen sein. Naja, war gestern auch nicht mehr sehr früh am Tag. Kann das leider erst heute abend machen. Melde mich dann noch mal mit den Ergebnissen.

Dank für die Antwort und Gruß

oki

torud 7. Apr 2009 09:19

Re: Virtual TreeView Nodes vertauschen (MoveUp/MoveDown)
 
Hi,

ich habs mal so versucht, aber in dem Fall wird mir die erste Node immer an die letzte Stelle verschoben. Warum nur?

Delphi-Quellcode:
procedure TForm1.btn_down_itemClick(Sender: TObject);
var
  Node: PVirtualNode;
begin
  Node:=VST.FocusedNode;

  if Node <> nil then
    begin
      vst.MoveTo(Node,vst,amInsertAfter,false);
    end;
    vst.Selected[vst.GetFirst] := true; //selektiere die erste node
    list_menu_itemsClick(self); //führe code beim selektieren aus
end;

torud 7. Apr 2009 10:24

Re: Virtual TreeView Nodes vertauschen (MoveUp/MoveDown)
 
Also ich habe den Code nochmal geändert.
Mit dem Update der Komponente (von März 2009) und dem geänderten Code, gehts nun.
Wenn´s jemandem helfen sollte, freuts mich!

Delphi-Quellcode:
//bewege node 1 nach unten
procedure TForm1.btn_down_itemClick(Sender: TObject);
var
  Node: PVirtualNode;
begin
  Node:=VST.FocusedNode;

  if Node <> nil then
    begin
      vst.MoveTo(Node,vst.GetNext(Node),amInsertAfter,false);
    end;
    vst.Selected[Node] := true; //selektiere das node gleich noch
    list_menu_itemsClick(SELF); //führe update für selektion aus, falls nötig
end;

//bewege node 1 nach oben
procedure TForm1.btn_up_itemClick(Sender: TObject);
var
  Node: PVirtualNode;
begin
  Node:=VST.FocusedNode;

  if Node <> nil then
    begin
      vst.MoveTo(Node,vst.GetPrevious(Node),amInsertBefore,false);
    end;
    vst.Selected[node] := true; //selektiere das node gleich noch
    list_menu_itemsClick(SELF); //führe update für selektion aus, falls nötig
end;

oki 7. Apr 2009 17:54

Re: Virtual TreeView Nodes vertauschen (MoveUp/MoveDown)
 
Hi torud,

auch dir Dank für die Hilfe. Ich hab das pdf noch mal durchstöbert. Dabei ist mir aufgefallen, dass ich MoveTo wirklich übersehen hatte. Keine Ahnung warum.
Dein erster Code ist schon korrekt. MoveTo gibt es in überladener Version mit dem Aufruf für die Angabe eines Knotens sowie eines VTree als Ziel.
Dieser Code:
Delphi-Quellcode:
  vst.MoveTo(Node,vst,amInsertAfter,false);
verschiebt den Node in das VTree vst an die letzte (amInsertAfter) Stelle (wobei vst der eigene Tree ist). Es wird also die Methode:
Delphi-Quellcode:
procedure MoveTo(Node: PVirtualNode; Tree: TBaseVirtualTree; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean); overload;
verwendet.

In deinem zweiten Beispiel rufst du wie folgt auf:
Delphi-Quellcode:
  vst.MoveTo(Node,vst.GetPrevious(Node),amInsertBefore,false);
Da wird dann diese Methode verwendet:
Delphi-Quellcode:
procedure MoveTo(Source: PVirtualNode; Target: PVirtualNode; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean); overload;
Ich denke mal, da steckt das ganze Geheimnis. Ob vor dem Update die Methode überladen war kann ich aber auch nicht sagen. Ich denke mal eher ja.

Ich hatte ganz vergessen meine Frage als beantwortet zu kennzeichen. Das werd ich jetzt nachholen. Besten Dank an euch beide,

bis die Tage

oki

torud 7. Apr 2009 18:46

Re: Virtual TreeView Nodes vertauschen (MoveUp/MoveDown)
 
Servus Oki,

danke für Dein Feedback. Auch vor dem Update war die Methode überladen, aber die von mir gelisteten Codes verschoben die Node IMMER an letzte respektive letzte Stelle. Naja und das wollte ich nicht. Seit dem Update gehts aber einwandfrei.

oki 7. Apr 2009 19:21

Re: Virtual TreeView Nodes vertauschen (MoveUp/MoveDown)
 
Ah, gut zu wissen. Welche Version war denn bei dir die alte und welche ist die neue? Nicht, dass ich in die selbe Falle tappe.

Gruß oki

torud 8. Apr 2009 06:38

Re: Virtual TreeView Nodes vertauschen (MoveUp/MoveDown)
 
Servus,

also die aktuelle Version ist die 4.8.5.
Kann sein, dass ich vorher die 4.7.0 installiert hatte.

Hier noch schnell der Link http://www.soft-gems.net

oki 8. Apr 2009 16:46

Re: Virtual TreeView Nodes vertauschen (MoveUp/MoveDown)
 
Hi torud,

habs bei mir getestet und läuft anstandslos.

Dank für die Hilfe und Gruß

oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 Uhr.
Seite 1 von 2  1 2      

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