在Delphi中实现任意形状的窗体
Form的TEXT:
object Form1: TForm1
Left = 192
Top = 107
BorderStyle = bsNone
Caption = Form1
ClientHeight = 348
ClientWidth = 536
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = MS Sans Serif
Font.Style = []
OldCreateOrder = False
OnCreate = Button1Click
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 392
Top = 152
Width = 75
Height = 25
Caption = Button1
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 432
Top = 24
Width = 17
Height = 17
Caption = Button2
TabOrder = 1
OnClick = Button2Click
end
object Button3: TButton
Left = 448
Top = 40
Width = 17
Height = 17
Caption = Button2
TabOrder = 2
OnClick = Button3Click
end
object Button4: TButton
Left = 464
Top = 56
Width = 17
Height = 17
Caption = Button2
TabOrder = 3
OnClick = Button4Click
end
end
各种不同的事件声名:
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
procedure WMmove(var Message: TWMNCHITTEST); Message WM_NCHITTEST;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMmove(var Message: TWMNCHITTEST);
begin
Message.Result := HTCAPTION;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
R1,R2,R3,R4,R5: HRGN;
begin
R1 := CreateEllipticRgn(0,0,Round(ClientWidth / 2),ClientHeight);
R2 := CreateEllipticRgn(Round(ClientWidth / 2),0,ClientWidth,ClientHeight);
R3 := CreateEllipticRgn(Round(ClientWidth / 4 ),Round(ClientHeight / 4 *3),Round(ClientWidth / 4 *3),ClientHeight);
R4 := CreateRectRgn(0,0,0,0);
R5 := CreateRectRgn(0,0,0,0);
CombineRgn(R4,R2,R1,RGN_or);
CombineRgn(R5,R4,R3,RGN_or);
SetWindowRGN(Handle,R5,True);
DeleteObject(R1);
DeleteObject(R2);
DeleteObject(R3);
DeleteObject(R4);
DeleteObject(R5);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SendMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
SendMessage(Handle,WM_SYSCOMMAND,SC_DEFAULT,0);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Application.Terminate;
end;
end.