关于窗体透明的问题,求解~(100分)

  • 主题发起人 主题发起人 mralu
  • 开始时间 开始时间
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.
 
是不是窗体重画的问题啊。。
用WM_PAINT消息看看行不行
 
后退
顶部