关于透明窗体的问题。(100分)

  • 主题发起人 主题发起人 zhangkan
  • 开始时间 开始时间
textout(0,0,' ');事还是做了,就是lable没重画,让他重画一次试试?
 
我想因为是空格,而背景是透明的,所以空格没有用,不知是不是这样。你说重画是用什么?
自己调用OnPaint吗?
 
label1.repaint,我试了一下,似乎可以
 
sonie,我试过了,label1.repaint不行。
 
关于LABEL的问题,直接给CAPTION赋值,低色不会变灰,注意TRANPARENT属性为真,窗体的
透明使用拦截WM_ERASEBKGND消息实现,我用的是WIN2000;
但是先后字符会重叠在一起,这只要解决窗体刷新的问题;
这个问题我也没有更好的解决,SETWINDOWPOS、SETWINDOWRGN、INVALIDATERECT、REFRASH、
UPDATE、发送WM_ERASEBKGND消息,都试过,不行!
最后用了先HIDE,再SHOW的办法,但窗体会闪一下,还要注意ONSHOW事件的代码,以免造成
死循环;
功能可以实现,只是效果惨点!不知那位仁兄有更好的办法?
 
对呀,我也知道用Hide,再Show就可以﹐因为假如我用其它的一个窗体遮住它,再拉开,字
就消失了。所以我想应该在这期间的某个消息起作用,但是我不知道是哪一个。
 
一个FORM变成透明的实质性手段就是拦截CMEraseBkgnd消息。

PROCEDURE CMEraseBkgnd(var Message:TWMEraseBkgnd);Message WM_ERASEBKGND;

var Form1: TForm1;

implementation

{$R *.DFM}

PROCEDURE Tform1.CMEraseBkgnd(var Message:TWMEraseBkgnd);

BEGIN

brush.style:=bsClear;

Inherited;

END;

end.
 
不知为什么,我在C++builder下试了
repaint或refresh后textout(0,0," ");很快就生效了,不知是否你在onpaint事件你还有代码?
 
没有任何代码,另外,请答题者先看一下上面的,我看到同一段代码,上面都出现三次了。
 
用一个图片事先存储那个LABEL上的图像,然后再覆盖不知行不行?我对图片处理没接触过,
那位大侠认为可行,能否给点源码,我直接借鉴?
 
谢谢大家!
 
多人接受答案了。
 

Similar threads

回复
0
查看
816
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部