以一个panel为例
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Unit4,ExtCtrls, Buttons,Math;
type
TForm3 = class(TForm)
Panel: TPanel;
procedure FormResize(Sender: TObject);
private
{ Private declarations }
procedure CenterPanel;
//处理窗口改变消息
procedure WMWindowposchanging(var Msg:TWMWindowPosChanging);
message WM_WINDOWPOSCHANGING;
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
//使面板始终在窗口中心
procedure TForm3.CenterPanel;
begin
//水平居中
if Panel.Width<ClientWidth then
Panel.Left:=(ClientWidth - Panel.Width)div 2
else
Panel.Left:=0;
//垂直居中
if Panel.Height<ClientHeight then
Panel.Top:=(ClientHeight - Panel.Height) div 2
else
Panel.Top:=0;
end;
procedure TForm3.FormResize(Sender: TObject);
begin
CenterPanel;
end;
procedure TForm3.WMWindowposchanging(var Msg: TWMWindowPosMsg);
var
CaptionHeight:Integer;
begin
//得到标题的高度
CaptionHeight:=GetSystemMetrics(SM_CYCAPTION);
//保证窗体的高度不小于面板
Msg.WindowPos^.cy:=Max(Msg.WindowPos^.cy,Panel.Height+20+CaptionHeight);
//保证窗体的宽度不小于面板
Msg.WindowPos^.cx:=Max(Msg.WindowPos^.cx,Panel.Width+20);
end;
end.