![]() |
Seltsames Problem mit VIrtualStringTree
Hallo,
ich habe hier ein seltsames Problem: Daten werden aus einer DB gelesen, in Objekte verpackt und dann über den VirtualStringTree dargestellt. Wichtiger Bestandteil ist dabei ein längerer Text, der über MultiLine dargestellt wird. Nach dem Laden wird automatisch auf den letzten Eintrag gesprungen. Bei einem Anwender tritt jetzt folgendes auf: Gibt es mehrere (viele) Einträge (Datensätze), dann wird der letzte Knoten nicht wie üblich am unteren Rand angezeigt, sondern klebt ganz oben. Darunter kommt dann ein großer weißer Bereich. Die vertikale Scrollbar ist dabei nicht am Ende ganz unten, sondern irgend wo bei 2/3 - sprich VST geht davon aus, dass nach dem letzten Eintrag noch was kommt (und daher klebt der Eintrag ganz oben. Es werden keine Knoten ausgeblendet (vsVisible). Eingesetzt wird Version 5.5 mit Delphi 7 Kennt jemand das Verhalten von VST? |
AW: Seltsames Problem mit VIrtualStringTree
Das Verhalten kenne ich nicht, aber beim Lesen kommt mir der Gedanke, daß die Höhenberechnung vom VST für das lange Multiline nicht richtig funktioniert. IIRC gibt es ein Event, bei dem man die Dimensionen selbst bestimmen kann. Für diese -eigene- Höhenberechnung würde ich dann DrawText mit DT_CALCRECT verwenden.
|
AW: Seltsames Problem mit VIrtualStringTree
Das klingt für mich so als würde da mit OwnerDraw gearbeitet, mit GetNodeAt(X,Y) ein Node über eine Koordinate geholt und beim letzten Node der Zeiger auf NIL lauten. Dann wirft GetDisplayRect 0,0 als Topleft-Koordinate aus und der Node pappt am oberen Rand. Daher vermute ich ein simples Koordinatenproblem in einer der OnPaintXyz-Ereignisse. Ohne Einblick in den Source aber schwer zu beurteilen.
Da sich das Problem mit zunehmender Zahl der Nodes zu verstärken scheint, würde ich mal überprüfen ob IMMER mit der korrekten Höhe des NodeRect gearbeitet wird und nicht zufällig zwischendurch mit einem Pixel weniger Höhe gearbeitet wird. Das würde am Ende die große freie Fläche erklären. |
AW: Seltsames Problem mit VIrtualStringTree
Werden beim Laden der Nodes zufälligerweise manche irrelevanten Nodes wieder ausgeblendet? Wie beim einem Filter z.B.? Je nachdem wie das gemacht wird, ergibt das genau dieses Verhalten. Hatte das Problem auch schonmal und mir das deshalb gemerkt. Nur um dir richtig weiterhelfen zu können, müsstest du uns evtl. auch noch den SourceCode anhängen. Zumindest die relevanten Abschnitte (Laden der Daten in den VST, mögliche Stellen an denen die Nodes wieder bearbeitet/visible geschaltet werden, usw.).
|
AW: Seltsames Problem mit VIrtualStringTree
Zitat:
Aber ich hatte gestern auch schon mal die Idee, einfach die Multiline weg zu lassen und schauen ob das eine Auswirkung hat... Zitat:
OnBeforeCellPaint: Zeilen unterschiedlich einfärben OnChange: Knoten auswählen OnCompareNodes: Sortieren OnGetTExt: Darstellung OnMeasureItem: Knotenhöhe berechnen Mehr passiert nicht... Zitat:
|
AW: Seltsames Problem mit VIrtualStringTree
Zitat:
|
AW: Seltsames Problem mit VIrtualStringTree
Zitat:
Aber nichts desto trotz sollte man den Nodes nicht einfach den Status vsVisible wegnehmen, sondern die Node über die VST-Methode
Delphi-Quellcode:
entsprechend (un)sichtbar schalten. Erst dann wird nämlich die Scrollbar richtig berechnet. Das nur als Tipp am Rande. :stupid:
IsVisible
|
AW: Seltsames Problem mit VIrtualStringTree
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 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