如何实现不规则控件,或是透明image?(88分)

  • 主题发起人 主题发起人 xacolaco
  • 开始时间 开始时间
X

xacolaco

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现不规则控件,或是透明image?
例如象棋棋子的移动.
 
用<a href="/delphi/attachments/gifimages.zip">这个支持透明 GIF 的程序(gifimages.zip)</a>吧。附带支持动画 GIF。
很可惜,它的例子被我删了,但是用法很简单,将这个 pas 加到您的 Package 中,
不用费神去找有没有新的Component出现。现在普通的Timage就可以调入*.gif了,
不错吧。但是,如果您需要在透明的地方将 Mouse Event 传到下面的控件或者
窗口上,就有些麻烦了,

不过回来,去本论坛问题“如何制作一个透明FORM!”中dwwang提供的URL下载,
这个透明FORM竟然能将事件漏下去呢 ...
 
哈哈!太好啦!我还没试过这个东东呢!
老孙有什么发现,不妨多宣传一下.

(这样岂不是又可以搞定50啦?*_^)
 
xacolaco,

你的问题是否搞定啦? 如果没搞定建议你自己作一个Windowed Control并让它的
region 为圆形的, 这样才能过摆脱 rectangle 的限制。
 
WINDOWS的缺省情况下窗体都是矩形的,控件也是如此,但是API函数
SetWindowRgn()可以建立一个给矩形的窗体,甚至是各种特殊窗体。
1。 创建椭圆形按钮控件程序如下:
type
TRbutton=class(TButton)
private
.......
protected
procedure CreateWnd;override;
........
........
procedure TRbutton.CreateWnd;//在控件一建立就设置
var
hRgn :THandle;
begin
inherited CreateWnd;
hRgn:=CreateEllipticRgn(0,0,Width,Height);//创建一个椭圆剪裁域;
SetWindowRgn(Handle,hRgn,True);//将此控件设置为椭圆形的OKEY!
end;
2。 创建椭圆形窗体:建立一个窗体,放一个按钮对按钮编程如下
........................
procedure TForm1.Button1Click(Sender: TObject);
var
hRgn: THandle;
begin
hRgn:=CreateEllipticRgn(0,0,Width,Height);
SetWindowRgn(Handle,hRgn,True);
end;
试一试 :)

 
你是想搞点不规则的东东吗?
在 FormCreate 中
DeviceX:=Screen.Width div 2;
DeviceY;=Screen.Height Div 2;
hRegion:=CreateRoundRectRgn(0,0,DeviceX,DeviceY,55,55);
SetWindowRgn(Handle,hRegion,True);
你可以生成一个小弧角的 Form 窗体
(注意:控件的热区也随之发生变化了,够用了吧)
透明 Image,你是想让部分背景显出来把:
让你的图片凡是需要透明的地方用这个颜色值:
clOlive !同时 让 Image 的 Transparent 为 True
看到效果了吗?(通知斑竹该给我加分了)
 
补充一句:Delphi Image 支持的默认透明颜色是左下角的颜色值!!!
 
重载CreateWnd只是在静态下有效,如果改变控件的大小,则形状会有变化.
再重载SetBounds问题才可全面解决.
type
TRbutton=class(TButton)
private
.......
protected
procedure CreateWnd;override;
...
public
procedure SetBounds(ALeft,ATop,AWidth,AHeight : integer);override;
...


procedure TRButton.SetBounds(ALeft,ATop,AWidth,AHeight : integer);
begin
inherited SetBounds(ALeft,ATop,AWidth,AHeight);
if HandleAllocated then
begin
hRgn:=CreateEllipticRgn(0,0,Width,Height);//创建一个椭圆剪裁域;
SetWindowRgn(Handle,hRgn,True);//将此控件设置为椭圆形的OKEY!
end;
end;

然后用拖拽即可实现移动.

另外: Delphi Image edit只对Icon有透明色,对其他Image则应使用clOlive,即
橄榄色(颜色区上排第四个).
 
try transparent properties
 
建议你直接使用lmd控件。
 
这么久应该可以分赃了吧!(洗黑钱)

----- by 3h 99.9.4 12:08
 
后退
顶部