制作多邊形窗體的關鍵在於設定多邊形的區域,並根據這個指定的區域改變窗體的形狀。Windows的CreatePolygonRgn和SetWindowRgn函數可以解決這兩個難點。
利用以下代碼即可將窗體設置為一個五邊形:
procedure TForm1.FormCreate(Sender: TObject);
var
pt: array [0..4] of TPoint;
m_rgn: HRGN;
begin
pt[0].x:=self.Width div 2;
pt[0].y:=0;
pt[1].x:=0;
pt[1].y:=self.Height div 2;
pt[2].x:=self.Width div 2;
pt[2].y:=self.Height;
pt[3].x:=self.Width;
pt[3].y:=self.Height div 2;
pt[4].x:=self.Width;
pt[4].y:=0;
m_rgn:=CreatePolygonRgn(pt,5,WINDING);
SetWindowRgn(self.Handle,m_rgn,TRUE);
end;
該程序首先定義了一個TPoint類型的數組pt,在其中存儲了一個五邊形的數據。然後使用CreatePolygonRgn函數將這個五邊形轉換成為一個區域,最後使用SetWindowRgn函數,根據五邊形指定的區域改變窗體的形狀。
程序代碼如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
pt: array [0..4] of TPoint;
m_rgn: HRGN;
begin
pt[0].x:=self.Width div 2;
pt[0].y:=0;
pt[1].x:=0;
pt[1].y:=self.Height div 2;
pt[2].x:=self.Width div 2;
pt[2].y:=self.Height;
pt[3].x:=self.Width;
pt[3].y:=self.Height div 2;
pt[4].x:=self.Width;
pt[4].y:=0;
m_rgn:=CreatePolygonRgn(pt,5,WINDING);
SetWindowRgn(self.Handle,m_rgn,TRUE);
end;
end.
保存文件,然後按F9鍵運行程序,結果如圖1-3所示。
圖 程序運行結果
制作多邊形窗體的方法並不止本實例所介紹的一種,後面還會涉及到如何制作更為復雜的窗體,希望讀者多加體會,制作出更加有個性的窗體。