本文將介紹如何利用Windows提供的制作界面函數(shù)制作一個多邊形窗體。
制作多邊形窗體的關(guān)鍵在于設(shè)定多邊形的區(qū)域,并根據(jù)這個指定的區(qū)域改變窗體的形狀。Windows的CreatePolygonRgn和SetWindowRgn函數(shù)可以解決這兩個難點。
利用以下代碼即可將窗體設(shè)置為一個五邊形:
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類型的數(shù)組pt,在其中存儲了一個五邊形的數(shù)據(jù)。然后使用CreatePolygonRgn函數(shù)將這個五邊形轉(zhuǎn)換成為一個區(qū)域,最后使用SetWindowRgn函數(shù),根據(jù)五邊形指定的區(qū)域改變窗體的形狀。
程序代碼如下:
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鍵運行程序,結(jié)果如圖1-3所示。
圖 程序運行結(jié)果
制作多邊形窗體的方法并不止本實例所介紹的一種,后面還會涉及到如何制作更為復(fù)雜的窗體,希望讀者多加體會,制作出更加有個性的窗體。
制作多邊形窗體的關(guān)鍵在于設(shè)定多邊形的區(qū)域,并根據(jù)這個指定的區(qū)域改變窗體的形狀。Windows的CreatePolygonRgn和SetWindowRgn函數(shù)可以解決這兩個難點。
利用以下代碼即可將窗體設(shè)置為一個五邊形:
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類型的數(shù)組pt,在其中存儲了一個五邊形的數(shù)據(jù)。然后使用CreatePolygonRgn函數(shù)將這個五邊形轉(zhuǎn)換成為一個區(qū)域,最后使用SetWindowRgn函數(shù),根據(jù)五邊形指定的區(qū)域改變窗體的形狀。
程序代碼如下:
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鍵運行程序,結(jié)果如圖1-3所示。
圖 程序運行結(jié)果
制作多邊形窗體的方法并不止本實例所介紹的一種,后面還會涉及到如何制作更為復(fù)雜的窗體,希望讀者多加體會,制作出更加有個性的窗體。