Einfach auf File\New\Application klicken...
Dann den Code von
Unit 1 damit ersetzen:
Delphi-Quellcode:
Unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, CommCtrl
{$IFDEF CLR}, System.ComponentModel,
Borland.Vcl.ExtCtrls
{$ELSE},ExtCtrls
{$ENDIF};
Type
TPrevSettings =
Record
pTop: Integer;
pLeft: Integer;
pHeight: Integer;
pWidth: Integer;
pAlign: TAlign;
End;
Type
TForm1 =
Class(TForm)
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
Panel2: TPanel;
Memo1: TMemo;
private
PrevSettings: TPrevSettings;
Procedure WMSysCommand(
Var Message: TWMSysCommand);
message WM_SYSCOMMAND;
Procedure doMaximize(
Const Maximize: Boolean);
public
End;
Var
Form1: TForm1;
Implementation
{$R *.dfm}
Procedure TForm1.doMaximize(
Const Maximize: Boolean);
Begin
If Maximize
Then
Begin
WITH PrevSettings
do
Begin
pTop := Top;
pLeft := Left;
pHeight := Height;
pWidth := Width;
pAlign := Align;
End;
Constraints.MaxHeight := 150;
Align := alTop;
WindowState := wsMaximized;
End
Else
Begin
WindowState := wsNormal;
Constraints.MaxHeight := 0;
WITH PrevSettings
do
Begin
Align := pAlign;
Top := pTop;
Left := pLeft;
Height := pHeight;
Width := pWidth;
End;
End;
End;
Procedure TForm1.WMSysCommand(
Var Message: TWMSysCommand);
Begin
Case Message.CmdType
Of
SC_MAXIMIZE, 61490: doMaximize(True);
SC_RESTORE, 61730: doMaximize(False);
Else
Inherited;
End;
End;
End.
Erst jetzt können die Controls drauf (möglichst auf aligned Panels packen).
Wichtig ist es die Einstellungen der Form zu sichern (PrevSettings), da durch das alTop alles verändert wird.
Ich habe auch noch eine Echse angehängt.
Nachtrag:
Da war ich wohl etwas wortkarg
Also ...
CmdType
SC_MAXIMIZE -> Klick auf den Max Button
61490 -> Doppelklick auf Titelleiste, wenn das Form im WindowState = wsNormal ist
SC_RESTORE -> Klick auf den Restore Button
61490 -> Doppelklick auf Titelleiste, wenn das Form im WindowState = wsMaximized ist
Der Code macht eigentlich nix weiter, als die Einstellungen vor Maximize zu sichern, und vor Restore wieder zu setzen.
Sorry für die .Net-Echse, aber ich hatte keine Lust auch noch D7 aufzumachen. Durch die Compiler-Direktive in der Uses müsste es auch unter
Win32 laufen.