VirtualStringTree - welche Zeile markiert?

Rund um die LCL und andere Komponenten
Antworten
catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

VirtualStringTree - welche Zeile markiert?

Beitrag von catweasel »

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

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: VirtualStringTree - welche Zeile markiert?

Beitrag von wp_xyz »

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.

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: VirtualStringTree - welche Zeile markiert?

Beitrag von catweasel »

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 :)

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: VirtualStringTree - welche Zeile markiert?

Beitrag von theo »

Übrigens: Mir ist neulich aufgefallen: VTV schafft es in die Standard Installation:
https://svn.freepascal.org/cgi-bin/view ... ot=lazarus

Antworten