Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - VirtualTreeview DragDrop Fehler???
daywalker0086 - Di 05.04.11 22:31
Titel: VirtualTreeview DragDrop Fehler???
Bei meinen Bemühungen um die Komponente wollte ich die Drag and Drop Funktion nutzen.
Wenn ich allerdings das Ereignis onDragDrop nutzen will kommt beim kompilieren folgende Fehlermeldung;
In der Deklaration:
Delphi-Quelltext
1: 2: 3:
| procedure vstDragDrop(Sender: TBaseVirtualTree; Source: TObject; DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode); |
Undefinierter Bezeichner IDataObject
Aber da Delphi den Kopf der Procedur selbst schriebt sollte doch sowas nicht passieren oder?
jaenicke - Di 05.04.11 22:35
Ein kurzer Blick in die VirtualTrees.pas genügt: Füge einfach die Unit ActiveX zur uses hinzu. ;-)
daywalker0086 - Di 05.04.11 23:42
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...
jaenicke - Mi 06.04.11 00:10
An der Stelle (in else) musst du dann selbst einen neuen Knoten mit den gezogenen Daten erstellen. ;-)
Denn die VirtualTreeView kann ja nicht wissen was das für Daten sind.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!