高分求救!!!Help!!!!一个关于透明控件的问题。(250分)

H

hnzzq

Unregistered / Unconfirmed
GUEST, unregistred user!
我现编了一个继承自TCustomControl的控件用来显示一种设备的状态信息。把这个控件放到TScrollbox中使在屏幕上不能完全显示时能出现滚动条。
在Tscrollbox不加背景只改变颜色时控件显示正常。现在我想加上背景图。
我试了两种方法:一种是给TScollbox加一个Canvas,然后在Canvas里画背景图或者是得到Scollbox的HDC然后用API画,结果是设置我的控件中的
CreateParams中设置为 Params.ExStyle := ExStyle and not Ws_Ex_Transparent整个画面只有背景图显示,控件没显示,如果不设置控件
Params.ExStyle := ExStyle and not Ws_Ex_Transparent则控件显示不透明。
另一种是加一个Timage控件放到TScroolbox中做背景,则显示不正常。要么不透明,要么就显示出的图像和我所预定的不同。
 
用区域吧
region
 
关注,帮你up一下
 
我用区域试了,确实不错,不过有个问题,就是用bitmap.mask图像,这样使得在图像中间不想透明的它也透明了,使用一个什么算法能使只按照图像的边缘来产生mask图,而使图像中间有透明颜色的不透明。
 
我试了一下,在scrollbox中加了一个label和一个image,背景都设为透明,然后在scrollbox
中画背景,在窗体create事件中加scrollbox1.brush.bitmap := image2.picture.bitmap可以
实现,image2是另外加入的一个图片,设为不可见。前景和背景显示均正常,不知道你的
控件能不能正常显示,当然也仍然没能解决图片中间透明色不处理的问题,不过我想你可以
把透明色设为一个不可能用到的颜色来解决。
 
首先感谢johui的回答,不过你所说的已经不是重点,我用区域已经实现,重点是怎么去判断图像的边缘以实现透明。
 
顶部