Es gibt einen kleinen Trick mit Hilfsvariablen und FormResize.
BorderStyle:= bsSingle; // Damit die Grösse nicht verändert werden kann.
Variablen:
StartLeft, StartWidth, StartTop, StartHeight: integer;
in FormActivate:
StartLeft:=left;
StartTop:= top;
StartWidth:=width;
StartHeight:=height;
ausserdem für alle relevanten Inhalte doublebuffered:=true
Delphi-Quellcode:
procedure TForm1.FormResize(Sender: TObject);
begin
WITH Form1 DO BEGIN
doublebuffered:=true;
if windowstate=wsmaximized then begin
windowstate:= wsnormal;
left:=StartLeft; Width:=StartWidth;
top:=StartTop; height:=StartHeight;
windowstate:= wsnormal;
end;
if width>startwidth then begin left:=StartLeft; Width:=startwidth; end;
if height>startheight then begin top:=startTop; height:=startheight; end;
END;
end;
Mag sein, dass es so etwas umständlich ist, aber so kann man minimieren und wenn man auf maximize
klickt, ändern sich das entsprechende Icon und vielleicht flackert das Programm minimal, z.B. die Position des Form-Capture.
Getestet mit Delphi 7 unter Windows 8.