如何把进度条放入状态栏里?

解决方案 »

  1.   

    (转贴)状态栏允许放入其他控件需要扩展一下statusbar,加一个属性就行.//扩展StatusBar//加入特性:允许在状态条上加入任意控件typeTMStatusBar=Class(TStatusBar)privateprotectedpublicconstructor Create(AOwner: TComponent); override;publishedend;//TMStatusBar 事件扩展constructor TMStatusBar.Create(AOwner: TComponent);begininherited Create(AOwner);ControlStyle:= ControlStyle + [csAcceptsControls];end;
     
      

  2.   

    设置statusbar1.panels[0]的style属性psOwnerDraw,把进度条放入状态栏
      

  3.   

    object StatusBar1: TStatusBar
      Left = 0
      Top = 427
      Width = 688
      Height = 19
      Panels = <>
      object ProgressBar1: TProgressBar
        Left = 2
        Top = 3
        Width = 150
        Height = 15
        TabOrder = 0
      end
    end把上面的代码粘贴到你的窗体上看看~~
      

  4.   

    把progressbar的parent设为tstatusbar,再调整位置即可。
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, Menus;type
      TForm1 = class(TForm)
        status: TStatusBar;
        MainMenu1: TMainMenu;
        file11: TMenuItem;
        Exit1: TMenuItem;
        InsertProcressbar11: TMenuItem;
        N11: TMenuItem;
        procedure statusDrawPanel(StatusBar: TStatusBar;
          Panel: TStatusPanel; const Rect: TRect);
        procedure Exit1Click(Sender: TObject);
        procedure InsertProcressbar11Click(Sender: TObject);
      private
        { Private declarations }
        colorindex:integer;
        BookOpen: Boolean;
        ssbmp: TBitmap;
        Progress:TProgressBar;
        StatusDrawRect:TRect; //记录要插入状态条特技的坐标范围
      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.Exit1Click(Sender: TObject);
    begin
      close;
    end;procedure TForm1.InsertProcressbar11Click(Sender: TObject);
    Var
      i,count: integer;
      StaPanleWidth:integer;
    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; //该进程条的拥有者为状态条
          Min := 0;
          Max := Count; //进程条的最大值与最小值
          step := 1;
          for i:=1 to Count do
            Stepit;   //累加进度条
         finally
           free;
         end; //with
         status.Panels.Items[2].Width := StaPanleWidth; //恢复状态条宽度
      end;
    end;end.