首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

哪位实现过控件背景透明设计?该如何解决

2012-03-14 
哪位实现过控件背景透明设计?窗体背景为一张图片,上面放几个控件,如:Lable,button,dbgird.都将挡住图片,想

哪位实现过控件背景透明设计?
窗体背景为一张图片,上面放几个控件,如:Lable,button,dbgird.都将挡住图片,想实现控件背景透明,只显示控件文字,如何实现?

[解决办法]
设置窗体透明色,控件背景颜色和窗体透明色一样,然后让窗体透明就可以了。
[解决办法]
Label 是有 Transparent 选项可以直接选的, 而Button是没有透明效果的, 但可以用SpeedButton来代表就会有透明效果了, dbgrid要透明效果也可以, 但你必须继承DrawCell的几个函数, 把当前要画的格变换成父窗体的坐标, 然后用这个坐标在源背景图上面进行截出相应位置和大小的剪切图, 把剪切图画入格, 再把用DrawText自己把字画上去. 坐标的变换不会很复杂, 上网查查, 有半年没碰DELPHI了, 不记得了
[解决办法]
我知道好象两个方法把
1 利用阿尔法通道a
2 好象是位图异或

如果利用已经好的函数
你可以看OPENGL 的函数c++builder类库中有,好象BL开头的,年代久忘记了, 最近发现不会写C程序了.
[解决办法]
最复杂的情况是背景不是单色,而是一副图案。首先把这个背景图保存在内存中,比如叫BackBmp

1.如果仅仅是显示透明背景文本的话可以这样来做:
SetBkMode(Canvas->Handle,TRANSPARENT);
TextOut(Canvas->Handle,Memo1->Left,Memo1->Top-i*Memo1->Font->Height,text.c_str(),text.Length());

2.要做透明按钮的话,可以用Image控件代替。Image控件比较灵活。可以做成任何你想要的样子。

3.最难的是对于任何控件。这里讲一下思路:
有些控件是不具有显示设备(Canvas)的(如panel等),所以可以为它定义一个canvas(画布),然后把BackBmp的该控件区域的图案拷贝到其中。然后在该画布上写上按钮文字。

还有一种比较简单,对于比较简单的控件,如按钮,可以这样:
用窗口点击判断,来模拟按钮:
1)定义ButtonRect,为按钮显示区域
2)首先按照1中描述的一样,在窗体上的ButtonRect区域写上按钮文字。
3)在FormClick事件中加以判断:如果是单击到该ButtonRect中,那么触发按钮事件。

热点排行