注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

BCB-DG's Blog

...

 
 
 

日志

 
 

delphi 状态栏多个进程条  

2010-11-04 14:11:11|  分类: Delphi |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
作者:maple

Delphi 中TStatusbar上通常不允许放其它组件。但是经常有需求要在右下角的状态栏上放置进程条以达到更好的显示效果,下面介绍如何将多个进程条组件添加到一个状态栏 TStatusbar上,以及如何适应状态栏的大小来调整进程条的大

Delphi 中TStatusbar上通常不允许放其它组件。但是经常有需求要在右下角的状态栏上放置进程条以达到更好的显示效果,下面介绍如何将多个进程条组件添加到一个状态栏 TStatusbar上,以及如何适应状态栏的大小来调整进程条的大小。

//状态栏可以自定义为多个panel,我们首先要取得放进程条在那个panel的尺寸大小
//以下函数需要引用 单元 commctrl
//第二个参数中 0是取得状态栏第一个panel 依次 1为取得第二个panel
Statusbar1.Perform(SB_GETRECT, 0, Integer(@R));
Statusbar1.Perform(SB_GETRECT, 2, Integer(@R2));
//我们设定在状态栏放两个进程条,分别放在第一个与第三个panel中,当然状态栏你要先设好为三个

//设置进程控件的parent为状态栏,即可将进程条放在状态栏上
progressbar1.Parent := Statusbar1;
progressbar2.Parent := Statusbar1;

//设置第一个进程条在状态栏第一个panel的位置
progressbar1.Top := r.Top; //set size of
progressbar1.Left := r.Left; //Progressbar to
progressbar1.Width := r.Right – r.Left; //fit with panel
progressbar1.Height := r.Bottom – r.Top;

//设置第二个进程条在状态栏第三个个panel的位置
progressbar2.Top := r2.Top; //set size of
progressbar2.Left := r2.Left; //Progressbar to
progressbar2.Width := r2.Right – r2.Left; //fit with panel
progressbar2.Height := r2.Bottom – r2.Top;
//以上我们设定进程条充满各自的panel,当然你可以设定进程条的top,left等属性来调整显示位置

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,commctrl, ComCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    ProgressBar1: TProgressBar;
    ProgressBar2: TProgressBar;
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormShow(Sender: TObject);
var
  r,r2: TRect;
begin
  //状态栏可以自定义为多个panel,我们首先要取得放进程条在那个panel的尺寸大小
  //以下函数需要引用 单元 commctrl
  //第二个参数中 0是取得状态栏第一个panel 依次 1为取得第二个panel
  Statusbar1.Perform(SB_GETRECT, 0, Integer(@R));
  Statusbar1.Perform(SB_GETRECT, 2, Integer(@R2));
  //我们设定在状态栏放两个进程条,分别放在第一个与第三个panel中,当然状态栏你要先设好为三个
 
  //设置进程控件的parent为状态栏,即可将进程条放在状态栏上
  progressbar1.Parent := Statusbar1;
  progressbar2.Parent := Statusbar1;
 
  //设置第一个进程条在状态栏第一个panel的位置
  progressbar1.Top    := r.Top;      //set size of
  progressbar1.Left   := r.Left;      //Progressbar to
  progressbar1.Width  := r.Right - r.Left; //fit with panel
  progressbar1.Height := r.Bottom - r.Top;
 
  //设置第二个进程条在状态栏第三个个panel的位置
  progressbar2.Top    := r2.Top;      //set size of
  progressbar2.Left   := r2.Left;      //Progressbar to
  progressbar2.Width  := r2.Right - r2.Left; //fit with panel
  progressbar2.Height := r2.Bottom - r2.Top;
  //以上我们设定进程条充满各自的panel,当然你可以设定进程条的top,left等属性来调整显示位置
  end;
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
 for i:=0 to 100 do
 begin
    Sleep(100);
    ProgressBar1.Position:=i;
    ProgressBar2.Position:=i;
    end;
end;
 
end.
  评论这张
 
阅读(1075)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017