求delphi透明panel组件或者制作方法

jianfengqu 超级会员 jianfengqu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我需要一个可以透明,并且可以拖动的panel组件。当然也可以不是panel,其他的容器组件也可以的。注意:透明指的是panel下面的变化也能看见(如下面是一个edit,可以看见里面文字的变化),就像网页上的效果一样。
在网上漂了三天,我涝呀,找呀,找了三天,没有找到合适的方案。

首先找了一些第三方组件,有可以支持透明的,比如TIAsemiPanel和eztexturepanel。
TIAsemiPanel在给上面拖上去一个按钮时,delphi就会死掉。eztexturepanel在拖动panel时背景不跟着变,即还是用的原来的背景,当然更不能看见下面东西的变化了。

找了一些制作透明组件的方法,有说使用SetLayeredWindowAttributes API的,可是要用它,组件要有WS_EX_LAYERED样式,而有了这个样式就必须不能有WS_CHILD,但是panel肯定是有WS_CHILD的,这种办法不能用了。
我就试着用另一种方法,首先取得panel父组件的背景,将其放到一个bitmap中去,然后取得panel的图像将其也存到一bitmap中,然后将这两个 bitmap通过一定方法叠加后,画到panel上去。可是因为我在取背景的图像时,需要先把panel设为不可见再取背景图像,取到后再把panel设为可见,这样一执行到paint方法里时panel开始不停闪烁,不知如何解决,有人知道如何解决不?

我原来是做b/s的,这些透明之类的效果,在网页里就是一个滤镜效果,轻轻指定几个值就可以了,可没想到在delphi里竟如此难做。我在想网页里的滤镜效果是如何实现的。同样是在windows系统下显示,为什么浏览器能实现,而应用程序就实现不了了,当然肯定是我不会。我在想为什么delphi就不把这些大家都会共用到的东西做出来。我们做开发的主要目的就是实现业务,这些什么乱七八糟的基本东西应该是开发工具就提供好了的,据说borland的架构师跑到微软去了,剩下的人怎么就不知道赶赶潮流,把delphi给正儿八经升升级。那些自带的组件是可以完成功能,但做一个真正的好东西,用户都不愿意看着一个丑不垃圾的界面。说是可以自定义组件,给开发者留了很大的扩展余地,可是问题是开发者要做的东西太多,太多!
说多了,哪位高手知道如何实现我要的效果。谢谢!!!!!!!!
...全文
评论 19
收藏 已收藏
分享
返回顶部
jianfengqu 超级会员
Delphi 5,944 成员 262,941 内容