M
mralu
Unregistered / Unconfirmed
GUEST, unregistred user!
在formpaint中用pngimage打开一个有透明效果的png图片,在formcreate中设置Form1.Brush.Style:=bsClear;,并且TForm1.CreateParams.ExStyle:=WS_EX_TRANSPARENT;
这样窗体是透明了,但是一旦移动窗体那么就不对了。应该怎么做呢?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, pngimage, ExtCtrls, StdCtrls;
const
WS_EX_LAYERED = $80000;
AC_SRC_OVER = $0;
AC_SRC_ALPHA = $1;
AC_SRC_NO_PREMULT_ALPHA = $1;
AC_SRC_NO_ALPHA = $2;
AC_DST_NO_PREMULT_ALPHA = $10;
AC_DST_NO_ALPHA = $20;
LWA_COLORKEY = $1;
LWA_ALPHA = $2;
ULW_COLORKEY = $1;
ULW_ALPHA = $2;
ULW_OPAQUE = $4;
type
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateParams(var P: TCreateParams); override;
procedure wmnchittest(var msg:twmnchittest);message wm_nchittest;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.CreateParams(var P: TCreateParams);
begin
inherited;
p.ExStyle:=WS_EX_TRANSPARENT;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Brush.Style:=bsClear;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
Png: TPngObject;
Rect: TRect;
begin
Png := TPngObject.Create;
Png.LoadFromFile('main.png');
form1.Width := png.Width;
form1.Height := png.Height;
Rect.Left := 0;
Rect.Top := 0;
Rect.Right := Rect.Left + Png.Width;
Rect.Bottom := Rect.Top + Png.Height;
Png.Draw(Canvas, Rect);
Png.Free;
end;
procedure TForm1.wmnchittest(var msg: twmnchittest);
begin
inherited;
msg.Result := htcaption;
end;
end.
这样窗体是透明了,但是一旦移动窗体那么就不对了。应该怎么做呢?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, pngimage, ExtCtrls, StdCtrls;
const
WS_EX_LAYERED = $80000;
AC_SRC_OVER = $0;
AC_SRC_ALPHA = $1;
AC_SRC_NO_PREMULT_ALPHA = $1;
AC_SRC_NO_ALPHA = $2;
AC_DST_NO_PREMULT_ALPHA = $10;
AC_DST_NO_ALPHA = $20;
LWA_COLORKEY = $1;
LWA_ALPHA = $2;
ULW_COLORKEY = $1;
ULW_ALPHA = $2;
ULW_OPAQUE = $4;
type
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateParams(var P: TCreateParams); override;
procedure wmnchittest(var msg:twmnchittest);message wm_nchittest;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.CreateParams(var P: TCreateParams);
begin
inherited;
p.ExStyle:=WS_EX_TRANSPARENT;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Brush.Style:=bsClear;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
Png: TPngObject;
Rect: TRect;
begin
Png := TPngObject.Create;
Png.LoadFromFile('main.png');
form1.Width := png.Width;
form1.Height := png.Height;
Rect.Left := 0;
Rect.Top := 0;
Rect.Right := Rect.Left + Png.Width;
Rect.Bottom := Rect.Top + Png.Height;
Png.Draw(Canvas, Rect);
Png.Free;
end;
procedure TForm1.wmnchittest(var msg: twmnchittest);
begin
inherited;
msg.Result := htcaption;
end;
end.