在状态栏中插入类似进度条的可视控件
首先,在Form中放置一個狀態(tài)條控件Status。調節(jié)Status.Panels,在其中插入3個狀態(tài)條嵌板。第二個嵌板的參數(shù)Style設置成psOwnerDraw。這一點很重要,如果沒有這樣做,將永遠無法顯示文字以外的東西。在Form1的Private部分聲明一個TRect類型的變量:StatusDrawRect:TRect;然后在狀態(tài)條的OnDrawPanel事件中插入一行:StatusDrawRect:=rect;以記錄參數(shù)Style設置成psOwnerDraw的嵌板的坐標。
??? 第二步,在Form的Private中聲明一個TProgressbar類型的成員變量Progress。然后在一個菜單的消息響應過程中調用Create方法把它建立起來,再設定狀態(tài)條為該進度條的父窗口,進而設定進度條的一些必要參數(shù),例如:最大值、最小值、原點坐標、高度和寬度等。
程序清單:
unit Unit1;
interface
uses
??? Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
??? Dialogs, ComCtrls, Menus;
type
??? TForm1 = class(TForm)
????? Status: TStatusBar;
????? MainMenu1: TMainMenu;
????? N1: TMenuItem;
????? Create: TMenuItem;
????? Exit: TMenuItem;
????? procedure StatusDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;
????? const Rect: TRect);
????? procedure ExitClick(Sender: TObject);
????? procedure CreateClick(Sender: TObject);
??? private
????? StatusDrawRect:TRect;//記錄要插入狀態(tài)條特技的坐標范圍
????? Progress:TProgressbar;
??? public
????? { Public declarations }
? end;
var
??? Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.StatusDrawPanel(StatusBar: TStatusBar;
??? Panel: TStatusPanel; const Rect: TRect);
begin
??? StatusDrawRect:=rect;//記錄要插入狀態(tài)條特技的坐標范圍
end;
procedure TForm1.ExitClick(Sender: TObject);
begin
??? Form1.Close;
end;
procedure TForm1.CreateClick(Sender: TObject);
var
??? i,count:integer;
??? staPanleWidth:Integer;
begin
??? progress:=TProgressbar.Create(form1);
??? count:=3000;//進度條的最大值
??? staPanleWidth:=status.Panels.Items[1].Width;
????//由于進度條很寬,所以需要改變狀態(tài)條嵌板的寬度,這里先保存它的寬度。
??? status.Panels.Items[1].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;//該進度條的擁有者為狀態(tài)條status
?????????? Min:=0;Max:=Count;//進度條的最大值和最小值
?????????? Step:=1;//設定進度條的步長
?????????? for i:=1 to Count do StepIt;
?????????? ShowMessage('現(xiàn)在,進程條將要從內存中被釋放');
??????? finally
?????????? Free;//釋放進度條
??????? end;//try
??? end;//with
??? Status.Panels.Items[1].Width:=staPanleWidth;//恢復狀態(tài)條嵌板的寬度
end;//begin
end.
類似的還可插入其他可視控件,如按鈕、位圖和動畫控件等等。
總結
以上是生活随笔為你收集整理的在状态栏中插入类似进度条的可视控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用WebBrowser控件获取网页源码
- 下一篇: 针对C++最主要的优势就是没有指针