Sorry, dass ich micherst jetzt wieder melde -> Stress.
Hast du die Sources zu der Demo dazu bekommen?
Da wird ja 'ne Menge Drag 'n Drop verwendet ...
Im Normalfall kann man es so machen:
OnDragOver des Ziels:
Delphi-Quellcode:
If Source Is TTreeView Then
Accept := True;
OnMouseDown des UrsprungsTreeview:
Delphi-Quellcode:
With Sender As TTreeView Do
If Assigned(GetNodeAt(X, Y)) Then
BeginDrag(False, 10);
OnDragDrop des Ziels:
Verschieben des Node...
Delphi-Quellcode:
Var
drSource, drSender : TTreeView;
drNode : TTreeNode;
AttachMode : TNodeAttachMode;
HT : THitTests;
Begin
drSource := Source As TTreeView;
drSender := Sender As TTreeView;
// Wenn kein Node im HerkunftsTreeView markiert ist -> Exit...
If drSource.Selected = Nil Then Exit;
drNode := drSender.GetNodeAt(X, Y);
HT := drSender.GetHitTestInfoAt(X, Y);
If (HT -
[htOnItem, htOnIcon, htNowhere, htOnIndent]
<> HT) Then
Begin
If (htOnItem In HT) Or
(htOnIcon In HT) Then
AttachMode := naAddChild
Else If htNowhere In HT Then
AttachMode := naAdd
Else If htOnIndent In HT Then
AttachMode := naInsert;
// Verschiebe Node ...
drSource.Selected.MoveTo(drNode, AttachMode);
End;
End;
Kopieren ist einfacher...
Delphi-Quellcode:
drSource := Source As TTreeView;
drSender := Sender As TTreeView;
// Wenn kein Node im HerkunftsTreeView markiert ist -> Exit...
If drSource.Selected = Nil Then Exit;
drNode := drSender.GetNodeAt(X, Y);
If Not Assigned(drNode) Then Exit;
drSender.Items.AddChild(drNode, drSource.Selected.Text).Selected := True;
Ich hoffe ich habe keine Fehler eingebaut...