Hi
Ich versuche verzweifelt OLE Drag&Drop im VirtualTreeView zu benutzen.
Es gibt auf
soft-gems.net eine Demo dafür ("Virtual Treeview (demo apps)" / 3. von oben), doch die enthält IMHO Fehler.
Hab die Units der Demo unten angehängt.
Zeile 646 soll eigentlich den OLE Drop Prozess auslösen:
Delphi-Quelltext
1:
| Sender.ProcessDrop(DataObject, Sender.DropTargetNode, Effect, Mode); |
Doch setzt man in der Zeile einen Haltepunkt stellt man fest, dass diese Zeile bei keinem Drag&Drop Vorgang ausgeführt wird.
Logisch, weil in den Eigenschaften des VST unter ClipboardFormats Virtual Tree Data garnicht aktiviert ist.
Die if Abfrage in Zeile 639 wird also nie true:
if Formats[I] = CF_VIRTUALTREE thenDadurch kommt es nie zum ProcessDrop.
Aktiviert man test weise unter ClipboardFormats Virtual Tree Data sieht man das, das OLE Drag&Drop nicht funktioniert.
Die Nodes verschwinden nach dem Drop einfach.
Wieso Drag&Drop aber funktioniert wenn unter ClipboardFormats Virtual Tree Data auf false ist liegt daran:
Die Namen der Nodes werden wie üblich in einem Rekord gespeichert.
Aber der Code tut das Rekord nicht mit dem Knoten kopieren oder verschieben.
Das Caption des Nodes wird dort mithilfe soSaveCaptions übernommen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TMainForm.Tree1NewText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; Text: WideString);
var Data: PNodeData;
begin Data := Sender.GetNodeData(Node); Data.Caption := Text; end; |
Kurzum: Die Demo enthält Fehler.
Jemand eine Idee wie ich das Rekord mit verschieben kann?
Wo finde ich eine funktionierende Demo für OLE Drag&Drop?
MfG