VirtualStringTree - welche Zeile markiert?

Rund um die LCL und andere Komponenten

VirtualStringTree - welche Zeile markiert?

Beitragvon catweasel » 12. Jan 2018, 10:55 VirtualStringTree - welche Zeile markiert?

Hallo

Ich versuche herauszufinden welche Zeilennummer im VirtualStringTree ich angeklickt habe.

Zur Zeit versuche ich es mit einer Schleife das auch ganz gut funktioniert (abgesehen davon das mein Programm sich irgendwo aufhängt wenn die erste Zeile angeklickt wurde, aber das ist ein anderes Problem.

Code: Alles auswählen
  // welche zeile ist markiert?
var
  counter : integer;
  testnode: PVirtualNode;
begin
  counter:= 0;
  testnode:= ToDoVST.getfirst;
  repeat
    inc(counter);
    testnode:= ToDoVST.getnext(testnode);
  until ToDoVST.Selected[testnode];
  showmessage('Zeile '+inttostr(counter)+' angeklickt.');


Kann man das nicht eleganter machen?
So etwas wie eine property mit der Zeilennummer habe ich nicht finden können.

Gruß
Michael
catweasel
 
Beiträge: 189
Registriert: 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 18.3 - (L 1.6 FPC 3.0.0) | 
Nach oben

Beitragvon wp_xyz » 12. Jan 2018, 11:43 Re: VirtualStringTree - welche Zeile markiert?

Ich glaube nicht, dass das immer funktioniert. Mit GetNext(testnode) durchsuchst du alle Kindknoten, die zu testnode gehören, und testnode ermittelst du über GetFirst, ist also ein Knoten der obersten Hierchie-Ebene. Daher scheitert die Knotensuche, wenn du einen Knoten tiefer in der Hierachie selektiert hast.

Aber warum so kompliziert? Jeder TVirtualNode hat ein Element Index. Also:
Code: Alles auswählen
  Showmessage('Zeile ' + IntToStr(ToDoVST.FocusedNode^.Index) + ' angeklickt');

Allerdings bezieht sich der Index nur auf die Hierarchie-Ebene des betrachteten Knotens. Einen "globalen" Index gibt es m.E. nicht und würde auch dem Grundprinzip von VirtualTreeViews entsprechen, nach dem nur diejenigen Nodes geladen sind, die benötigt werden.

Die Frage ist letzendlich, was du mit "Zeilennummer" bei einer Baumstruktur eigentlich meinst.
wp_xyz
 
Beiträge: 2365
Registriert: 8. Apr 2011, 08:01

Beitragvon catweasel » 12. Jan 2018, 11:52 Re: VirtualStringTree - welche Zeile markiert?

wp_xyz hat geschrieben:Aber warum so kompliziert? Jeder TVirtualNode hat ein Element Index. Also:
Code: Alles auswählen
  Showmessage('Zeile ' + IntToStr(ToDoVST.FocusedNode^.Index) + ' angeklickt');

Danke, genau so etwas hatte ich gesucht :)
catweasel
 
Beiträge: 189
Registriert: 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 18.3 - (L 1.6 FPC 3.0.0) | 
Nach oben

Beitragvon theo » 12. Jan 2018, 12:07 Re: VirtualStringTree - welche Zeile markiert?

Übrigens: Mir ist neulich aufgefallen: VTV schafft es in die Standard Installation:
https://svn.freepascal.org/cgi-bin/view ... ot=lazarus
theo
 
Beiträge: 7940
Registriert: 11. Sep 2006, 18:01

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried