progressbar1.parent:=statusbar1;
progressbar1.min:=0;
progressbar1.max:=100;
progressbar1.Position:=20;
progressbar1.left:=0;
progressbar1.top:=10;
在FROM上放一个PROGRESSBAR、STATUSBAR1

解决方案 »

  1.   

    我这有一篇我收藏的帖子:
    --------------------------------------
    首先,在FROM中放置一个状态条控件Status。调节Status.Panels,在其中插 
    入3个状态条嵌板。把第二个嵌板的参数Style设置成psOwnerDraw.(这一点很重要 
    ,如果没有这样做,将永远无法显示文字以外的东西.)然后在状态条的OnDrawPane 
    l事件中插入一行 StatusDrawRect:=rect; 
    以记录参数Style设置成psOwnerDraw的嵌板的坐标。   第二步,在FROM的Private中申明一个TProgressBar类型的变量Progress.然后 
    在一个菜单的消息响应过程中调用Create方法把它建立起来,再设定状态条为该进 
    程条的父窗口,进而设定进程条的一些必要参数.例如:最大值、最小值、原点坐标 
    、高度和宽度等。   类似地,你还可以在状态条中插入其他可视控件,如:按键、位图和动画控件 
    等等. 以下是范例程序: type 
    TForm1 = class(TForm)//定义一个窗口类 
    Status: TStatusBar; 
    MainMenu1: TMainMenu; 
    file1: TMenuItem; 
    insertprocressbar1: TMenuItem; 
    N1: TMenuItem; 
    exit1: TMenuItem; procedure StatusDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;c 
    onst Rect: TRect); 
    procedure FormDestroy(Sender: TObject); 
    procedure insertprocressbar1Click(Sender: TObject); private 
    colorindex : integer; BookOpen:Boolean; 
    ssbmp:Tbitmap; 
    progress:TProgressbar; 
    StatusDrawRect:TRect; //记录要插入状态条特技的坐标范围 public 
    public 
    { Public declarations } 
    end; var 
    Form1: TForm1; implementation {$R *.DFM} procedure TForm1.StatusDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); 
    begin 
    StatusDrawRect:=rect; //记录要实现状态条特技的坐标范围 
    end; procedure TForm1.insertprocressbar1Click(Sender: TObject); 
    var 
    i,count:integer; 
    staPanleWidth:integer; 
    begin 
    begin 
    progress:=TProgressbar.create(form1); 
    count:=3000; //进程条的最大值 
    staPanleWidth:=status.Panels.Items[2].width; //由于进程条的很宽,所以 
    需要 改变状态条嵌板的宽度,这里先保存它的宽度。 
    status.Panels.Items[2].width:=150; //改变宽度 
    status.repaint; 
    with progress do 
    begin 
    top:=StatusDrawRect.top; 
    left:=StatusDrawRect.left; 
    width:=StatusDrawRect.right-StatusDrawRect.left; 
    height:=StatusDrawRect.bottom-StatusDrawRect.top;//设定进程条的宽 
    和高 
    visible:=true; 
    try 
    Parent := status; //该进程条的拥有者为状态条status 
    Min := 0; Max := Count; //进程条的最大和最小值 
    Step:= 1; //进程条的步长 
    for i := 1 to Count do 
    Stepit; //累加进程条 
    ShowMessage('现在,进程条将要从内存中被释放'); 
    finally 
    Free; //释放进程条 
    end; //try 
    end; //with 
    status.Panels.Items[2].width:=staPanleWidth; //恢复状态条嵌板的宽度 end; //begin end. 
      

  2.   

    谢谢jiaorg(jiaorg)和soundbug(独孤求败),给jiaorg60分是因为第一个解决我的特定问题,给soundbug40分是因为解决了一个通用问题。再次感谢二位。
      

  3.   

    1、在窗体上放 progressbar 、statusbar
    2、设置 progressbar.panels[index].style := psOwnerDraw;
    3、在 progressbar 的 OnDrawPanel 事件里写:
       procedure TViewForm.MainStbDrawPanel(StatusBar: TStatusBar;
                          Panel: TStatusPanel; const Rect: TRect);
       begin
         if Panel.Index=index then
         begin
            ProgressBar.Parent := StatusBar;
            ProgressBar.Left   := Rect.Left - 1;
            ProgressBar.Top    := Rect.Top  - 1;
            ProgressBar.Height := Rect.Bottom - Rect.Top  + 2;
            ProgressBar.Width  := Rect.Right  - Rect.Left + 2;
         end;
       end