Hallo Oki
Ich bin beeindruckt von Deiner schnellen Antwort, vielen Dank.
DP habe ich immer wieder besucht aber mich nie getraut mal eine (dumme) Frage zu stellen.
Dein Tipp WMSizing hat mich ein gutes Stück weitergebracht und ich hab dazu einiges gefunden und einbaut:
Delphi-Quellcode:
procedure TMainForm.FWM_Sizing(var AMsg: TMessage);
var lRect : PRect;
lRatio : TPoint;
lNewHeight,
lNewWidth : Integer;
begin
lRatio := Point(4, 3);
lRect := PRect(AMsg.LParam);
lNewHeight := lRect.Bottom - lRect.Top + 1;
lNewWidth := lRect.Right - lRect.Left + 1;
case AMsg.WParam of
WMSZ_BOTTOM, WMSZ_TOP: lRect.Right := lRect.Left + Round(lNewHeight * lRatio.X / lRatio.Y);
WMSZ_LEFT, WMSZ_RIGHT: lRect.Bottom := lRect.Top + Round(lNewWidth * lRatio.Y / lRatio.X);
//übrig bleibt noch was passieren soll wenn jemand direkt eine Ecke anpackt
end;
inherited;
end;
//Das scaleby hab ich nun hier untergebracht :
Procedure TMainForm.OnAfterResize(var msg: TMessage);
Var h, w : single ;
begin
w := Width / InitWidth ;
h := Height / InitHeight ;
If h > w Then
Width := round(InitWidth * h)
Else
Height := round(InitHeight * w) ;
If (Width) <> Currentscale Then
Begin
ScaleBy ( Width, CurrentScale );
CurrentScale := Width;
End;
End;
Nun verschiebt sich aber der Rahmen zum Fensterinhalt. Und die „Ecken“ Lösung bin ich noch nicht angegangen
Leider blicke ich nicht richtig durch weil ich bisher so gut wie keine Erfahrung mit systemnaher Windows-Programmierung habe. Was die Windows Messages betrifft schwirren mir die Sinne: WM_SIZING, WM_SIZE, WM_RESIZE, WM_EXITSIZEMOVE etc. und deren diverse Parameter und Optionen. Was hat sich MS bloß bei dieser Vielfalt gedacht ? Wie kann da einer durchblicken ?
Hast Du vielleicht. noch eine Tipp wo ich ein kompletteres Beispiel für FormResizing finden kann welches Delphi 2007 kompatible ist?
Gefunden habe ich bisher nur dinge aus 1999 /2000.