![]() |
VST bei OnDragOver auf das Datenobject greifen wegen Accept
Hallo Zusammen,
ich habe einen Baum: Parent1 Child1.1 Child1.2 Child1.3 Child1.4 Parent2 Child2.1 Child2.2 Child2.3 Child2.4 Jedes Node habe ich DATA Objekt hinterlegt:
Delphi-Quellcode:
type
PTreeData = ^TTreeData; TTreeData = record FCaption: String; FParentID:Integer; FChildID:Integer; end; Die Childs dürfen sich nur innerhalb demselben Parent bewegen. Child2.* darf also nicht bei Parent1 abgelegt werden. Das eigentliche Drag&Drop soll lediglich angezeigt werden jedoch im VST nicht ausgeführt werden. Ich benötige also NUR den Zugriff auf das Data Object beim ziehen und ablegen, um die neue Position in die Datenbank zu schreiben. Danach wird der komplette Bau neu aufgebaut. Im OnDragOver würde ich gerne das darunter liegende Data Objekt abfragen und Accept:=true setzen nur wenn die eigene ParentID die gleiche ist mit dem darunter liegenden Node.ParentID. Leider wird bei OnDragOver das Node nicht übergeben. Hat jemand eine Idee wir an das Node komme? Gruß Kostas |
Re: VST bei OnDragOver auf das Datenobject greifen wegen Acc
Hallo Kostas,
der gewünschte Knoten wird dir zwar nicht übergeben, du kannst ihn aber über die Koordinaten des Mauszeigers ermitteln:
Delphi-Quellcode:
Gruß Hawkeye
procedure TForm1.VSTDragOver(Sender: TBaseVirtualTree; Source: TObject;
Shift: TShiftState; State: TDragState; Pt: TPoint; Mode: TDropMode; var Effect: Integer; var Accept: Boolean); var Node : PVirtualNode; begin Node := Sender.GetNodeAt(Pt.X, Pt.Y); end; |
Re: VST bei OnDragOver auf das Datenobject greifen wegen Acc
Zitat:
Denkeschön Hawkeye Gruß Kostas |
Re: VST bei OnDragOver auf das Datenobject greifen wegen Acc
Hallo Hawkeye,
würdest Du bitte noch ein Blick auf meine DragDrop Methode werfen, der Node sollte eigentlich verschoben werden. Doch er verschwindet einfach nach dem Drop. Eigentlich brauche ich es nicht weil ich den Bau neu aufbauen lasse, aber so müsste sich doch der Node verschieben lassen oder?
Delphi-Quellcode:
Gruß Kostas
procedure TfrLigen.VSTDragDrop(Sender: TBaseVirtualTree; Source: TObject;
DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode); var SourceNode, TargetNode: PVirtualNode; DropMode: TVTNodeAttachMode; begin inherited; SourceNode := VST.FocusedNode; TargetNode := Sender.DropTargetNode; case Mode of dmAbove: DropMode := amInsertBefore; dmOnNode: DropMode := amInsertAfter; dmBelow: DropMode := amInsertAfter; end; VST.MoveTo(SourceNode, TargetNode, DropMode, true); end; |
Re: VST bei OnDragOver auf das Datenobject greifen wegen Acc
Hallo Kostas,
hast du das Flag "TreeOptions.AutoOptions.toAutoDeleteMovedNode s" auf den Wert False gesetzt? Gruß Hawkeye |
Re: VST bei OnDragOver auf das Datenobject greifen wegen Acc
Zitat:
Durchs herumprobieren habe ich es vermutlich verstellt. Das Node wird jetzt nicht gelöscht, aber auch nicht verschoben. Ich möchte eigentlich nur die Reihenfolge innerhalb des gleichen Parent verändern. //So geht es nicht VST.MoveTo(SourceNode, TargetNode.Parent, DropMode, true); //und aso auch nicht VST.MoveTo(SourceNode, TargetNode, DropMode, true); MoveTo verschiebt doch den Node oder habe ich da etwas missverstanden? Gruß Kostas [EDIT] HALT es geht doch. VST.MoveTo(SourceNode, TargetNode, DropMode, false); <<< so gehts |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz