Programowanie w języku Delphi » FAQ

Drag and drop w TreeView

Ustawiamy właściwość TreeView dragMode na dmAutomatic.

Następnie:

procedure TForm1.TreeView1DragOver(Sender, Source: TObject;
             X, Y: Integer; State: TDragState; var Accept: Boolean);
var
  TargetNode, SourceNode: TTreeNode;
begin
  TargetNode := TreeView1.GetNodeAt (X, Y);
   if (Source = Sender) and (TargetNode <> nil) then
    begin
       Accept := True;
      SourceNode := TreeView1.Selected;
 
      while (TargetNode.Parent <> nil) and (TargetNode <> SourceNode) do
            TargetNode := TargetNode.Parent;
 
   if TargetNode = SourceNode then
     Accept := False;
   end
   else
      Accept := False;
end;
 
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  TargetNode, SourceNode: TTreeNode;
begin
  TargetNode := TreeView1.GetNodeAt (X, Y);
    if TargetNode <> nil then
    begin
       SourceNode := TreeView1.Selected;
       SourceNode.MoveTo (TargetNode, naAddChildFirst);
       TargetNode.Expand (False);
       TreeView1.Selected := TargetNode;
   end;
end;

3 komentarze

Johny_Morfina 2007-11-08 10:03

mozna tez inaczej, w OnDragOver komponentu nad ktorym przeciagasz masz wspolrzedne X i Y no i jak sa one blisko ktorejs krawedzi to mozesz przesunac ten komponent w odpowiednia strone tak zeby pokazalo sie to co Cie interesuje

mlagrass 2006-01-08 09:33

ustaw 2 komponenty niewidoczne na koncówkach TreeView np.: Timage i zaprogramój odpowiednio zdarzenie "OnMouseMove" dla nich.............kombinatoryka...hehehe...

ShadowX 2005-11-02 21:14

Robię właśnie drag \'n\' drop w TreeView. Mam jednak problem. Drzewo nie mieści mi się w widocznym obszarze. Jak zrobić, by podczas przeciągania gałęzi, przy dojechaniu do górnej lub dolnej krawędzi widocznego obszaru, zawartość przesuwała się tak, aby można było dotrzeć do gałęzi docelowej ?