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 TreeView - Node verschieben DragDrop - aktuelle Ebene (https://www.delphipraxis.net/128342-treeview-node-verschieben-dragdrop-aktuelle-ebene.html)

user0815 28. Jan 2009 08:37


TreeView - Node verschieben DragDrop - aktuelle Ebene
 
Hallo @all !

Code von: http://www.swissdelphicenter.ch/torr...de.php?id=1830

Problem = erledigt !
Ich habe vor einen Knoten von 5->3 auf 4->3 zu verschieben - klappt !
Ich will nicht das es möglich ist z.B. 1->1 auf 1 zu verschieben, denke hierzu müsste ich die Ebene abfragen, komme hier aber nicht weiter ?
Mit dem Code ist es zudem auch nicht möglich ein Item an den Knoten 0 anzuhängen.

Danke für Eure Hilfe !
user0815


Delphi-Quellcode:
//------------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
var
  Node : TTreeNode;
  i,j : Integer;
begin
  TreeView1.DragMode := dmAutomatic;

  Node := TreeView1.Items.Add(nil, IntToStr(0));

  for i := 1 to 5 do
  begin
    Node := TreeView1.Items.Add(nil, IntToStr(i));

    for j := 1 to i do
    begin
      TreeView1.Items.AddChild(Node, IntToStr(i) + ' -> ' + IntToStr(j));
    end;
  end;
end;
//------------------------------------------------------------------------------
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  ToDeleteItem, DropItem, CurrentItem, NextItem : TTreeNode;
  ChildCount, Childrun : Integer;
begin
{
  if Sender = Source then
  begin
    DropItem := TreeView1.GetNodeAt(X, Y);
    CurrentItem := TreeView1.Selected;
    ToDeleteItem := CurrentItem;
    NextItem := TreeView1.Items.Insert(DropItem, CurrentItem.Text);
    DropItem := NextItem;
    ChildCount := TreeView1.Selected.Count;

    for Childrun := 1 to ChildCount do
    begin
      CurrentItem := TreeView1.Selected.GetFirstChild;
      NextItem := TreeView1.Items.AddChild(DropItem, CurrentItem.Text);
      TreeView1.Items.Delete(CurrentItem);
    end;

    ToDeleteItem.Delete;
  end;
}
  // Änderung - so funktioniert es wie ich will
  if Sender = Source then
  begin
    DropItem := TreeView1.GetNodeAt(X, Y);
    CurrentItem := TreeView1.Selected;

    if CurrentItem.Level > 0 then
    begin
      ToDeleteItem := CurrentItem;

      if DropItem.Level > 0
       then TreeView1.Items.Insert(DropItem, CurrentItem.Text)
      else if DropItem.Level = 0
       then TreeView1.Items.AddChild(DropItem, CurrentItem.Text);

      ToDeleteItem.Delete;
    end;
  end;
end;
//------------------------------------------------------------------------------
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Sender = TreeView1;
end;
//------------------------------------------------------------------------------


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 Uhr.

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