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/)
-   -   TScrollBox dynamischer Inhalt (https://www.delphipraxis.net/210198-tscrollbox-dynamischer-inhalt.html)

BigAl 16. Mär 2022 10:59

TScrollBox dynamischer Inhalt
 
Hallo zusammen

Ich habe eine ScrollBox in der ich dynamisch Frames anzeige. Nun möchte ich folgendes erreichen:

- Der Frame soll im Normalfall die gesamte ScrollBox ausfüllen (Align = alClient).
- Der Frame hat eine Mindestgröße die ich vorgeben möchte, damit diese nie kleiner werden kann.
- Wird die ScrollBox kleiner als die Mindestgröße des Frames soll gescrollt werden (ScrollBars erscheinen).

Das Verhalten entspricht in etwa dem des Option-Dialogs der IDE. Ist der Dialog zu klein um alle Elemente anzuzeigen, dann werden ScrollBars eingeblendet. Ansonsten wird der Client-Bereich (mehr oder weniger) ausgefüllt.

Wenn ich die Mindestgröße des Frames mit Constraints limitiere, dann werden keine ScrollBars angezeigt, sondern die ScrollBox ebenfalls in ihrer Mindestgröße limitiert.

Also:

Wie erreiche ich, dass der Frame größendynamisch ist aber seine Mindestgröße limitiert ist (Align = alClient bzw. alTop) und das die ScrollBox in der der Frame angezeigt wird trotzdem kleiner als die Mindestgröße des Frames werden kann. In dem Fall sollen dann natürlich ScrollBars angezeigt werden.

Ich hoffe ich konnte das Ganze einigermaßen verständlich beschreiben.

Schonmal Danke für Eure Antworten.

Alex

Uwe Raabe 16. Mär 2022 11:29

AW: TScrollBox dynamischer Inhalt
 
Setze bei dem Frame das Align auf alNone. Dann fügst du folgenden Code im OnResize Event der ScrollBox ein:
Delphi-Quellcode:
var
  H: Integer;
  W: Integer;
begin
  W := Max(MyFrame.Constraints.MinWidth, MyScrollBox.ClientWidth);
  H := Max(MyFrame.Constraints.MinHeight, MyScrollBox.ClientHeight);
  MyFrame.SetBounds(0, 0, W, H);
end;

BigAl 16. Mär 2022 11:32

AW: TScrollBox dynamischer Inhalt
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1503420)
Setze bei dem Frame das Align auf alNone. Dann fügst du folgenden Code im OnResize Event der ScrollBox ein:
Delphi-Quellcode:
var
  H: Integer;
  W: Integer;
begin
  W := Max(MyFrame.Constraints.MinWidth, MyScrollBox.ClientWidth);
  H := Max(MyFrame.Constraints.MinHeight, MyScrollBox.ClientHeight);
  MyFrame.SetBounds(0, 0, W, H);
end;

Klingt logisch :-). So ähnlich mache ich das schon in einer anderen Applikation. Da hatte ich jetzt nicht mehr dran gedacht.

Aber: Ich darf im Frame nicht die Constraints verwenden, da diese mir ja wieder die ScrollBox in ihrer Mindestgröße limitieren...
Update: Ne, geht trotzdem :-)

Vielen Dank Uwe!

Uwe Raabe 16. Mär 2022 11:52

AW: TScrollBox dynamischer Inhalt
 
Zitat:

Zitat von BigAl (Beitrag 1503421)
Aber: Ich darf im Frame nicht die Constraints verwenden, da diese mir ja wieder die ScrollBox in ihrer Mindestgröße limitieren...
Update: Ne, geht trotzdem :-)

Deswegen muss das Align ja auch auf alNone stehen.

BigAl 17. Mär 2022 11:25

AW: TScrollBox dynamischer Inhalt
 
Hallo Uwe,

hast Du auch noch eine Idee wie man das "flackern" der ScrollBars wegbekommt? Das Problem ist das beim Verkleinern der eingebettete Frame erstmal zu groß ist, daher werden ScrollBars aktiviert. Sobald der Frame dann angepasst wurde sind die zwar wieder weg, aber der Frame wird einmal mit dem minimierten Bereich (Client area - ScrollBar size) berechnet. Somit stimmt die Größe der dynamischen controls im Frame nicht...

Ich habe schon versucht im "OnCanResize" das AutoScroll abzuschalten oder die ScrollBars.Visible auf False zu setzen und dann nach der Größenanpassung im "OnResize" wieder zu aktivieren. Das haut aber alles nicht hin.

Alex

Uwe Raabe 17. Mär 2022 13:19

AW: TScrollBox dynamischer Inhalt
 
Du könntest es mal mit einem LockDrawing/UnlockDrawing bei dem Frame versuchen.


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