哪位实现过控件背景透明设计?

牧牛童子 2011-04-28 09:56:27
窗体背景为一张图片,上面放几个控件,如:Lable,button,dbgird.都将挡住图片,想实现控件背景透明,只显示控件文字,如何实现?
...全文
209 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
truelove7283159 2011-05-01
  • 打赏
  • 举报
回复
我知道好象两个方法把
1 利用阿尔法通道a
2 好象是位图异或

如果利用已经好的函数
你可以看OPENGL 的函数c++builder类库中有,好象BL开头的,年代久忘记了, 最近发现不会写C程序了.
牧牛童子 2011-05-01
  • 打赏
  • 举报
回复
谢谢楼上朋友。
tbwork 2011-05-01
  • 打赏
  • 举报
回复
最复杂的情况是背景不是单色,而是一副图案。首先把这个背景图保存在内存中,比如叫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中,那么触发按钮事件。

牧牛童子 2011-04-30
  • 打赏
  • 举报
回复
谢谢楼上的朋友。本人非专业程序,搞不定继承。有listview透明示例也行。
dfasri 2011-04-29
  • 打赏
  • 举报
回复
Label 是有 Transparent 选项可以直接选的, 而Button是没有透明效果的, 但可以用SpeedButton来代表就会有透明效果了, dbgrid要透明效果也可以, 但你必须继承DrawCell的几个函数, 把当前要画的格变换成父窗体的坐标, 然后用这个坐标在源背景图上面进行截出相应位置和大小的剪切图, 把剪切图画入格, 再把用DrawText自己把字画上去. 坐标的变换不会很复杂, 上网查查, 有半年没碰DELPHI了, 不记得了
我不懂电脑 2011-04-28
  • 打赏
  • 举报
回复
设置窗体透明色,控件背景颜色和窗体透明色一样,然后让窗体透明就可以了。
牧牛童子 2011-04-28
  • 打赏
  • 举报
回复
谢谢楼上回复,窗体透明我试过,不是我想要的效果。

窗体不透明,只要控件背景透明。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧