Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Seitenverhältnisse von Formularen beim Resize belassen (https://www.delphipraxis.net/103386-seitenverhaeltnisse-von-formularen-beim-resize-belassen.html)

ThoPos 15. Nov 2007 06:37


Seitenverhältnisse von Formularen beim Resize belassen
 
Hallo,

ich möchte ein vermutlich triviales Problem lösen - finde aber keinen Lösungsansatz.

Ich habe eine Form, in der ich JPG-Bilder formatfüllend anzeige. In zwei Integer-Variablen habe ich das Seitenverhältnis der Image-Komponente vorgegeben, z.B. 4:3 (Width:Height).
Jetzt möchte ich, daß wenn ich die Größe dieser Form durch ziehen mit der Maus verändere, daß
1. das Seitenverhältnis der Form immer gemäß der beiden Integervariablen anpaßt.
2. das Bild sich erst nach Beendigung der Größenveränderung neu aufbaut.

Kann mir jemand einen Lösungsansatz aufzeigen?

Gruß aus Köln
Thomas

mkinzler 15. Nov 2007 06:49

Re: Seitenverhältnisse von Formularen beim Resize belassen
 
Reagiere doch auf Größenänderungen und passe dann die Größe an

SirThornberry 15. Nov 2007 07:13

Re: Seitenverhältnisse von Formularen beim Resize belassen
 
schau mal hier:
Größenverhältnis der Form bei Größenänderung beibehalten

bitsetter 15. Nov 2007 07:37

Re: Seitenverhältnisse von Formularen beim Resize belassen
 
Zitat:

Zitat von ThoPos
2. das Bild sich erst nach Beendigung der Größenveränderung neu aufbaut.

Hi,

dafür eignet sich dann aber besser das Ereignis onResize des Formulars.

ThoPos 15. Nov 2007 18:26

Re: Seitenverhältnisse von Formularen beim Resize belassen
 
@SirThornberry:
Vielen Dank für den Tipp. Funktioniert prima.
... verstehe nur nicht, warum ich dieses Artikel nicht gefunden habe. Vermutlich: PEBKAC :oops:
Edit: Hast Du auch 'ne Lösung für Deine offene Frage: Änderung über einen Eckpunkt des Rahmen?

@bitsetter:
Mit dem Event OnResize bin ich bereits am experimentieren. Nur muß ich beim Beginn des Resize das automatische Aktualisieren des Bildes abschalten und am Ende wieder einschalten. Aber wie? Denn die Routine wird ja bei der Größenänderung permanent aufgerufen. Und woran erkenne ich "Beginn" und "Ende" des Resize-Vorgang?

Gruß aus Köln
Thomas

bitsetter 15. Nov 2007 19:16

Re: Seitenverhältnisse von Formularen beim Resize belassen
 
Zitat:

Zitat von ThoPos
Mit dem Event OnResize bin ich bereits am experimentieren. Nur muß ich beim Beginn des Resize das automatische Aktualisieren des Bildes abschalten und am Ende wieder einschalten. Aber wie? Denn die Routine wird ja bei der Größenänderung permanent aufgerufen. Und woran erkenne ich "Beginn" und "Ende" des Resize-Vorgang?

[oh]Mit Hilfe einer Ereignisbehandlungsroutine für OnResize können Sie nach dem Ändern der Größe eines Steuerelements abschließende Anpassungen vornehmen.[/oh]

onResize wird also nach dem Ändern ausgelöst.

Dunkel 15. Nov 2007 19:31

Re: Seitenverhältnisse von Formularen beim Resize belassen
 
[quote="bitsetter"]
Zitat:

Zitat von ThoPos
[oh]Mit Hilfe einer Ereignisbehandlungsroutine für OnResize können Sie nach dem Ändern der Größe eines Steuerelements abschließende Anpassungen vornehmen.[/oh]

onResize wird also nach dem Ändern ausgelöst.

Jein, OnResize wird auch während der Größenänderung aufgerufen, wenn man das Fenster mit der Mouse vergrößert/verkleinert und länger als n Millisekunden verharrt.

btw. hätte ich ebenfalls Interesse an OnBeginResize und OnEndResize-Callbacks, welche wirklich erst nach dem kompletten Resize-Vorgang (EndResize: Mousetatste wird losgelassen) gefeuert werden.

ThoPos 15. Nov 2007 19:38

Re: Seitenverhältnisse von Formularen beim Resize belassen
 
Hallo BitSetter,

leider kennt meine Form2 diesen Satz aus der Hilfe nicht oder hält sich zumindestens nicht daran:

Ich habe folgende Procedue in meiner Form2, welche nur zwei Objekte enthält,
ein TPanel und darin ein TImage, beide Align := alClient:

Delphi-Quellcode:
procedure TForm2.FormResize(Sender: TObject);
begin
  Form1.EditWidth.Text := IntToStr(Image.Width);
  Form1.EditHeight.Text := IntToStr(Image.Height);
end;
Während der gesamten Größenänderung werden meine beiden Textfelder in der Form1 permanent aktualisiert und nicht erst am Ende (also wenn ich die Maus nicht mehr bewege bzw. die Maustaste loslasse). Daraus schließe ich, daß die Routine OnResize nicht erst am Ende des Resize aufgerufen wird.

Edit: Dunkel scheint meine Erkenntnis zu bestätigen, oder?

Gruß aus Köln
Thomas

taaktaak 15. Nov 2007 19:42

Re: Seitenverhältnisse von Formularen beim Resize belassen
 
Moin, Moin Zusammen!
Wenn ich das richtig verstehe, dann wäre für euch doch die Message WM_ExitSizeMove die Richtige - oder? Zitat : "The WM_EXITSIZEMOVE message is sent once to a window after it has exited the moving or sizing mode."
Und dann gibt es noch , Zitat : "The WM_ENTERSIZEMOVE message is sent once to a window when it enters the moving or sizing mode."
Gruß Ralph

ThoPos 15. Nov 2007 20:18

Re: Seitenverhältnisse von Formularen beim Resize belassen
 
Hi Ralph,

super :hello:

Zitat:

Zitat von taaktaak
Moin, Moin Zusammen!
Wenn ich das richtig verstehe, dann wäre für euch doch die Message WM_ExitSizeMove die Richtige - oder? Zitat : "The WM_EXITSIZEMOVE message is sent once to a window after it has exited the moving or sizing mode."
Und dann gibt es noch , Zitat : "The WM_ENTERSIZEMOVE message is sent once to a window when it enters the moving or sizing mode."
Gruß Ralph

Die beiden Messages WM_ENTERSIZEMOVE und WM_ExitSizeMove sind genau das, was ich suchte. Wenn ich jetzt noch den optisch elegantesten Weg finde, das permanente Neuzeichnen des Bildes zu verhindern, wären alle Probleme diesbezüglich beseitigt.

Dank aus Köln
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 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