Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fenstergröße anpassen? (https://www.delphipraxis.net/192299-fenstergroesse-anpassen.html)

Lerbermatt 6. Apr 2017 15:01

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:
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;
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.
Wäre sehr nett von euch, wenn mir jemand dabei helfen könnte, das Programm funktionsfähig zu machen.

nahpets 6. Apr 2017 15:07

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.

stahli 6. Apr 2017 15:15

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.

rokli 6. Apr 2017 15:23

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 05:23 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