请教PngImage的用法.. ( 积分: 100 )

  • 主题发起人 主题发起人 MyDelphiPower
  • 开始时间 开始时间
M

MyDelphiPower

Unregistered / Unconfirmed
GUEST, unregistred user!
使用PngImage加载PNG图片,但界面并没有透明,还要设置哪里?

procedure TFrmParent.FormPaint(Sender: TObject);
var
Png: TPngObject;
Rect: TRect;
begin
Png := TPngObject.Create;
Png.LoadFromFile('image/HealthCare0.png');

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;

我知道GDI+可以实现透明,但透明后界面加载不了控件,双重界体处理起来很麻烦,连frmMain.Parent:=self;都不能用;
所以我想试试PngImage能不能加载透明图片
 
汗......png图片只能自己透明,所以当你使用透明png图片的时候会透明到下面的form上
另外,你每次print的时候create,再load,这样太浪费资源了了

如果你想设置form也透明,可以这样,不过要注意,使用pngobject.draw的方法,只能支持全透明,而不支持png的半透明
实际上,你这么做,还是使用form本身的透明方法,而png只是起到一个显示form透明色的作用,如果你使用一个bmp把透明色换到bmp上,也一样可以变成透明窗体
如果要支持半透明,最好还是用GDI+来做,不过加载不了控件确实有点烦(其实是显示不了控件,如果你点击控件的位置,一样可以相应控件消息和事件的)

type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDblClick(Sender: TObject);
private
{ Private declarations }
Png: TPngObject;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);
var
Rect: TRect;
begin
Rect.Left := 0;
Rect.Top := 0;
Rect.Right := Rect.Left + Png.Width;
Rect.Bottom := Rect.Top + Png.Height;
Png.Draw(Canvas, Rect);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
self.Color:=clred;
self.TransparentColor:=true;
self.TransparentColorValue:=clred;
self.BorderStyle:=bsNone;
Png := TPngObject.Create;
Png.LoadFromFile('d:/test.png');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Png.Free;
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
close;
end;
 
我最近碰到了一个和Image有关的问题,插入Jpge时正常,插入一张Jpge后,所有插入记录均能正常显示,但如果试运行时,不插入记录(插入记录时必须插入图片,这是设定好了的),而是直接显示记录,程序就报错,access violation at address 怎么都查不出问题,借楼主地盘一用,呵呵,相关的问题,摆在一起,好讨论。
 
还是无法解诀啊
看来得处理两个窗口的问题了
 
GDI处理的时候由于使用了 UpdateLayeredWindow,所以不会相应onpaint消息,所有的控件自然因为不能重绘而看不见
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
851
DelphiTeacher的专栏
D
I
回复
0
查看
614
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部