Einzelnen Beitrag anzeigen

Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#1

TreeView - Node verschieben DragDrop - aktuelle Ebene

  Alt 28. Jan 2009, 08:37
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;
//------------------------------------------------------------------------------
  Mit Zitat antworten Zitat