下载本文示例代码
经常上网的朋友可能早就已经发现,在一些浏览器的底部会在某些情况下动态显示一个进程条,比如在显示网页的时候,如果时间比较长,就会出现一个一格一格前进的,用以提醒用户已经有多少数据被下传下来。它不仅仅出现在浏览器中,还经常被用于下载软件中,比如现在最热门的BT下载软件,都使用了这一技术。技术的改进源于工作的需要,现在编写网络软件那么流行,上面的小技巧应该是每个像我们这样的编程爱好者都需要的吧。
打开DELPHI,选择WIN32面板上的状态栏(StatusBar)组件,放到窗体(Form)上(图1),默认情况下状态栏组件将自动被摆放到窗体的底部(即Align属性被设为alBottom),同时该状态栏上初始为一个面板(Panel),为了使下面的表述清楚,我们来给这个状态栏加一个面板,操作步骤如下: 1.双击状态栏组件打开面板编辑器(Panels editor)。 2.右击面板编辑器然后选择“Add”,添加一个面板。 3.选择第一个面板,在对象检查器(Object Inspector)中选中Text属性,写入“Progress:”。 4.关闭面板编辑器。 仅仅有一个状态栏当然不行,今天的主角应该是Progress(进程条)才对,现在我们把进程条摆放到窗体上来。(图2)
看到上面的图之后,有的急性子读者可能要问,怎么那个进程在状态条的上面,而不是在它的内部,就是在面板上呢?这个不是我要的结果嘛!别急,别急,下面的才是今天的压轴好戏,把进程条放到状态栏的面板上,还能让它动起来。操作步骤如下: 1.把ProgressBar的Parent属性设为StatusBar。 2.把StatusBar的第二块面板的Style属性改成“psOwnerDraw”,这里是解决问题的关键,当Style被设为psOwnerDraw之后,面板上就可以被放制其它的组件,实现的方法是在OnDrawPanel事件中编写代码,默认情况是被设为psText,这样就只能显示文本,就像第一块面板那样。 上面的步骤在实际编写代码时是这样实现的:
1.//首先在FormCreate事件中编写代码procedure TForm1.FormCreate(Sender: TObject);var ProgressBarStyle: integer;begin //将状态栏的第二块面板设为的自绘(即psOwnerDraw) StatusBar1.Panels[1].Style := psOwnerDraw; //将进程条放入状态栏 ProgressBar1.Parent := StatusBar1; //去除状态栏的边框,这样就与状态栏溶为一体了 ProgressBarStyle := GetWindowLong(ProgressBar1.Handle,GWL_EXSTYLE); ProgressBarStyle := ProgressBarStyle - WS_EX_STATICEDGE; SetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE, ProgressBarStyle);end;2.//编写状态栏的自绘代码procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;Panel: TStatusPanel;const Rect: TRect);begin //注意这里的Panels[1]指的就是第2块面板,因为默认是从0开始的 if Panel = StatusBar.Panels[1] then with ProgressBar1 do begin Top := Rect.Top; Left := Rect.Left; Width := Rect.Right - Rect.Left - 15; Height := Rect.Bottom - Rect.Top; end; end; 关键问题解决之后,我们来一个小例子,这样就可以有一个全局的印象了,控件的摆放如(图3)所示,编写代码如下:
procedure TForm1.Button1Click(Sender: TObject);vari : integer;beginProgressBar1.Position := 0;ProgressBar1.Max := 100;for i := 0 to 100 dobeginProgressBar1.Position := i;Sleep(25);end;end; 运行一下这个小程序,点击一下按钮,看到了吧,进程条在状态栏中动起来了。
软件频道精品推荐
更多精彩点击体验>>
经常上网的朋友可能早就已经发现,在一些浏览器的底部会在某些情况下动态显示一个进程条,比如在显示网页的时候,如果时间比较长,就会出现一个一格一格前进的,用以提醒用户已经有多少数据被下传下来。它不仅仅出现在浏览器中,还经常被用于下载软件中,比如现在最热门的BT下载软件,都使用了这一技术。技术的改进源于工作的需要,现在编写网络软件那么流行,上面的小技巧应该是每个像我们这样的编程爱好者都需要的吧。
打开DELPHI,选择WIN32面板上的状态栏(StatusBar)组件,放到窗体(Form)上(图1),默认情况下状态栏组件将自动被摆放到窗体的底部(即Align属性被设为alBottom),同时该状态栏上初始为一个面板(Panel),为了使下面的表述清楚,我们来给这个状态栏加一个面板,操作步骤如下: 1.双击状态栏组件打开面板编辑器(Panels editor)。 2.右击面板编辑器然后选择“Add”,添加一个面板。 3.选择第一个面板,在对象检查器(Object Inspector)中选中Text属性,写入“Progress:”。 4.关闭面板编辑器。 仅仅有一个状态栏当然不行,今天的主角应该是Progress(进程条)才对,现在我们把进程条摆放到窗体上来。(图2)
看到上面的图之后,有的急性子读者可能要问,怎么那个进程在状态条的上面,而不是在它的内部,就是在面板上呢?这个不是我要的结果嘛!别急,别急,下面的才是今天的压轴好戏,把进程条放到状态栏的面板上,还能让它动起来。操作步骤如下: 1.把ProgressBar的Parent属性设为StatusBar。 2.把StatusBar的第二块面板的Style属性改成“psOwnerDraw”,这里是解决问题的关键,当Style被设为psOwnerDraw之后,面板上就可以被放制其它的组件,实现的方法是在OnDrawPanel事件中编写代码,默认情况是被设为psText,这样就只能显示文本,就像第一块面板那样。 上面的步骤在实际编写代码时是这样实现的:
1.//首先在FormCreate事件中编写代码procedure TForm1.FormCreate(Sender: TObject);var ProgressBarStyle: integer;begin //将状态栏的第二块面板设为的自绘(即psOwnerDraw) StatusBar1.Panels[1].Style := psOwnerDraw; //将进程条放入状态栏 ProgressBar1.Parent := StatusBar1; //去除状态栏的边框,这样就与状态栏溶为一体了 ProgressBarStyle := GetWindowLong(ProgressBar1.Handle,GWL_EXSTYLE); ProgressBarStyle := ProgressBarStyle - WS_EX_STATICEDGE; SetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE, ProgressBarStyle);end;2.//编写状态栏的自绘代码procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;Panel: TStatusPanel;const Rect: TRect);begin //注意这里的Panels[1]指的就是第2块面板,因为默认是从0开始的 if Panel = StatusBar.Panels[1] then with ProgressBar1 do begin Top := Rect.Top; Left := Rect.Left; Width := Rect.Right - Rect.Left - 15; Height := Rect.Bottom - Rect.Top; end; end; 关键问题解决之后,我们来一个小例子,这样就可以有一个全局的印象了,控件的摆放如(图3)所示,编写代码如下:
procedure TForm1.Button1Click(Sender: TObject);vari : integer;beginProgressBar1.Position := 0;ProgressBar1.Max := 100;for i := 0 to 100 dobeginProgressBar1.Position := i;Sleep(25);end;end; 运行一下这个小程序,点击一下按钮,看到了吧,进程条在状态栏中动起来了。
软件频道精品推荐
更多精彩点击体验>>
下载本文示例代码
用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条用DELPHI在状态栏中显示进程条
阅读(150) | 评论(0) | 转发(0) |