Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TVirtualStringTree editieren / löschen
MDX - So 29.05.11 12:37
Titel: TVirtualStringTree editieren / löschen
Hey...
nachdem ich hier
http://www.delphi-forum.de/viewtopic.php?t=105683 endlich geschafft habe die Daten hinzuzufügen, würde ich diese nun auf Klick wieder entfernen (die markierte Spalte) und bei klick auf die Spalte selbst edtierbar machen (jedoch nur eine, die zweite Spalte).
Ich hab
hier [
http://www.delphi-treff.de/tutorials/komponenten/virtualtreeview/editieren-ermoeglichen/] gelesen, dass es scheinbar nur möglich sein soll den RootNode zu bearbeiten? Stimmt das oder gibt es da doch eine Möglichkeit zu auch ChildNodes zu bearbeiten?
Ich hab es mal mit folgendem Probiert, wobei ich dann jeweils nur die erste (Root) Spalte bearbeiten kann.. Der Text wird leider aber auch nicht gespeichert...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.vstEditing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); begin Allowed:=Sender.GetNodeLevel(Node)<1; end;
procedure TForm1.VSTNewText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; NewText: string); var kdaten:TEntries; begin kdaten:=Sender.GetNodeData(Node.Parent); if Assigned(kdaten) then kdaten.wid:=NewText; end; |
Leider scheint es im ganzen Internet kein vernünftiges Tutorial zu geben, das einem richtig hilft.... :?
Danke...
jaenicke - So 29.05.11 20:03
Also erstens musst du das ganze überhaupt editierbar machen. Dafür setzt du unter TreeOptions --> MiscOptions toEditable auf True. Dann musst du die Spalten einzeln markieren können. Dafür setzt du unter TreeOptions --> SelectionOptions toExtendedFocus auf True. Dann brauchst du noch OnNewText was du ja schon hast um den Text auch zu speichern.
Beispiel im Anhang, wobei ich die Spalte erst einmal nicht beachte beim Speichern.
MDX - So 29.05.11 20:51
Wow danke, es funktioniert mit dem bearbeiten :D
Jetzt muss ich lediglich noch hinbekommen dass nur die zweite Spalte Edtierbar ist (Im Moment kann man jede bearbeiten und die zweite wird überschrieben) und wie ich einen Eintrag wieder entfernt bekommt :)
Edit:
Für Mich selbst und alle anderen die auch Probleme haben, nur die zweite Spalte editierbar zu machen geht so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.vstEditing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); begin if Sender.FocusedColumn = 1 then Allowed:=True else Allowed:=False; end; |
:D
Edit2:
Darauf hätte ich auch früher kommen können -_-'
Delphi-Quelltext
1:
| VST.DeleteSelectedNodes; |
:D
Egal, danke nochmal Sebastian ;)
jaenicke - Mo 30.05.11 04:16
MDX hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.vstEditing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); begin if Sender.FocusedColumn = 1 then | |
Wofür meinst du bekommst du die Spalte übergeben? ;-)
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.vstEditing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); begin Allowed := Column = 1; end; |
Und alle überschrieben wird ja nur weil im Beispiel in OnNewText nicht nach Spalte unterschieden wird.
MDX - Mo 30.05.11 06:09
Ich hab die Lösung wahrscheinlich zu für einfach gehalten dass ich das total überlesen hatte was genau im Kopf der Prozedur steht :D
Aber noch eine kleine Frage, wieso hat das Ding keine Funktion names onselect? ;)
jaenicke - Mo 30.05.11 06:40
Weil das ja nur das Markieren abdecken würde. Dir geht es aber um den Fokus. ;-)
Stattdessen gibt es OnFocusChanged, das sowohl beim Fokusgewinn als auch beim Verlust des Fokus ausgelöst wird (dann ist Node nicht Assigned).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!