![]() |
TScrollbox erkennt Aktualisierung im Clientbereich nicht
Hallo allesamt!
Ich bin mal wieder am Verzweifeln! Folgende Situation: TForm mit eine TScrollbox oder TLMDScrollbox enthalten. Darin ein TPanel mit einem TPanel, welches wiederum mehrere TPanels enthalten kann (dynamisch geladen). Alle Objekte in abgeleitet von den genannten Klassen. Alle Objekte alTop. Auf gut Deutsch: Ein Bereich (TScrollbox) in dem mehrere Bereiche enthalten sind (z.B. TPanel1; Parent=TScrollbox). Der eine spezielle Bereich enthält eine Komponente (Panel2; Parent=Panel1), welche die restlichen Panels (Panel-n; Parent=Panel2) enthält (vergleichbar einer TListbox; ich brauche jedoch viele Zusatzinformationen zu den einzelnen Einträgen - die wird alles über eine TComponentList geregelt, die Panels werden entsprechend den Datensätzen einer Datenbank geladen). Problem: Nach dem Laden gehen die Einträge über die untere Kante der Scrollbox hinaus. Nun sollte das Scrollen anfangen - tut es aber nicht (TScrollbox = Balken nicht zu sehen, TLMDScrollbox = Balken gibt an, dass die volle Fläche zur Zeit betrachtet wird, aber: beim Klick auf den "Nach Unten" Knopd der TLMDScrollbar kann ich tatsächlich nach unten scrollen!). Nachdem ich -mit der Maus per Hand- das komplette Formular einen Pixel größer gemacht habe funktioniert alles. Ich kann scrollen. * Das Formular hat kein OnResize Event o.ä. * Wenn ich die Komponente auf einem Beispielform platziere, funktioniert es auch... Ergo ein sporadisch auftretender Fehler von dem ich Euch leider in keinster Weise sagen kann, wie man ihn reproduzieren kann. * Kann das jemand logisch erklären? * Kann ich mit einer WinApi wie-auch-immer die Aktion auslösen, die auch durch das Größen-Ändern des Formulars oder das "Nach-Unten-Klicken" auf die TLMDScrollbox ausgelöst wird? Vielen Dank für baldige Antworten! |
Re: TScrollbox erkennt Aktualisierung im Clientbereich nicht
Hallo, vorausgesetzt ich habe dich richtig verstanden, dann sollte das VertScrollBar.Range die für dich in dieser Sache interessante Property sein. Normalerweise wird die schon automatisch eingestellt. Allerdings nicht immer, dann muss man das eigenhändig tun.
|
Re: TScrollbox erkennt Aktualisierung im Clientbereich nicht
Range scheint tatsächlich das Problem zu lösen :)
Nun bleibt nur noch die Frage, ob es nicht doch irgendwie möglich ist, "Range" automatisch neu berechnen zu lassen. Weil ich wollte jetzt nicht immer alle Komponenten per Hand durchzählen um dem "untersten" Punkt zu ermitteln, der dann (abzüglich öhm. Scrollbox.Height (?)) die Range ist... Ich habe momentan ein "Workaround" indem ich unter die betroffene Komponente noch eine mit alTop setze und die in FormActivate mal kurz sichtbar mache, dann wieder unsichtbar. Das klappt auch. Danke für die Tip TStringList! |
Re: TScrollbox erkennt Aktualisierung im Clientbereich nicht
Zitat:
Delphi-Quellcode:
procedure getScrollBoxRange(AScrollBox : TScrollBox);
var I, RangeMin : integer; begin RangeMin := AScrollBox.ClientHeight; with AScrollBox do for I := 0 to ControlCount-1 do if (Controls[I] is TWinControl) then with Controls[I] as TWinControl do if Top + Height > RangeMin then RangeMin := Top + Height; AScrollBox.VertScrollBar.Range := RangeMin +10; // +10 = SpacePuffer end; edit: Schönheitskorrektur im Code |
Re: TScrollbox erkennt Aktualisierung im Clientbereich nicht
Hey cool, das sieht doch seeehr brauchbar aus. Probier ich gleich mal aus. Vielen Dank!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 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 by Thomas Breitkreuz