重金问如何实现象超级解霸一样的无论窗体按钮滑动条都有背景图的界面?200!!!(200分)

  • 主题发起人 主题发起人 estray
  • 开始时间 开始时间
到是有这样的软件可以实现,不过不知道原理.

估计eyes能搞定.
 
如果你是指窗口client区域内的各种控件都透明, 这个容易. 如果要全部(包括titlebar, 系统滚动条, 边框)有一定难度. 我能实现titlebar和边框, 但系统
滚动条还没试出来.
 
请问Another_eYes,那么怎么让Client区域内的各种控件都透明呢?
 
用透明的控件呗. 其实自己做也不是很麻烦. 一般继承自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方法, 自己画.
 
请问Anothor_eYes可不可以给我一个简单的范例程序,比如一个窗体只有一个按钮,
然后透明这个按钮,我实在太笨了:)
我从来没有做过函数的重载.
 
TTransButton = class(TButton);
private
FTransparent : Boolean;

procedure SetTransparent(Value: Boolean);
procedure WMEraseBkgnd(var Msg: TMessage); message WM_ERASEBKGND;
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure SetParent(AParent: TWinControl); override;
published
property Transparent: Boolean read FTransparent write SetTransparent;
end;

procedure TTransButton.SetTransparent(Value: Boolean);
begin
if ftransparent <> value then
begin
ftransparent := value;
if value then begin
controlstyle := controlstyle - [csOpaque]
else
controlstyle := controlstyle + [csOpaque];
invalidate;
end;
end;

procedure TTransButton.WMEraseBkgnd(var Msg: TMessage);
var
br: HBRUSH;
begin
if ftransparent then
msg.result := 1
else
inherited;
end;

procedure TTransButton.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
params.exstyle := params.exstyle or WS_EX_TRANSPARENT;
end;

procedure TTransButton.SetParent(AParent: TWinControl);
begin
inherited SetParent(AParent);
if (aparent <> nil) and aparent.HandleAllocated
and (GetWindowLong(aparent.Handle, GWL_STYLE) or WS_CLIPCHILDREN <> 0) then
SetWindowLong(aparent.handle, GWL_STYLE, GetWindowLong(aparent.Handle, GWL_STYLE)
and not WS_CLIPCHILDREN);
end;

 
sthvcd的滚动条是不是自己做的, 没有用系统的???
 
应该是系统的.

滚动条也可以有贴图,我有个软件就可以做到.
 
Another_eYes:
用你的代码,按钮并不透明呀!

还有谁试过?
 
我有一些透明的界面控件,你要的话,我给你发。
 
哦, 按钮透明需要进一步处理.
createparams里加上style := style or BS_OWNERDRAW;
然后在WM_DRAWITEM中自己画吧. 我做过一个transparent的button(不是
speedbutton哦, 有handle的那种). 除了可以设置transparent rate外, 还可以
有glyph, mouseenter, mouseleave时有特殊的效果. 如果要的话来信索取.
 
Another_eYes:
我要!(眼泪汪汪的样子)
最好有原码。

www:我也要透明的界面控件。

谢谢! superwgr@netease.com
 
Another_eYes:
给我也发一份,Thanks a lot.
 
另一只大眼睛同志, 我也想要,呵呵 :)

sleepy@chinaren.com
 
我也想要
ljgljg@sohu.com
 
Keyes.chen@263.net
 
can you give it to me:
lwlnic@263.net
 

Similar threads

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