AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TScrollBox dynamischer Inhalt

Ein Thema von BigAl · begonnen am 16. Mär 2022 · letzter Beitrag vom 17. Mär 2022
Antwort Antwort
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#1

TScrollBox dynamischer Inhalt

  Alt 16. Mär 2022, 11:59
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
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.472 Beiträge
 
Delphi 12 Athens
 
#2

AW: TScrollBox dynamischer Inhalt

  Alt 16. Mär 2022, 12:29
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#3

AW: TScrollBox dynamischer Inhalt

  Alt 16. Mär 2022, 12:32
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!
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)

Geändert von BigAl (16. Mär 2022 um 12:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.472 Beiträge
 
Delphi 12 Athens
 
#4

AW: TScrollBox dynamischer Inhalt

  Alt 16. Mär 2022, 12:52
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#5

AW: TScrollBox dynamischer Inhalt

  Alt 17. Mär 2022, 12:25
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
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.472 Beiträge
 
Delphi 12 Athens
 
#6

AW: TScrollBox dynamischer Inhalt

  Alt 17. Mär 2022, 14:19
Du könntest es mal mit einem LockDrawing/UnlockDrawing bei dem Frame versuchen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:24 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