Einzelnen Beitrag anzeigen

DevilsCamp
(Gast)

n/a Beiträge
 
#1

Quadratisches Fenster auch während Resize

  Alt 23. Jun 2009, 12:14
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.
  Mit Zitat antworten Zitat