Danke, du bist meine Rettung sehe ich, kennst dich offenbar sehr gut aus:-)
Dazu hätt ich noch ne Frage, da interne verschieben funktioniertsuper, was muss ich nun in der Procedur ändern um den Text einer anderen Komponente per drap&drop in einen neuen Node zu bekommen?
ich bekomme zum Beispiel den selectierten Text eines treeview in einem label angezeigt:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Label2DragDrop(Sender, Source: TObject; X, Y: Integer); begin label2.Caption:=treeview1.Selected.Text; end; |
aber wie bekomme ich den Text in ein neeuen Knoten in dem virtualtreeview?
So kann ich innerhalb des Treeview verschieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.vstDragDrop(Sender: TBaseVirtualTree; Source: TObject; DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode);
var pNode :pVirtualNode; AttachMode :TVTNodeAttachMode; begin if (VST.DragType = dtOLE) and (Source = Sender) then begin case Mode of dmAbove: AttachMode := amInsertBefore; dmOnNode: AttachMode := amAddChildFirst; dmBelow: AttachMode := amInsertAfter; else AttachMode := amNowhere; end; pNode := Sender.DropTargetNode; Sender.ProcessDrop(DataObject, pNode, Effect, AttachMode); Sender.FullExpand(pNode); end else ShowMessage('Diese Funktionalität ist nicht implementiert!');
end; |
Aber nicht von außerhalb, dann springt er in den else zweig mit Showmessage. Wenn ich Source = Treeview1 einstelle bekomm ich eine exception wie zu erwarten war.
Ich bin durch die Routine noch nicht richtig durchgestiegen...