![]() |
Fenstergröße anpassen?
Hallo liebe Community,
ich habe ein Problem beim Anpassen der Fenstergröße. Die Idee wäre, dass die Breite des Fensters immer 1.3x grösser ist als die Höhe. Das heißt, dass wenn man nur eine Seite des Fensters vergrößert, wird die andere automatisch angepasst. Ich habe dies mit der "procedure TForm1.OnCanResize" gemacht. Es hat leider nicht so funktioniert, wie ich es wollte. Mir ist aber nicht bekannt, wo der Fehler liegt.
Code:
Das Verhältnis wird nur zum Teil ausgeführt und es besteht ein Flackern beim Versuch das Fenster zu vergrößern. Zusätzlich besteht noch das Problem, dass die Größe nur ab und zu angepasst wird.
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean); begin if (NewHeight <> Form1.Height) then NewWidth := Round(NewHeight*1.3) else NewHeight := Round(NewWidth/1.3); end; Wäre sehr nett von euch, wenn mir jemand dabei helfen könnte, das Programm funktionsfähig zu machen. |
AW: Fenstergröße anpassen?
Bei OnCanResize kann man angeben, ob sich die Größe des Fensters weiter ändern darf.
Resize := true bzw. Resize := False; Wenn etwas direkt bei der Größenänderung abgearbeitet werden soll, muß man OnResize verwenden. |
AW: Fenstergröße anpassen?
Herzlich willkommen erst mal. :-)
Ein Problem ist wohl auch, dass die Maus ja an der ursprünglichen Stelle bleibt und die Formulargröße sich dann wieder an der Mausposition ausrichten wird. Es kann auch sein, dass die Größenänderung in FormCanResize wieder diese Ereignisbehandlung aufruft - also ein wiederholter Kreislauf entsteht. Das müsste man ggf. mal z.B. mit OutputDebugString loggen. Evtl. könnte man auch einen Timer starten, der die Größenanpassung etwa 1 Sekunde nach der letzten Mausschubserei durchführt. Dann könnte man die Größe nach Wunsch einstellen und kurz danach wird das Seitenverhältnis korrigiert. So eine unübliche Verfahrensweise kann aber auch dazu führen, dass die Nutzer dieses eher ablehnen. |
AW: Fenstergröße anpassen?
Hallo Lebermatt,
neben dem Hinweis das im OnResize zu erledigen, musst Du den berechneten Wert auch noch der Breite (Form.Width) zuweisen.
Delphi-Quellcode:
Form.Width := ROUND(Form.Height * 1.3);
Außerdem kannst Du die Form, z. B. mit der Maus, dann nur noch in der Höhe ändern. Wenn Du die Breite mit der Maus ziehst, schlägt OnResize wieder zu und passt die Breite wieder auf das vorgegebene Verhältnis an. Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 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-2025 by Thomas Breitkreuz