X
xFairy
Unregistered / Unconfirmed
GUEST, unregistred user!
我刚学编程不久,但却爱探索高难度问题(只对我而言是高难度),当然难不到各位Delphi前辈.
我想实现像Office助手那样的程序,窗体不但是不规则的,而且还会有动画效果,但是不能用透明窗体的方法实现,而是真正的不规则窗体,不知道应该怎样实现?
我已经尽了最大的努力来实现,但是窗体动画时,太闪耀了,且拖动窗体时窗体上会看不到图像,我真的不知道该怎样做.
以下是我实现的方法:
图像与图像的Mask都放在资源文件ResImages.res中,ID分别从1到15.
Timer1的Interval = 200.
var
Form1: TForm1;
bmp: TBitmap;
MaskFile: TResourceStream;
RgnSize: integer;
RgnData: pRgndata;
Region: hrgn;
i: integer;
implementation
{$R ResImages.res}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
i := (i + 1);
//循环ID值实现动画
bmp := TBitmap.Create;
bmp.LoadFromResourceID(hInstance,i);
//从资源文件读取图像
Image1.Picture.Graphic := bmp;
//Image1显示图像
MaskFile := TResourceStream.CreateFromID(HInstance,i,'Mask');
//从资源文件读取图像Mask
MaskFile.read (RgnSize,4);
Getmem(RgnData,RgnSize);
MaskFile.read(rgnData^,RgnSize);
Region := ExtCreateRegion(nil,RgnSize,RgnData^);
SetWindowRgn(Form1.handle,Region,true);
//实现不规则窗体
bmp.Free;
MaskFile.Free;
If i = 15 then i := 0;
end;
我想实现像Office助手那样的程序,窗体不但是不规则的,而且还会有动画效果,但是不能用透明窗体的方法实现,而是真正的不规则窗体,不知道应该怎样实现?
我已经尽了最大的努力来实现,但是窗体动画时,太闪耀了,且拖动窗体时窗体上会看不到图像,我真的不知道该怎样做.
以下是我实现的方法:
图像与图像的Mask都放在资源文件ResImages.res中,ID分别从1到15.
Timer1的Interval = 200.
var
Form1: TForm1;
bmp: TBitmap;
MaskFile: TResourceStream;
RgnSize: integer;
RgnData: pRgndata;
Region: hrgn;
i: integer;
implementation
{$R ResImages.res}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
i := (i + 1);
//循环ID值实现动画
bmp := TBitmap.Create;
bmp.LoadFromResourceID(hInstance,i);
//从资源文件读取图像
Image1.Picture.Graphic := bmp;
//Image1显示图像
MaskFile := TResourceStream.CreateFromID(HInstance,i,'Mask');
//从资源文件读取图像Mask
MaskFile.read (RgnSize,4);
Getmem(RgnData,RgnSize);
MaskFile.read(rgnData^,RgnSize);
Region := ExtCreateRegion(nil,RgnSize,RgnData^);
SetWindowRgn(Form1.handle,Region,true);
//实现不规则窗体
bmp.Free;
MaskFile.Free;
If i = 15 then i := 0;
end;