Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Virtualtreeview Node.index und Scrollbarproblem (https://www.delphipraxis.net/92399-virtualtreeview-node-index-und-scrollbarproblem.html)

naridian 19. Mai 2007 01:12


Virtualtreeview Node.index und Scrollbarproblem
 
Sorry für den zweiten Virtualstringtree Thread von mir innerhalb von 2 Tagen ;)

Ich möchte wenn ein Node angeklickt wird irgendwas machen und dazu wissen welcher Node selected ist. Also habe ich

procedure TMainform.VSTChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
begin
aktiverKnoten := Node.Index;
end;

verwendet. Beim ersten mal Anklicken eines beliebigen Knotens bekomme ich den korrekten Index so wie es gedacht ist. Beim Anklicken eines anderen Knotens danach kommt eine Zugriffsverletzung an genau dieser Stelle. Wenn ich es mir mit dem Debugger anschaue haben dann alle Eigenschaften von Node "Wert nicht verfügbar". Was mach ich da falsch? Multiselect ist aus. Wenn ich den Index nicht abfrage kann ich natürlich rumklicken wie ich will ohne Fehler.

Und noch ne Kleinigkeit: Ich mache mit OnMeasureItem verschiedene Knotenhöhen. Das klappt auch wunderbar, nur der horizontale Scrollbar ist nicht lang genug. Ich kann also nicht zu den unteren Items scrollen. Wenn ich ganz nach unten scrolle macht er den Scrollbar auf einmal ein bisschen länger so dass ich mich nach und nach bis nach unten vorarbeiten kann. Die Knoten sind also alle da, er berechnet nur die Scrollbarlänge nicht richtig. Muss ich das selber machen? Wenn ja was ist die richtige Eigenschaft?

Vielen Dank!

Moritz

Sharky 19. Mai 2007 07:00

Re: Virtualtreeview Node.index und Scrollbarproblem
 
Hai naridian,

verwende doch das Ereigniss OnFocusChanged. Dort wird Dir der Node übergeben der selektiert ist.

Hawkeye219 19. Mai 2007 09:20

Re: Virtualtreeview Node.index und Scrollbarproblem
 
Hallo Moritz,

das Ereignis OnChange des VST wird auch ausgelöst, wenn ein Knoten den Fokus verliert; in diesem Fall hat der Übergabeparameter Node den Wert NIL. Bei einem Fokuswechsel erfolgen somit zwei Aufrufe: der erste mit Node=NIL, der zweite mit Node=neuer Knoten.

Wenn du den fokussierten Knoten des VST auslesen möchtest, so geht das über VST.FocusedNode. Den ersten selektierten Knoten erhältst du über VST.GetFirstSelected, die Anzahl selektierter Knoten über VST.SelectedCount.

Voraussetzung für die korrekte Berechnung der Scrollbar-Höhe ist das Setzen von toVariableNodeHeight in VST.TreeOptions.MiscOptions. Aber auch dann wird das Ereignis OnMeasureItem nur für die sichtbaren Knoten ausgelöst. Abhilfe schafft der Aufruf

Delphi-Quellcode:
VST.InvalidateChildren (nil, True)
z.B. in der Behandlungsroutine für das Ereignis OnShow des Formulars.

Gruß Hawkeye

naridian 19. Mai 2007 14:31

Re: Virtualtreeview Node.index und Scrollbarproblem
 
danke ihr seid echt genial!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz