AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TScrollbox erkennt Aktualisierung im Clientbereich nicht
Thema durchsuchen
Ansicht
Themen-Optionen

TScrollbox erkennt Aktualisierung im Clientbereich nicht

Ein Thema von berens · begonnen am 17. Okt 2006 · letzter Beitrag vom 18. Okt 2006
Antwort Antwort
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#1

TScrollbox erkennt Aktualisierung im Clientbereich nicht

  Alt 17. Okt 2006, 02:08
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!
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TScrollbox erkennt Aktualisierung im Clientbereich nicht

  Alt 17. Okt 2006, 23:10
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.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#3

Re: TScrollbox erkennt Aktualisierung im Clientbereich nicht

  Alt 17. Okt 2006, 23:51
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!
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TScrollbox erkennt Aktualisierung im Clientbereich nicht

  Alt 18. Okt 2006, 07:36
Zitat von berens:
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...
...in einer jeden solchen Situation wäre dann aber immer wieder nur ein Aufruf von z.B. folgender Procedure nötig:

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
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#5

Re: TScrollbox erkennt Aktualisierung im Clientbereich nicht

  Alt 18. Okt 2006, 08:27
Hey cool, das sieht doch seeehr brauchbar aus. Probier ich gleich mal aus. Vielen Dank!
  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 08:47 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