Autor Beitrag
MDX
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 595
Erhaltene Danke: 4

Windows 8.1, Linux Debian 8, Android Lollipop
Delphi, PHP, Java (Android)
BeitragVerfasst: So 29.05.11 13:37 
Hey...
nachdem ich hier 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 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...
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 29.05.11 21: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.
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: MDX
MDX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 595
Erhaltene Danke: 4

Windows 8.1, Linux Debian 8, Android Lollipop
Delphi, PHP, Java (Android)
BeitragVerfasst: So 29.05.11 21: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:

ausblenden 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 -_-'
ausblenden Delphi-Quelltext
1:
VST.DeleteSelectedNodes;					


:D

Egal, danke nochmal Sebastian ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 30.05.11 05:16 
user profile iconMDX hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.vstEditing(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndexvar Allowed: Boolean);
begin
if Sender.FocusedColumn = 1 then
Wofür meinst du bekommst du die Spalte übergeben? ;-)
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 595
Erhaltene Danke: 4

Windows 8.1, Linux Debian 8, Android Lollipop
Delphi, PHP, Java (Android)
BeitragVerfasst: Mo 30.05.11 07: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

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