关于StatusBar(80分)

  • 主题发起人 主题发起人 DNChen
  • 开始时间 开始时间
D

DNChen

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题来自Danny Chen,

我看《Delphi 3程序员开发手册》
(由Delphi开发小组的人写的,很好,80多吧)
中写到所有从twincontrol继承下来的控件
(应该是这么说的吧,书借掉了)本身和一个窗体的性质一样,
可以直接往上放其他控件,比如Tpanel,还有tstatusbar。

记得当时我用tstatusbar试过,确实可以放一些其他控件到里面,
可是今天写程序时却发现放不进去了,请问这是怎么回事?
我要放的是一个简单的progressbar
 
当Align为alNone时可以放其他控件,
而为alBottom(缺省)时,不行.
 
看了一下TStatusBar的源代码, 在create方法中由于ControlStyle中没有
csAcceptsControls故不能接受其他控件;

一个WindowedControl必须将csAcceptsControls加入到它的ControlStyle中才能够
接受其他控件使用;

to dsp: 能否接受其他控件与Align无关
 
虽然与Align无关.但是可以通过该种方法变通一下,把TStatusBar放到后面,
就好像是放到它上面一样.
当然,按您说的也可以,继承一个控件,重载一下Create方法.
TMyStatusBar=class(TStatusBar);
...
public
...
constructor Create(AOwner: TComponent); override;
...

constructor TMyStatusBar.Create(AOwner: TComponent);
begin
Inherited;
ControlStyle := ControlStyle + [csAcceptsControls];
end;
只是需要做一个控件的说.
 
在TStatusBar的DrawPanel事件中加入以下代码:

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
ProgressBar1.Parent := StatusBar ;
ProgressBar1.left := Rect.Left ;
ProgressBar1.Top := Rect.Top ;
ProgressBar1.Width := Panel.Width ;
ProgressBar1.Height := Rect.Bottom - Rect.Top ;
end;
 
我记得该构件是用来创建windows风格的
状态条的,本身就是不让加入构件的。仅仅用
来分区显示消息、提示的。
如果你有兴趣,可编成windows95的任务
条。
 
绝对可以。我以前做过的!
 
我的看法与littlegrass一致,我写了一个例子,我妹给你
 
谢谢,daiji,给我mail: tocdn@126.com
 
maybe you should change the items of the options
I learn to do this from a Cd for delphi before.I
will tell you later.bye!
 
to dsp:
>虽然与Align无关.但是可以通过该种方法变通一下,把TStatusBar放到后面,就好像>是放到它上面一样.

It is OK for a windowed control not for nonwindowed component like SpeedButton, label...
 
运行是创建可以!
 
我试过了
当指定:ProgressBar.Parent := StatusBar ,ProgressBar就不可见?!@#$%
在DELPHI集成环境CREAT ProgressBar时指定到 StatusBar,结果还是
生成到 Form中,而StatusBar则可以生成到 Panel中,感觉StatusBar并不象
是容器?
Daiji,能发布一下你的例程吗?
 
我试过了
当指定:ProgressBar.Parent := StatusBar ,ProgressBar就不可见?!@#$%
在DELPHI集成环境CREAT ProgressBar时指定到 StatusBar,结果还是
生成到 Form中,而StatusBar则可以生成到 Panel中,感觉StatusBar并不象
是容器?
Daiji,能发布一下你的例程吗?
 
是动态创建!
p:=TProgressBar.create(self);
p.parent:=self;
p.visible:=true;
当然,改变owner也可以!
 
更方便的方法还是把 Statusbar 放置在 Panel 上,
把 Panel 的 Align 旗帜设置为 Bottom.
这样便可以在 Statusbar 上放置其他控件了.
只是浪费了一个 Panel.
 
会长的话是对的
 
to yysun:
问题应该可以结束了吧?
 
OK,Thanx, 很不好意思,浪费了很多时间
 
用1st-class不就完了。
 
后退
顶部