怎么才让窗体按某个图形的样子进行显示呢(100分)

  • 主题发起人 主题发起人 pjiahao
  • 开始时间 开始时间
P

pjiahao

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么才让窗体按某个图形的样子进行显示呢
 
1stclass中有这种组件和例子
http://www.51delphi.com/delphi/soft?cx=1stclass
 
//FORM边缘特效
procedure TForm1.FormCreate(Sender: TObject);
var
Region1 : array of tPoint;
Region1hrgn : hRgn;
Begin
SetLength(Region1,59);
Region1[0].X:=12; Region1[0].Y:=6;
Region1[1].X:=484; Region1[1].Y:=6;
Region1[2].X:=484; Region1[2].Y:=7;
Region1[3].X:=486; Region1[3].Y:=7;
Region1[4].X:=486; Region1[4].Y:=8;
Region1[5].X:=487; Region1[5].Y:=8;
Region1[6].X:=487; Region1[6].Y:=9;
Region1[7].X:=488; Region1[7].Y:=9;
Region1[8].X:=488; Region1[8].Y:=10;
Region1[9].X:=489; Region1[9].Y:=10;
Region1[10].X:=489; Region1[10].Y:=12;
Region1[11].X:=490; Region1[11].Y:=12;
Region1[12].X:=490; Region1[12].Y:=285;
Region1[13].X:=489; Region1[13].Y:=285;
Region1[14].X:=489; Region1[14].Y:=287;
Region1[15].X:=488; Region1[15].Y:=287;
Region1[16].X:=488; Region1[16].Y:=288;
Region1[17].X:=487; Region1[17].Y:=288;
Region1[18].X:=487; Region1[18].Y:=289;
Region1[19].X:=486; Region1[19].Y:=289;
Region1[20].X:=486; Region1[20].Y:=290;
Region1[21].X:=484; Region1[21].Y:=290;
Region1[22].X:=484; Region1[22].Y:=291;
Region1[23].X:=101; Region1[23].Y:=291;
Region1[24].X:=100; Region1[24].Y:=290;
Region1[25].X:=99; Region1[25].Y:=290;
Region1[26].X:=98; Region1[26].Y:=289;
Region1[27].X:=97; Region1[27].Y:=288;
Region1[28].X:=96; Region1[28].Y:=287;
Region1[29].X:=95; Region1[29].Y:=286;
Region1[30].X:=95; Region1[30].Y:=284;
Region1[31].X:=94; Region1[31].Y:=283;
Region1[32].X:=94; Region1[32].Y:=200;
Region1[33].X:=93; Region1[33].Y:=199;
Region1[34].X:=93; Region1[34].Y:=198;
Region1[35].X:=92; Region1[35].Y:=197;
Region1[36].X:=91; Region1[36].Y:=196;
Region1[37].X:=90; Region1[37].Y:=195;
Region1[38].X:=89; Region1[38].Y:=194;
Region1[39].X:=88; Region1[39].Y:=194;
Region1[40].X:=87; Region1[40].Y:=193;
Region1[41].X:=14; Region1[41].Y:=193;
Region1[42].X:=13; Region1[42].Y:=192;
Region1[43].X:=12; Region1[43].Y:=192;
Region1[44].X:=11; Region1[44].Y:=191;
Region1[45].X:=10; Region1[45].Y:=190;
Region1[46].X:=9; Region1[46].Y:=189;
Region1[47].X:=8; Region1[47].Y:=188;
Region1[48].X:=8; Region1[48].Y:=187;
Region1[49].X:=7; Region1[49].Y:=186;
Region1[50].X:=7; Region1[50].Y:=184;
Region1[51].X:=6; Region1[51].Y:=183;
Region1[52].X:=6; Region1[52].Y:=12;
Region1[53].X:=7; Region1[53].Y:=11;
Region1[54].X:=7; Region1[54].Y:=10;
Region1[55].X:=8; Region1[55].Y:=9;
Region1[56].X:=9; Region1[56].Y:=8;
Region1[57].X:=10; Region1[57].Y:=7;
Region1[58].X:=11; Region1[58].Y:=7;
Region1hrgn:=CreatePolygonRgn(Region1[0],59,2);
SetWindowRgn(Handle, Region1hrgn, True);
end;
 
生成半圆形窗体
procedure TForm1.FormCreate(Sender: TObject);
var
hRegion: THandle;
begin
hRegion := CreateEllipticRgn (0, - Height, Width, Height);
SetWindowRgn (Handle, hRegion, True);
end;

procedure TForm1.FormResize(Sender: TObject);
var
hRegion: THandle;
begin
hRegion := CreateEllipticRgn (0, - Height, Width, Height);
SetWindowRgn (Handle, hRegion, True);
end;
 
按图片中形状显示的窗体
要求背景色是纯色,本例中背景色是白色

unit Unit3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;

type
TForm3 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
var
x,y:integer;
tepRgn,WndRgn:HRGN;
begin
form3.Width := form3.image1.Width;
form3.Height := form3.image1.Height;
WndRgn := CreateRectRgn(0, 0, Width, Height);
y := 0;
while y<form3.image1.Height do
begin
x := 0;
while x < form3.image1.Width do
begin
//要求背景色是纯色,if语句中与背景色比较
//本例中背景色是白色,所以与clwhite比较,其他背景色一样
if (form3.image1.Canvas.Pixels[x, y] = clWhite) then
begin
tepRgn := CreateRectRgn(x, y, x+1, y+1);
CombineRgn(WndRgn, WndRgn, tepRgn, RGN_XOR);
DeleteObject(tepRgn);
end;
Inc(x);
end;

Inc(y);
end;

SetWindowRgn(Handle, WndRgn, true);
end;

end.
 
后退
顶部