Delphi中如何实现如图所示的进度条效果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi中如何实现如图所示的进度条效果相关的知识,希望对你有一定的参考价值。
说的详细点。先谢谢各位了。不要让我的分白给啊
我是希望用label和进度条两个组件来实现的,不想装那么多组件
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;
通过这种方法我们就可以在状态条中动态地添加进度条,同样的原理还用于在状态栏中添加其他的组件,过程基本一致。 参考技术A
实现这个效果的进度条是 raize控件里的
属于display标签页下 RzProgressBar;
只要控制 该控件的 Percent 就ok
如图。
-------------------------
你需要做的~下载一个razie控件~
安装上~找到这个RzProgressBar,脱两个在界面上~
具体控制都是通过代码控制。
颜色什么的都在属性里有。
------------------------
over,希望对你有帮助
参考技术B 放2个label到界面上,label2显示标题,label1显示颜色。procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
const
WIDTH1=100;//这时进度条的宽。随便设。
begin
self.Label2.Caption:='0%'; //标题初始化,显示0%
self.Label2.AutoSize:=false;
self.Label2.Alignment:=taCenter;
self.Label2.Width:=WIDTH1;
self.Label1.Left:=self.Label2.Left; //把两个label对齐
self.Label1.Top:=self.Label2.Top;
self.Label1.Color:=clLime; //进度条颜色
self.Label1.AutoSize:=false;
self.Label1.Caption:=''; //label1不显示标题
self.Label1.Transparent:=false; //透明要关闭
for I := 0 to 100 do //进度分100份显示
begin
self.Label1.Width:=i*WIDTH1 div 100;//更改label的宽,模拟进度条。没有使用TProgressBar组件。
self.Label2.Caption:=inttostr(i)+'%';
sleep(50); //延时,根据需要取舍
application.ProcessMessages; //及时处理消息
end;
end;本回答被提问者采纳 参考技术C
不需要那么麻烦,原生控件即可。
Samples下面,TGauge控件,完美实现。
属性设置:
BorderStyle: bsNone
ForeColor: clLime
Height: 16
进度:Progress
VB如何实现进度条
如图显示,运行窗口form3的时候,进度条开始运行进度,当运行到百分之20的时候在标签1显示文字“123”然后运行到百分之50的时候,在标签1显示“456”进度到百分之百的时候,显示为“789”
VB实现进度条的方法只需要5个步骤就可以。
1.首先,编写一个程序框架,如下所示。
2.然后您可以在这里输入各种语句,如下所示。
3.然后找到两个语句块的中间部分,如下图所示。
4.输入语句[Exitsub],如下所示。
5.最后,您可以运行测试并解决实现进度条的问题,如下所示。
注意事项:
VB背后的思想是让程序员(新手和专家)都能轻松使用它。VB使用的GUI系统可以很容易地构建应用程序,但是可以开发相当复杂的程序。
VB的程序是基于表单的可视化组件安排的联合,并添加代码来指定组件的属性和方法。因为组件中已经定义了一些默认属性和方法,所以程序员不需要编写太多代码就可以完成一个简单的程序。
VB程序可以包含一个或多个表单,或者一个主表单和多个子表单,类似于操作系统。功能很少的对话框窗口(例如没有最大化和最小化按钮的表单)可以用来提供弹出功能。
VB使用参数计算方法进行垃圾回收,它包含大量的对象,提供了基本的面向对象支持。随着越来越多的组件可用,程序员可以选择需要哪些扩展库。
VB使大量的外部控件有了自己的生存空间。VB中有许多第三方控件。VB还提供了创建、使用和重用这些控件的方法,但是由于语言问题,从一个应用程序创建另一个控件并不容易。
参考技术A1、首先,写上一个程序框架。
2、然后就可以在这里输入各种语句。
3、然后找到两个语句块的中间部分。
4、输入语句 【Exit sub】。
5、最后就可以去运行测试了。
注意事项:
VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建Active X控件,用于高效生成类型安全和面向对象的应用程序 [2] 。
参考技术B 先添加一个控件,然后复制以下代码,简单的进度条完成:--------------------------------------------------------------
Dim Progress As Integer
ProgressBar1.Minimum = Min
ProgressBar1.Maximum = Max
For i As Integer = Min To Max
'执行计算.......
Progress = i \ Max '计算进度
ProgressBar1.Value = Progress '显示进度
My.Application.DoEvents() '使用Doevents防止窗体假死使进度条看不到,但是会严重降低运行速度
Next 参考技术C 添加进度条控件方法:
工程-部件-Microsoft WIndows Common Controls 5.0
添加后,选择左侧的ProgressBar控件,添加到窗体,添加Timer控件,Interval为1000,添加Label1。
代码部分:
Private Sub Timer1_Timer()
If ProgressBar1.Value < 100 Then
ProgressBar1.Value = ProgressBar1.Value + 10
End If
If ProgressBar1.Value = 20 Then
Label1.Caption = "123"
Else
If ProgressBar1.Value = 50 Then
Label1.Caption = "456"
Else
If ProgressBar1.Value = 100 Then
Label1.Caption = "789"
End If
End If
End If
End Sub追问
恩恩 可以啦 ,,问个题外话 那个时钟怎么调呢? 1000代表多长时间??
追答1000代表1秒
本回答被提问者采纳以上是关于Delphi中如何实现如图所示的进度条效果的主要内容,如果未能解决你的问题,请参考以下文章