用Delphi設(shè)計(jì)多邊形窗體

字號(hào):

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