Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Di 05.04.11 22:31 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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; // ein Pointer auf Knoten
AttachMode :TVTNodeAttachMode;
begin
if (VST.DragType = dtOLE) and (Source = Sender)
then begin
case Mode of // DropPosition in NodeAttachMode umsetzen
dmAbove: AttachMode := amInsertBefore;
dmOnNode:  AttachMode := amAddChildFirst;
dmBelow: AttachMode := amInsertAfter;
else AttachMode := amNowhere;
end;
pNode := Sender.DropTargetNode; // Target
Sender.ProcessDrop(DataObject, pNode, Effect, AttachMode);
Sender.FullExpand(pNode); // toAutoDropExpand reicht nicht
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.