您的位置:首页 > 编程语言 > Delphi

Delphi 根据图片或者文字制作特殊的窗体

2011-09-23 12:16 357 查看

一、根据图片制作特殊的窗体

1、在FormCreate中计算窗体的不规则区域

procedure TForm1.FormCreate(Sender: TObject);

var

ThreadRgn, TmpRgn: HRgn;

X, Y,Height, Width: Integer;

begin

BitMapb := TBitMap.Create;

BitMapb.LoadFromFile(ExtractFileDir(Application.ExeName) + '\Pic\5.bmp');

//设置窗体的大小

Self.Height := BitMapb.Height;

self.Width := BitMapb.Width;

Height := BitMapb.Height;

Width := BitMapb.Width;

//创建矩形区域

ThreadRgn := CreateRectRgn(0, 0, Width, Height);

for Y := 0 to Height do

for X := 0 to Width do

begin

//R := GetRValue(BitMapb.Canvas.Pixels[X, Y]); R为整型

if BitMapb.Canvas.Pixels[X, Y] = rgb(0,0,255) then

begin

TmpRgn := CreateRectRgn(x, y, x + 1, y + 1);

//区域融合,取ThreadRgn与TmpRgn连个区域OR之外的部分赋给ThreadRgn

CombineRgn(ThreadRgn, ThreadRgn, TmpRgn, RGN_XOR);

DeleteObject(TmpRgn);

end;

end;

SetWindowRgn(handle, ThreadRgn, False);//设置窗体区域的有效区域

end;

2、//重新绘制窗体

procedure TForm1.FormPaint(Sender: TObject);

begin

Canvas.Draw(0, 0, BitMapb); // 绘图

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

BitMapb.Free;

end;

3、//设置窗体的移动

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if Button=Mbleft then

begin

ReleaseCapture;

Perform(WM_NCLBUTTONDOWN,HTCAPTION,0);//消息处理

end;

end;

4,其余的可以参考:

Delphi 自定义窗体(最大化、最小化、关闭、窗体的移动)

二、根据文字制作特殊的窗体

procedure TTextForm.FormCreate(Sender: TObject);

var

Rgn :HRGN;

begin

TextForm.Color := ClBlue;

//启动一个路径分支,之后执行的GDI绘图命令会自动成为路径的一部分

BeginPath(Canvas.Handle);

SetBKMode(Canvas.Handle,TRANSPARENT);

canvas.Font.Color := ClRed; //无效,因为是透明的。

Canvas.Font.Name := '宋体';

Canvas.Font.Size := 80;

Canvas.TextOut(0,0,'字体窗体');

//结束定义路径。所有绘制操作将在指定的设备场景的路径中生效

EndPath(Canvas.Handle);

//将当前选定的路径转换到指定的区域中

Rgn := PathToRegion(Canvas.Handle);

SetWindowRgn(Handle,Rgn,true);

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: