AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsames Problem mit VIrtualStringTree

Ein Thema von Lemmy · begonnen am 21. Jul 2016 · letzter Beitrag vom 21. Jul 2016
Antwort Antwort
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#1

Seltsames Problem mit VIrtualStringTree

  Alt 21. Jul 2016, 07:12
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?
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Seltsames Problem mit VIrtualStringTree

  Alt 21. Jul 2016, 08:28
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.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Seltsames Problem mit VIrtualStringTree

  Alt 21. Jul 2016, 09:06
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.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (21. Jul 2016 um 09:17 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Seltsames Problem mit VIrtualStringTree

  Alt 21. Jul 2016, 09:40
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.).
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Seltsames Problem mit VIrtualStringTree

  Alt 21. Jul 2016, 10:24
daß die Höhenberechnung vom VST für das lange Multiline nicht richtig funktioniert.
hm... warum funktioniert das dann bei tausenden anderen Anwendern? Die teilweise noch längere Texte haben... .


Aber ich hatte gestern auch schon mal die Idee, einfach die Multiline weg zu lassen und schauen ob das eine Auswirkung hat...

Das klingt für mich so als würde da mit OwnerDraw gearbeitet, mit GetNodeAt(X,Y) ein Node über eine Koordinate geholt ...
Nope...
OnBeforeCellPaint: Zeilen unterschiedlich einfärben
OnChange: Knoten auswählen
OnCompareNodes: Sortieren
OnGetTExt: Darstellung
OnMeasureItem: Knotenhöhe berechnen

Mehr passiert nicht...


Werden beim Laden der Nodes zufälligerweise manche irrelevanten Nodes wieder ausgeblendet? Wie beim einem Filter z.B.?
war gestern auch meine erste Vermutung, das habe ich an einer anderen Stelle im Programm mal gemacht, aber nicht bei dem Baum, der wird bei einer Filteränderung (da gibt es nicht viele) neu geladen bzw. die Knoten neu aus der Objektliste (die die Daten vorhält) neu aufgebaut und nur die relevanten Knoten erzeugt. Sehe gerade dass ich das oben schon erwähnt habe (Es werden keine Knoten ausgeblendet (vsVisible))
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Seltsames Problem mit VIrtualStringTree

  Alt 21. Jul 2016, 11:19
daß die Höhenberechnung vom VST für das lange Multiline nicht richtig funktioniert.
hm... warum funktioniert das dann bei tausenden anderen Anwendern? Die teilweise noch längere Texte haben... .
Gibt es gemeine Sonderzeichen in dem Text, die die Darstellung verwirren?
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Seltsames Problem mit VIrtualStringTree

  Alt 21. Jul 2016, 11:22
Sehe gerade dass ich das oben schon erwähnt habe (Es werden keine Knoten ausgeblendet (vsVisible))
Sorry. Habe ich dann wohl überlesen.

Aber nichts desto trotz sollte man den Nodes nicht einfach den Status vsVisible wegnehmen, sondern die Node über die VST-Methode IsVisible entsprechend (un)sichtbar schalten. Erst dann wird nämlich die Scrollbar richtig berechnet. Das nur als Tipp am Rande.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Seltsames Problem mit VIrtualStringTree

  Alt 21. Jul 2016, 11:33
Gibt es gemeine Sonderzeichen in dem Text, die die Darstellung verwirren?
bin ich noch am klären.. Ich befürchte ich muss mir die DB mal vom Kunden holen...

Aber nichts desto trotz sollte man den Nodes nicht einfach den Status vsVisible wegnehmen, sondern die Node über die VST-Methode IsVisible entsprechend (un)sichtbar schalten. Erst dann wird nämlich die Scrollbar richtig berechnet. Das nur als Tipp am Rande.
Danke für den Tipp, werde ich gleich an der anderen Stelle umsetzen....
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz