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.