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;
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
ustaw 2 komponenty niewidoczne na koncówkach TreeView np.: Timage i zaprogramój odpowiednio zdarzenie "OnMouseMove" dla nich.............kombinatoryka...hehehe...
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 ?