AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi VST bei OnDragOver auf das Datenobject greifen wegen Accept
Thema durchsuchen
Ansicht
Themen-Optionen

VST bei OnDragOver auf das Datenobject greifen wegen Accept

Ein Thema von Kostas · begonnen am 9. Feb 2008 · letzter Beitrag vom 10. Feb 2008
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

VST bei OnDragOver auf das Datenobject greifen wegen Accept

  Alt 9. Feb 2008, 23:39
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
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: VST bei OnDragOver auf das Datenobject greifen wegen Acc

  Alt 10. Feb 2008, 00:08
Hallo Kostas,

der gewünschte Knoten wird dir zwar nicht übergeben, du kannst ihn aber über die Koordinaten des Mauszeigers ermitteln:

Delphi-Quellcode:
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;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: VST bei OnDragOver auf das Datenobject greifen wegen Acc

  Alt 10. Feb 2008, 00:40
Zitat von Hawkeye219:
Hallo Kostas,

der gewünschte Knoten wird dir zwar nicht übergeben, du kannst ihn aber über die Koordinaten des Mauszeigers ermitteln:

Delphi-Quellcode:
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;
Gruß Hawkeye
Perfekt genau das hat mir gefehlt.

Denkeschön Hawkeye
Gruß Kostas
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: VST bei OnDragOver auf das Datenobject greifen wegen Acc

  Alt 10. Feb 2008, 01:03
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:
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;
Gruß Kostas
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: VST bei OnDragOver auf das Datenobject greifen wegen Acc

  Alt 10. Feb 2008, 08:53
Hallo Kostas,

hast du das Flag "TreeOptions.AutoOptions.toAutoDeleteMovedNode s" auf den Wert False gesetzt?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: VST bei OnDragOver auf das Datenobject greifen wegen Acc

  Alt 10. Feb 2008, 13:48
Zitat von Hawkeye219:
Hallo Kostas,

hast du das Flag "TreeOptions.AutoOptions.toAutoDeleteMovedNode s" auf den Wert False gesetzt?

Gruß Hawkeye
Volltreffer der Kandidat hat 100 Punkte.
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz