明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

狀態(tài)條插入可視控件

[摘要]首先,在FROM中放置一個狀態(tài)條控件Status。調(diào)節(jié)Status.Panels,在其中插入3個狀態(tài)條嵌板。把第二個嵌板的參數(shù)Style設(shè)置成psOwnerDraw。這一點很重要,如果沒有這樣做,將永遠無法顯示文字以外的東西。然后在狀態(tài)條的OnDrawPanel事件中插入一行StatusDrawR...
首先,在FROM中放置一個狀態(tài)條控件Status。調(diào)節(jié)Status.Panels,在其中插入3個狀態(tài)條嵌板。把第二個嵌板的參數(shù)Style設(shè)置成psOwnerDraw。這一點很重要,如果沒有這樣做,將永遠無法顯示文字以外的東西。然后在狀態(tài)條的OnDrawPanel事件中插入一行StatusDrawRect:=rect;以記錄參數(shù)Style設(shè)置成psOwnerDraw的嵌板的坐標。
  第二步,在FROM的Private中申明一個TProgressBar類型的變量Progress。然后在一個菜單的消息響應(yīng)過程中調(diào)用Create方法把它建立起來,再設(shè)定狀態(tài)條為該進程條的父窗口,進而設(shè)定進程條的一些必要參數(shù)。例如:最大值、最小值、原點坐標、高度和寬度等。
  最后編譯一下該程序,你就會發(fā)現(xiàn)在狀態(tài)條中被插入了一個運動著的進程條。
  類似地,你還可以在狀態(tài)條中插入其他可視控件,如:按鍵、位圖和動畫控件等等。
以下是范例程序:
type
TForm1 = class(TForm)//定義一個窗口類
Status: TStatusBar;
MainMenu1: TMainMenu;
file1: TMenuItem;
insertprocressbar1: TMenuItem;
N1: TMenuItem;
exit1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure StatusDrawPanel(StatusBar: TStatusBar; Panel:
TStatusPanel;const Rect: TRect);
procedure FormDestroy(Sender: TObject);
procedure exit1Click(Sender: TObject);
procedure insertprocressbar1Click(Sender: TObject);
private
colorindex : integer; BookOpen:Boolean;
ssbmp:Tbitmap; progress:TProgressbar;
StatusDrawRect:TRect; //記錄要插入狀態(tài)條特技的坐標范圍
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
end;

procedure TForm1.StatusDrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
StatusDrawRect:=rect; //記錄要實現(xiàn)狀態(tài)條特技的坐標范圍
end;

procedure TForm1.exit1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.insertprocressbar1Click(Sender: TObject);
var i,count:integer;
staPanleWidth:integer;
begin
progress:=TProgressbar.create(form1);
count:=3000; //進程條的最大值
staPanleWidth:=status.Panels.Items[2].width;
//由于進程條的很寬,所以需要改變狀態(tài)條嵌板的寬度,這里先保存它的寬度。
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;
//設(shè)定進程條的寬度和高度
visible:=true;
try
Parent := status; //該進程條的擁有者為狀態(tài)條status
Min := 0; Max := Count; //進程條的最大和最小值
Step := 1; //進程條的步長
for i := 1 to Count do
Stepit; // 累加進程條
ShowMessage('現(xiàn)在,進程條將要從內(nèi)存中被釋放');
finally
Free; //釋放進程條
end; //try
end; //with
status.Panels.Items[2].width:=staPanleWidth; //恢復(fù)狀態(tài)條嵌板的寬度
end; //begin

end.