最近我学做了一个web浏览器.但我不知道好何在状态条中显示进度条?
解决方案 »
- 急急急 请大家帮我解释一段代码 谢谢...
- Delphi 的 copy-on-write 技术是什么意思?
- 两个 Modem 通讯问题
- 在Delphi中动态创建控件并处理添加事件处理
- 本人使用TJREngine 来修复access ,出现"初始化字符串不符合ole db规定"的错误?
- 求救啊,关于image.caves 里面画好的线条如何复制到报表中的QEIMAGE,急,急急,急,。。
- 为什么我用的delphi的help-》delphi help没有索引啊
- DELPHI treeview背景色变透明问题 高手请进!谢谢
- 如何控制SPCOMM发送数据
- Delphi入门教材
- 郁闷了一上午 : 为什么我的table+datesource+dbgrid只能显示一列,而且没有记录
- 关于StatusBar的AutoHint问题
Panel: TStatusPanel; const Rect: TRect);
begin
progressbar1.Parent:=statusbar1;
progressbar1.BoundsRect:=rect
end;
ProgressMax: Integer);
begin
progressBar1.Max:=ProgressMax;
ProgressBar1.Position:=Progress;
end;
. . .
p r i v a t e
{ Private declarations }
P r o g r e s s B a r : T P r o g r e s s B a r ; // 进度条组件
ProgressBarRect:TRect; // 进度条组件的尺寸
p u b l i c
. . .加S t a t u s B a r 1组件的O n D r a w P a n e l事件的处理过程如下:
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
b e g i n
P r o g r e s s B a r R e c t : = R e c t ;
e n d ;添加B u t t o n 1组件的O n C l i c k事件的处理过程如下:
procedure TForm1.Button1Click(Sender: TO b j e c t ) ;
v a r
i , S t e p C o u n t : i n t e g e r ;
b e g i n
P r o g r e s s B a r : = T P r o g r e s s B a r. C r e a t e ( F o r m 1 ) ;
StepCount:=5000; // 进度条的最大步长
with ProgressBar do
b e g i n
/ /设定进度条的位置、宽度和高度
To p : = P r o g r e s s B a r R e c t . To p ;
L e f t : = P r o g r e s s B a r R e c t . L e f t ;
Wi d t h : = P r o g r e s s B a r R e c t . R i g h t - P r o g r e s s B a r R e c t . L e f t ;
H e i g h t : = P r o g r e s s B a r R e c t . B o t t o m - P r o g r e s s B a r R e c t . Top;
Vi s i b l e : = True; // 显示进度条
t r y
Parent := StatusBar1; // 进度条的父级Min := 0; // 最小值
Max := StepCount; // 最大值
Step := 1; // 步长
for i := 1 to StepCount do Stepit; // 累加进度条
M e s s a g e D l g ( '已经成功地保存了文件。', mtInformation, [mbOK],0);
f i n a l l y
Free; / /释放进度条的资源
e n d ;
e n d ;
e n d ;
[email protected]
谢谢
[email protected]
谢谢
只是增加Include(TStatusBar.ControlStyle, [csAcceptsControls])
然后就可以在StatusBar上放任何东西了.
2.在窗体中添加一个状态栏组件StatusBar1,一个Button组件Button1。在状态栏编辑器中为状态栏添加两个显示面板,因为后面将要在第二个面板中显示进度条,所以将第二个面板的Style属性设置为psOwnerDraw。将Button1组件的Caption属性设置为“演示操作”。
3.在Unit1.pas文件的TForm1的类型定义中添加下面的变量定义:
......
private
{ Private declarations }
progressBar:TProgressBar;// 进度条组件
progressBarRect:TRect; // 进度条组件的尺寸
public
{ Public declarations }
......
4.在状态栏的OnDrawPanel事件的处理过程中,获取将Style属性设置为psOwnerDraw的面板的尺寸。添加StatusBar1组件的OnDrawPanel事件的处理过程如下:
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
// 进度条组件的尺寸设定为状态条中的第二个显示面板的尺寸,因为该面板的Style属性已被设置为
psOwnerDraw
progressBarRect:=Rect;
end;
5.在按下按钮Button1组件时将执行一个模拟计算过程的循环操作,同时动态地在StatusBar1的第二个面板中创建并显示ProgressBar组件,并将其父级设置为StatusBar1组件。添加Button1组件的OnClick事件的处理过程如下:
procedure TForm1.Button1Click(Sender: TObject);
var
// I为循环变量, StepCount为执行循环的总数目
I,StepCount : Integer;
begin
//动态创建进度条组件progressBar
progressBar:=TProgressBar.Create(Form1);
StepCount:=10000; // 循环的总数目
with progressBar do
begin
// 先确定进度条组件的尺寸和位置
Top:=ProgressBarRect.Top;
Left:=ProgressBarRect.Left;
Width:=ProgressBarRect.Right-ProgressBarRect.Left;
Height:=ProgressBarRect.Bottom-ProgressBarRect.Top;
Visible:=True; // 使进度条可见
try
Parent:=StatusBar1; // parent属性设置为状态栏组件
Min:=0;// 设定进度条的范围和步长
Max:=StepCount;
Step:=1;
for I:=1 to StepCount do
begin
Stepit;// 循环使进度显示条累加
end;
MessageDlg(′演示操作已经完成!′, mtInformation, [mbOK], 0);
finally
Free;// 最后释放进度条组件占用的资源
end;
end;
end;
通过这种方法我们就可以在状态条中动态地添加进度条,同样的原理还用于在状态栏中添加其他的组件,过程基本一致。
[email protected]
procedure TALBarCodePrint.BOKClick(Sender: TObject);
Var
i:integer;
begin
i:=0;
PBar.Min:=0;
PBar.Max:=TBarCode.RecordCount;
PBar.Position:=i;
TBarCode.First;
while not TBarCode.eof do
begin
......
......
i:=i+1;
PBar.Position:=i;
TBarCode.Next;
end;
end;
我真是孤陋寡闻啊,不知道比7有什么改进啊!!!!!
[email protected]
谢谢!!!