![]() |
Delphi-Version: 5
Formularinhalte bei OnResize neu skalieren
Guten Morgen,
mir ist zwar bekannt, wie ich bei FormCreate ein Fenster auf die Bildschirmgröße anpassen und den Inhalt skalieren kann, aber ich bastel nun schon eine Zeit lang an einer Lösung, wie ich bei onResize den Formularinhalt neu skalieren kann, komme aber auf keine brauchbare Lösung. Zudem erzeugt ScaleBy bei OnResize einen "Flackereffekt", der negativ auffällt. Geht das auch anders? Hat jemand eine Lösung oder einen Lösungsansatz? |
AW: Formularinhalte bei OnResize neu skalieren
Lade hier ein kleines Beispielprojekt hoch, um dein Problem zu verdeutlichen!
In der Regel (!) muss man sehr selten visuelle Komponenten über das OnResize-Event des Formulars neu ausrichten und in der Größe anpassen. Oft sind viele Probleme mit den Propertys Anchors, Constraints und Align der jeweiligen Komponente gut zu lösen. |
AW: Formularinhalte bei OnResize neu skalieren
Danke dir. Wo finde ich dein kleines Beispielprojekt?
|
AW: Formularinhalte bei OnResize neu skalieren
Du solltest ein Beispielprojekt hochladen um zu verdeutlichen was dein Problem ist ;-)
Bitte nicht krumm nehmen, aber eine ganz dumme Frage: Layout-Helfer wie TGridPanel und Eigenschaften wie Align (die jedes Control hat) kennst du aber, oder? Weil ich kann mir eigentlich nur wenige Fälle vorstellen, wo einem das Resize des Formulars sonst überhaupt kümmern würde... |
AW: Formularinhalte bei OnResize neu skalieren
Ja, das Panel und die Eigenschaft Align kenne ich. Nur nützt mir das nichts, weil durch das Nutzen dieser Eigenschaften die Größe der Komponenten nicht bei einer Größenänderung der Form geändert werden. Aber genau das möchte ich erreichen.
Viel beinhaltet mein Beispielprojekt noch nicht. Das ist ein Formular mit ein paar Buttons und einer Procedure bei OnCreate, die man häufig im Netz findet:
Code:
Den nicht funktionierenden Code bei OnResize habe ich immer wieder verwurfen. War ja eh fehlerhaft.
procedure TF_Form1.FormCreate(Sender: TObject);
var x, y : Integer; begin x := Screen.Width; y := Screen.Height; if (x <> breite) or (y <> hoehe)then begin F_Form1.width := (F_Form1.ClientWidth * x DIV breite) + F_Form1.Width - F_Form1.ClientWidth; F_Form1.height := (F_Form1.ClientHeight * y DIV hoehe) + F_Form1.Height - F_Form1.Clientheight; Scaleby(x, breite); end; end; |
AW: Formularinhalte bei OnResize neu skalieren
Ich stelle mich da beim Verstehen immer dumm an. Deswegen das Beispielprojekt- Was ist das konkrete Problem: Das ein Memo, ein ListView sich mit in der Größe ändern soll?
Ich habe immer alles in Gridpaneln und 90% meiner Komponenten sind immer alClient- Skalieren also in ihrem Bereich (das Gridpanel-Feld) mit. Und das Gridpanel sorgt immer dafür dass die Felder immer relative oder absolute Größen haben. |
AW: Formularinhalte bei OnResize neu skalieren
Ja, die Form soll später mal eine ListView, ein paar Buttons und ein PageControl bekommen. Diese Komponenten, sollten wenn möglich bei Größenänderung der Form auch ihre Größe ändern, inklusive der Schrift.
Mit der Procedure des FormCreate klappt das zumindest beim Anpassen an die Bildschirmgröße, abgesehen von der Breite der Tabsheets und der Breite der Spalten der ListView. Diese müßte man dann wieder manuell anpassen. |
AW: Formularinhalte bei OnResize neu skalieren
Liste der Anhänge anzeigen (Anzahl: 2)
Nimm doch die Komponente EASYSIZE (Torry.net):
![]() |
AW: Formularinhalte bei OnResize neu skalieren
EasySize funktioniert leider nur teilweise. Das Pagecontrol z.B. wird nicht skaliert und eine ListView leider auch nicht. Allerdings wurde das EasySize, so wie es aussieht, auch nur bis Delphi 3 getestet. Die Version, die man laden kann, ist von 1999.
|
AW: Formularinhalte bei OnResize neu skalieren
Funktioniert mit XE2 und WINDOWS 8.
Wahrscheinlich hast Du nicht die ReadMe gelesen! Setze alles auf ein Panel.
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin FormResizer1.InitializeForm; FormResizer1.EnforceMinSize:= true; FormResizer1.ResizeFonts:= true; Panel1.align:= alClient; end; procedure TForm2.FormResize(Sender: TObject); begin FormResizer1.ResizeAll; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 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