一个在改变窗体大小时出现的问题,大家快来看看(是不是delphi的Bug)。(100分)

  • 主题发起人 主题发起人 jyh_jack
  • 开始时间 开始时间
J

jyh_jack

Unregistered / Unconfirmed
GUEST, unregistred user!
一个空白form(form1) + 一个状态栏(statusbar1) + 一个按钮(button1)
设置statusbar1.panels[0].text:='asdfasdf',对齐模式为右对齐。
在formresize事件中加如下一句代码:
button1.left:=form1.width-20-button1.width;
然后在通过鼠标只改变窗体width时,状态栏中的'asdfasdf'会被遮住,请高人指点一二。
 
你的 Button1 把它遮住了呀
 
假如只有一个StatusBar1.Panels[0],不会出现你所说的情况。
有多个的情况下:StatusBar1.Panels[0], StatusBar1.Panels[1], StatusBar1.Panels[2], StatusBar1.Panels[3]...............
有可能状态栏中的字符会被遮住。
你可以在formresize中计算StatusBar1.Panels的Width,使每个Panels的宽度是你想要的大小。
如下,使Panels[4].Width固定,即需要Panels[3].Width能动态改变就可以了,其他计算类似:
procedure TForm1.FormResize(Sender: TObject);
begin
With StatusBar1 do
Panels[3].Width:=Width-Panels[0].Width-Panels[1].Width-Panels[2].Width-Panels[4].Width;
end;
 
确实有这种情况,不过去掉
button1.left:=form1.width-20-button1.width;
就没事了。原因不知道。
 
拿 button1.left:=form1.width-20-button1.width;
来干什么?
保持按钮于窗口的右边距不变?何必呢?
直接设置 button1.Anchors := [akTop, akRight];
不就可以了:)
 
I guess it is a bug of Delphi. If you want to do
so, I suggest you to use
Anthors property, set aKRight to true;
 
SupermanTm,不是被遮住了。
jrq, 我试试的先。
beta, 那种方法治表不治本呢。
 
jrq,
>>假如只有一个StatusBar1.Panels[0],不会出现你所说的情况。
我又再次确认了一下,即便是只有一个panel也是会出现的。
我所指的并不是panels[0]的内容因为form的变小而被panels[1]的动态设置所遮住的。
再详说一下的提出的问题::
一个form1、一个statusbar1、一个button1。
statusbar1中只有一个panels[0]。
statusbar1.panels[0].alignment=taRightJustify;
//设置为右对齐。
statusbar1.panels[0].text:='asdfsadfasdfasdf';
//**************
procedure TForm1.FormResize(Sender: TObject);
begin
button1.Left:=form1.width-100;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
form1.width:=form1.width-100;
end;

当触发button1的onclick事件后,问题出现了——panels[0]中的文字被遮住了。
 
为什么没有人点我啦。。。
请大家多多帮助小弟啊。
 

Similar threads

后退
顶部