发信人: finlove (荒野之狼), 信区: BorlandDev
标  题: 开发透明控件
发信站: 哈工大紫丁香 (Mon Jan 21 10:40:41 2002) , 转信

将一个FORM变成透明的实质性手段就是拦截CMEraseBkgnd消息。 

unit Utransform; interface uses Windows, Messages, SysUtils, Classes, Graphics
, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) 

private { Private declarations } 

public { Public declarations } 

PROCEDURE CMEraseBkgnd(var Message:TWMEraseBkgnd);Message WM_ERASEBKGND; 

end; 

var Form1: TForm1; 

implementation 

{$R *.DFM} 

PROCEDURE Tform1.CMEraseBkgnd(var Message:TWMEraseBkgnd); 

BEGIN 

brush.style:=bsClear; 

Inherited; 

END; 

end. 

////////////////////////////////////// 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
Form1.Brush.Style := bsClear; 
Form1.BorderStyle := bsNone 
end; 

procedure TForm1.BitBtn1Click(Sender: TObject); 
begin 
Application.Terminate; 
end; 
///////////////////////////////////////////// 
用透明的控件呗. 一般继承自TGraphicControl的 
(就是那些没有handle属性, 不能有focus的控件, 如image) 
都有Transparent属性. 对TWinControl类的控件, 要实现透明只要完成以下 
三步基本上就成了. 
1. override 它的CreateParams方法, exstyle 里加上WS_EX_TRANSPARENT. 
2. 修改它的parent的window style, 去掉WS_CLIPCHILDREN. 
3. 截获WM_ERASEBKGND, 什么都不做直接返回1. 
一般有上面3步能成. 有些控件比如TPanel, 在它的paint中用了fillrect, 所以要实现透
明的话还要override 它的paint方法, 自己画. 
按钮透明需要进一步处理. 
createparams里加上style := style or BS_OWNERDRAW; 
然后在WM_DRAWITEM中自己画吧 




--

※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 211.97.214.52]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.811毫秒