![]() |
Formgröße proportional ändern
Also Hallo erstmal,
ich habe folgendes Problem: Ich möchte, das wenn ich die Größe einer Form ändere (Borderstyle = bsSizeable) sich Width und Height proportional mitändern. Das heißt konkret, das sich zum bsp. Width und Height im Verhältnis 4:3 ändern. ich möchte also immer das gleiche Format des Forms beibehalten. ich habe es mit diesem code im OnResize Event probiert, doch das geht auch nur wenn man die Formnach unten hin vergrößert bzw. verkleinert, aber auch nicht gut, da die Form hin und her springt.
Delphi-Quellcode:
ich freue mich auf eure antworten und hoffe ihr könnt mir helfen :D
Width := Round((4/3)*Height);
mfg |
Re: Formgröße proportional ändern
Dabei stellt sich die Grundsätzliche Frage: Ist das Sinnvoll?
Die Antwort lautet dann ganz klar: Nein. Wenn ich zum Beispiel einen tollen neuen TFT mein eigen nenne und ich mich über die tolle nicht 4:3 Auflösung freue, dann kommt da dein tolles Programm daher und nimmt mir jeglichen Spass an der neuen Hardware. Ich möchte gern das Fenster einer Anwendung auch maximieren können. Da sind irgendwelche Manipulationen absolut wiederlich. Leider hast du uns ja nicht verraten was du da eigentlich machen willst... Trotzdem mal ein Vorschlag: Lass das Fenster so wie es ist und lasse die Elemente auf deiner Form mitwachsen. Oder wenn es sich z.B. um ein Spielfeld handelt, kannst du dieses automatisch anpassen. Dies geht, wenn du dich dann immer an der kürzesten Länge (Width, Height) orientierst. Ein Beispiel siehe ![]() |
Re: Formgröße proportional ändern
oder anchors, benutzen...
|
Re: Formgröße proportional ändern
Zitat:
|
Re: Formgröße proportional ändern
Moin!
Zitat:
![]() MfG Muetze1 |
Re: Formgröße proportional ändern
Zitat:
|
Re: Formgröße proportional ändern
Danke Muetze1
das Stichwort SetBounds() hat mir geholfen! Hier ein guter Link dazu: ![]() Edit: Also ich habe es jetzt so gemacht:
Delphi-Quellcode:
Das funktionier jedoch nicht. es ist wie vorher.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private public procedure SetBounds(aLeft, aTop, aWidth, aHeight: Integer); override; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.SetBounds(aLeft, aTop, aWidth, aHeight: Integer); begin aWidth := Round((4/3)*aHeight); inherited SetBounds(aLeft, aTop, aWidth, aHeight); end; end. hoffe auf hilfe :) mfg |
Re: Formgröße proportional ändern
Moin!
Mein Fehler. Diese Methode mit der SetBounds() Methode funktioniert nur bei Komponenten. Bei Formularen müsstest du die ![]() /EDIT: Here it is...
Delphi-Quellcode:
MfG
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private-Deklarationen } procedure WMSizing(var Message: TMessage); message WM_SIZING; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.WMSizing(var Message: TMessage); var lRect: PRect; begin lRect := Pointer(Message.lParam); lRect.Right := lRect.Left + round((4/3)*(lRect.Bottom - lRect.Top)); end; end. Muetze1 |
Re: Formgröße proportional ändern
Zitat:
Delphi-Quellcode:
Edit: Ok, nicht ganz einwandfrei, weil es nicht geht, wenn man nur die Breite verändert...
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean); begin NewWidth := Round((4/3)*NewHeight); end; |
Re: Formgröße proportional ändern
Du setzt ja auch nur die Breite...
Delphi-Quellcode:
Probier mal:
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean); begin NewWidth := Round((4/3)*NewHeight); end;
Delphi-Quellcode:
Ist nicht getestet, aber wäre logisch ...
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean); begin if NewWidth <> Self.Width then NewHeight := Round((3/4)*NewWidth) else if NewHeight <> Self.Height then NewWidth := Round((4/3)*NewHeight); end; Edit: Habs gestestet und das geht, hab noch nen Zahlendreher in der Berechnung gehabt, also beachten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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