放置Image之上的Label刷新不正常,无法显示。(50分)

  • 主题发起人 netCobra
  • 开始时间
N

netCobra

Unregistered / Unconfirmed
GUEST, unregistred user!
做Splash和Login合一的窗口,用一个Image控件,Align设为alClient占据整个窗口大小,在Image之上放了两个label和两个Edit,用于提示用户输入用户名和密码;另外还有两个按钮分别为“登录”和“取消”。

在运行时,发现所有的Label都无法显示,但是Edit和Button都可以显示,[red]很奇怪的是如果我切换到别的程序挡住该窗口,然后再切换回该窗口,两个Label就显示出来了,[/red]好像是窗口刷新有问题。

我在该Form的[red]OnCreate和OnShow事件中写如下脚本都不起作用[/red]:
ImageBackGround.SendToBack;
ImageBackGround.Repaint;
LabelUserID.BringToFront;
LabelUserID.Repaint;
LabelPWD.BringToFront;
LabelPWD.Repaint;

请问是怎么回事?
 
把 label 放在 panel 中,将 panel 设计成和 label 一样大小。
 

直接用panel代替label
 
up ,直接放一个PANEL
 
image和label的transparent属性设置为true,试试看
 
//直接用panel代替label
Panel无法设成透明的啊,那样子的话文字下面就会有一个框子了[:(]

//image和label的transparent属性设置为true,试试看
已经设了,没用。

很奇怪为什么用另一个窗口遮挡这个窗口后再移开,这两个Label就可以显示出来了[?]
 

触发了WM_Paint,用TextOut吧。呵呵
 
To影 子:请您说的详细一点,是要处理WM_PAINT消息吗?这方法肯定应该是可以的,不过我这个问题好像不用劳动这么复杂的东东吧?不过是两个控件的相互遮挡问题,在VCL中应该已经有自动处理吧?
 

奇怪,怎么我这里没有出现这种情况?
你是不是用了FillRect之类的方法填允了Image?
 
To影 子:没有,我只是放了个Image上去,然后把Align设成了alClient……

会不会和系统环境有关,我用的是WinXP,为了使BitButton之类的非标准控件也有XP效果,我加了一个XPManifest控件,会是因为这个吗?
 
我使用时很正常,属性设置后使用没发现这样的问题
 

应该是那个控件的问题了。
想想也是,如果标准控件存在这样的bug,borland又怎么会将它们放出来?
 
问题是我去掉这个控件后也有这个问题啊;-(。

同一段程序在Win2000下没有问题,Win98下没有试,估计是系统的问题了:-(。
 

不明白最后一句是什么意思。win2000下没问题?win98没有试,你用XP?
 
在你原来的 Image 和 Label之间再垫一个 Image
有几个 Label 就垫几个 Image
肯定能解决问题。以前我答复过类似的贴子。

主要问题是 Label 是非 TWincontrol
 
To影 子:不好意思,忘记说了,我用的的确是WinXP(家里LP要装的,我是想用Win2000的啊:)),在公司用的是Win2000。

To jsxjd:是否是在原来的 Image 上再放一个 Image,然后在新加的Image上再放Label控件?为什么 Label 不是 TWincontrol 就会造成这种现象呢?
 
To jsxjd:试过了,对于WinXP不管用:-(
 
那你只能试 TStaticText 能不能透明
另外你可以直接在 Image 上写文字

image1.Canvas.Brush.Style:=bsClear;
image1.Canvas.font.Color:=clREd;
image1.Canvas.TextOut(0,0,'AAAA');
 
To jsxjd:
我照你的方法去作,程序提示“Can only modify an image if it contains a bitmap”,难道这种方法只适用于Image的Glyph是BMP文件的情况吗?
 
我没试验过,不过您可以试试在创建这个Splash窗口之后,马上调用form的refresh方法
或update方法,我想应该可以的。[:)][:)]
 
顶部