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/)
-   -   Message o.Ä. wenn Scrollbar(s) eingeblendet werden (https://www.delphipraxis.net/167816-message-o-ae-wenn-scrollbar-s-eingeblendet-werden.html)

Codehunter 20. Apr 2012 07:31

Message o.Ä. wenn Scrollbar(s) eingeblendet werden
 
Gibt es eine Möglichkeit festzustellen, wenn bei einem TWinControl die Scrollbars eingeblendet werden? Konkret habe ich den Fall eines Abkömmlings von TScrollbox, welcher diverse Controls erstellt und auf seine ClientArea packt. Das Layout ordnet sich automatisch entsprechend der Dimensionen der ClientArea. Wenn es nun mehr Controls gibt als die ClientArea fassen kann, erscheinen automatisch die Scrollbars. Da aber keine WM_SIZE bzw. WM_SIZING Message kommt (das übergeordnete Control wird ja nicht in seiner Bounds-Größe geändert), bekomme ich das Einblenden der Scrollbars nicht mit. Ich finde aber auch keine betreffende andere Message. Vielleicht habe ich aber auch was übersehen?

himitsu 20. Apr 2012 09:19

AW: Message o.Ä. wenn Scrollbar(s) eingeblendet werden
 
Zum direkten Auslesen fällt mir grade nix ein, aber du kannst es einfach prüfen.

Wenn AutoScroll aktiv ist und eventuell noch nicht gescrollt wurde. (Letzeres, wenn zwar alles draufgepaßt hätte, es aber anfangs ungünstig positioniert war ... eventuell vorher auch einfach auf 0:0 scrollen)


ScrollBox1.ClientRect auslesen und dann für alle Childs nachsehn, ob bei Einem Child.BoundsRect teilweise/ganz außerhalb des sichtbaren Bereichs liegt.

Bummi 20. Apr 2012 09:35

AW: Message o.Ä. wenn Scrollbar(s) eingeblendet werden
 
wenn Du Dich in WM_SIZE hängst wirst Du zwar etwas öfter aufgerufen als nötig, aber mit einer zusätzlichen Prüfung hier könntest Du weiterkommen

Delphi-Quellcode:
type
  TScrollBox=Class(Forms.TScrollBox)
        procedure WMSize(var Message: TWMSize); message WM_SIZE;
  End;
  TForm2 = class(TForm)
...

procedure TScrollBox.WMSize(var Message: TWMSize);
begin
   inherited;
   Showmessage('Size');
end;

himitsu 20. Apr 2012 09:37

AW: Message o.Ä. wenn Scrollbar(s) eingeblendet werden
 
Reicht dir OnResize nicht aus? :angle2:

Ber Änderung des Inhalts (die enthaltenen Komponenten und deren Position) wird man so aber nicht informiert.

Bummi 20. Apr 2012 09:40

AW: Message o.Ä. wenn Scrollbar(s) eingeblendet werden
 
@himitsu
meinst Du mich?
Wenn er eine Komponente erstellt hat wird er sich vorzugsweise nicht in OnResize hängen, da diesen im OI oder zu Laufzeit geändert werden kann, über die Message kann er Logik implementieren die hiervon unabhängig bleibt.

himitsu 20. Apr 2012 10:29

AW: Message o.Ä. wenn Scrollbar(s) eingeblendet werden
 
:oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 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