• 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API

对delphi还不熟悉,请教大家怎么在statusbar中创建进度条?

xp2239 2004-12-21 01:07:56
我想在statusbar中创建进度条,不知道该怎么实现?谢谢各位。最好有简单的例子代码
...全文
291 点赞 收藏 9
写回复
9 条回复
zeroxing 2004年12月21日
一楼的 Kevin_Lmx(繁华阅尽) 方法不错,当然要结合gxgyj(杰克.逊)所说的,把psOwnerDraw设置一下,否则DrawPanel事件死都不会发生。

修改dfm的方法虽然可以达到目的,但是非常规手段,建议不要使用,否则对后来的维护可能造成问题。

ailibuli(愛理不理) 的方法也不错,需要理解Message才可以。

总结完毕,楼主揭贴吧。呵呵。
回复 点赞
ailibuli 2004年12月21日
補助説明:在ProgressBar1上、設定二個StatusPanel。

type
TForm1 = class(TForm)
Button1: TButton;
ProgressBar1: TProgressBar;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private }
public
{ Public }
end;
回复 点赞
ailibuli 2004年12月21日
uses CommCtrl;

type THackControl = class(TControl);

procedure TForm1.FormCreate(Sender: TObject);
var
PanelRect: TRect;
begin
THackControl(ProgressBar1).SetParent(StatusBar1);
SendMessage(StatusBar1.Handle, SB_GETRECT, 1, Integer(@PanelRect));
with PanelRect do
ProgressBar1.SetBounds(Left, Top, Right-Left, Bottom-Top);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
with ProgressBar1 do
for i := 0 to 99 do
begin
Position := Position + 1;
Sleep(10);
end;
end;

説明:設定二個StatusPanel、把第二個做為进度条。
回复 点赞
jinjazz 2004年12月21日
应为statusbar的controlstyle不允许其作为容器,如果非要用的话只能继承下来一个新组建,比如

type
TMStatusBar=Class(TStatusBar)
private
protected
public
constructor Create(AOwner: TComponent); override;
published
end;

//TMStatusBar 事件扩展

constructor TMStatusBar.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle:= ControlStyle + [csAcceptsControls];
end;
回复 点赞
gxgyj 2004年12月21日
只有设置style属性为psOwnerDraw;
才能显示文字以外的东东.////切记!!!!
回复 点赞
gxgyj 2004年12月21日
在statusbar1上新建item
设置新的panels[0]的style属性为psownerdraw;
回复 点赞
jinjazz 2004年12月21日
修改dfm文件:
示例,新建一个form1,添加statusbar1,双击statusbar1添加两个statuspanel,第一个设宽度100,再添加一个prograssbar1,保存为unit1.pas
打开对应的unit1.dfm,看到如下结构
object StatusBar1: TStatusBar
Left = 0
Top = 434
Width = 688
Height = 19
Panels = <
item
Width = 100
end
item
Width = 50
end>
end
object ProgressBar1: TProgressBar
Left = 32
Top = 400
Width = 150
Height = 16
TabOrder = 1
end

将其改为
object StatusBar1: TStatusBar
Left = 0
Top = 434
Width = 688
Height = 19
Panels = <
item
Width = 100
end
item
Width = 50
end>
object ProgressBar1: TProgressBar
Left = 0
Top = 3
Width = 100
Height = 16
TabOrder = 0
end
end

保存,关闭之后再打开刚刚的工程,就可以了

回复 点赞
firebing 2004年12月21日
楼上的方法似乎是不行的吧
回复 点赞
Kevin_Lmx 2004年12月21日
procedure TForm1.statusbar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
Gauge1.Parent:=StatusBar1;
Gauge1.Left:=Rect.Left;
Gauge1.Top:=Rect.Top;
Gauge1.Width:=Panel.Width;
Gauge1.Height:=Rect.Bottom-Rect.Top;
end;
Gauge1 为进度条,在statusbar1的DrawPanel事件中写
回复 点赞
发动态
发帖子
Delphi
创建于2007-08-02

1465

社区成员

26.2w+

社区内容

Delphi 开发及应用
社区公告
暂无公告