Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Treeview - Drag/Drop erlauben abhängig vom TreeNode
Holgerwa - Di 08.02.05 00:31
Titel: Treeview - Drag/Drop erlauben abhängig vom TreeNode
Hallo,
ich habe einen TreeView, in dem ich einzelne TreeNodes einfach per Drag&Drop innerhalb des TreeViews verschieben kann.
Auch das Verhindern des "Drops" über einem TreeNode, über dem das nicht gemacht werden soll, funktioniert.
Dazu gibt es auch entsprechende Events, die das einfach ermöglichen.
Jetzt aber brauche ich etwas, das anscheinend nicht so normal ist:
Ich möchte, abhängig vom TreeNode, den der Benutzer "draggen" will, entscheiden, ob er diesen überhaupt "draggen" darf.
Anders ausgedrückt: Angenommen, ich habe die Nodes "1", "2" und "3". Jetzt kann der Benutzer ja jeden einzelnen "draggen". Ich möchte aber verhindern, daß z.B. der Node "3" gedraggt werden kann. Das soll einfach nicht funktionieren, man müßte also das Draggen direkt beim Start abbrechen.
Der OnStartDrag Event scheint das nicht zu können.
Hat jemand eine Idee?
Vielen Dank!
Holger
retnyg - Di 08.02.05 03:20
könntest ja im onclick ereignis prüfen ob GetNodeAT(x,y) gedraggt werden darf falls nicht disablest du die acceptdrag geschichte
wwwdirk - Di 08.02.05 09:50
Habe letzte Woche ein ähnliches Verhalten implementiert, allerdings habe ich nicht das Draggen einiger Knoten unterbunden, sondern das Ablegen im OnDragOver-Ereignis.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TfrmConfigMenu.trvMenuExplorerDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var target, origin: TTreeNode; begin target := trvMenuExplorer.GetNodeAt (X, Y); origin := trvMenuExplorer.Selected; Accept := (target.Level > 0) and (origin.Level > 0) and (target <> origin); end; |
Um das Draggen zu unterbinden, solltest Du mal versuchen die Eigenschaft DragMode erst zur Laufzeit (unter Berücksichtigung gewünschter Kriterien) zu setzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TfrmConfigMenu.trvMenuExplorerClick(Sender: TObject); begin with trvMenuExplorer.Selected do if Level = 0 then trvMenuExplorer.DragMode := dmManual else trvMenuExplorer.DragMode := dmAutomatic; end; |
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt.
Holgerwa - Di 08.02.05 21:09
Hallo,
super, das funktioniert!
Vielen Dank!
Gruß,
Holger
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!