Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Quadratisches Fenster auch während Resize (https://www.delphipraxis.net/136090-quadratisches-fenster-auch-waehrend-resize.html)

DevilsCamp 23. Jun 2009 11:14


Quadratisches Fenster auch während Resize
 
Servus.

Ich versuche gerade ein kleines Formular zu bauen, dessen Form ich immer quadratisch halten möchte (Inhalt ist eine analoge Uhr).
Über diesen Beitrag bin ich auch WM_SIZING gestoßen. Doch leider scheint Freepascal/Lazarus WM_SIZING nicht an das Formular weiter zu reichen (WM_SIZE wird empfangen).

Ich habe folgende Methoden getestet:
  • Überschreiben der WndProc-Methode
  • Abfangen vom WM_SIZING mit Hilfe von: procedure WMSizing(var Msg: TMessage); message WM_SIZING;
  • Bearbeiten von OnResize zum setzen des Seitenverhältnisses. Dabei entsteht ein komisches Flackern und die neue Größe wird nicht immer angenommen (zurücksetzen auf alte Größe).

Die ersten beiden Methoden waren ohne Erfolg.

Quellcode für Methode 3:
Delphi-Quellcode:
procedure TForm1.FormResize(Sender: TObject);
begin
  OnResize := nil;

  if (Width <> CurWidth) then
  begin
    CurWidth := Width;
    CurHeight := Width;
    Height := Width;
  end // if (Width <> CurWidth)
  else
  if (Height <> CurHeight) then
  begin
    CurWidth := Height;
    CurHeight := Height;
    Width := Height;
  end; // if (Height <> CurHeight)

  OnResize := @FormResize;
end;
Wie schon gesagt, hier entsteht ein Flackern, das wie folgt zu beschreiben ist:
Die Anzeige der neuen Größe ist erst die neue Größe (quadratisch). Wenn ich nun einen Pixel weitergehe mit der Maus, dann springt die Größe des Fensters auf die alte Größe zurück. Wieder einen Pixel weiter und ich erhalte wieder die neue Größe.

Kennt Ihr noch eine Methode um ein bestimmtes Seitenverhältnis mit Freepascal/Lazarus zu erzwingen?

Danke im Voraus.

Satty67 23. Jun 2009 11:17

Re: Quadratisches Fenster auch während Resize
 
Wie ist es damit?
Delphi-Quellcode:
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
  NewWidth := NewHeight;
  Resize := True;
end;
Verhältnis lässt sich darin entsprechend berechnen.

hab' zu spät gesehen, dass es um Lazarus geht, denke aber solche Basic's sollte da identisch sein.

DevilsCamp 23. Jun 2009 11:41

Re: Quadratisches Fenster auch während Resize
 
Zitat:

Zitat von Satty67
Wie ist es damit?
Delphi-Quellcode:
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
  NewWidth := NewHeight;
  Resize := True;
end;
Verhältnis lässt sich darin entsprechend berechnen.

hab' zu spät gesehen, dass es um Lazarus geht, denke aber solche Basic's sollte da identisch sein.

Leider gibt es TForm.OnCanResize bei Lazarus (noch) nicht. :(

Ich habe jetzt auch mal WM_ENTERSIZEMOVE und WM_EXITSIZEMOVE getestet. Kommen ebenfalls nicht bei der Form an.
Entweder ich gewöhne mich an dieses "Flackern" oder ich schreibe das Programm in Delphi...


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