狀態(tài)條插入可視控件
發(fā)表時(shí)間:2024-06-22 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]首先,在FROM中放置一個(gè)狀態(tài)條控件Status。調(diào)節(jié)Status.Panels,在其中插入3個(gè)狀態(tài)條嵌板。把第二個(gè)嵌板的參數(shù)Style設(shè)置成psOwnerDraw。這一點(diǎn)很重要,如果沒有這樣做,將永遠(yuǎn)無法顯示文字以外的東西。然后在狀態(tài)條的OnDrawPanel事件中插入一行StatusDrawR...
首先,在FROM中放置一個(gè)狀態(tài)條控件Status。調(diào)節(jié)Status.Panels,在其中插入3個(gè)狀態(tài)條嵌板。把第二個(gè)嵌板的參數(shù)Style設(shè)置成psOwnerDraw。這一點(diǎn)很重要,如果沒有這樣做,將永遠(yuǎn)無法顯示文字以外的東西。然后在狀態(tài)條的OnDrawPanel事件中插入一行StatusDrawRect:=rect;以記錄參數(shù)Style設(shè)置成psOwnerDraw的嵌板的坐標(biāo)。
第二步,在FROM的Private中申明一個(gè)TProgressBar類型的變量Progress。然后在一個(gè)菜單的消息響應(yīng)過程中調(diào)用Create方法把它建立起來,再設(shè)定狀態(tài)條為該進(jìn)程條的父窗口,進(jìn)而設(shè)定進(jìn)程條的一些必要參數(shù)。例如:最大值、最小值、原點(diǎn)坐標(biāo)、高度和寬度等。
最后編譯一下該程序,你就會(huì)發(fā)現(xiàn)在狀態(tài)條中被插入了一個(gè)運(yùn)動(dòng)著的進(jìn)程條。
類似地,你還可以在狀態(tài)條中插入其他可視控件,如:按鍵、位圖和動(dòng)畫控件等等。
以下是范例程序:
type
TForm1 = class(TForm)//定義一個(gè)窗口類
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)條特技的坐標(biāo)范圍
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; //記錄要實(shí)現(xiàn)狀態(tài)條特技的坐標(biāo)范圍
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; //進(jìn)程條的最大值
staPanleWidth:=status.Panels.Items[2].width;
//由于進(jìn)程條的很寬,所以需要改變狀態(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è)定進(jìn)程條的寬度和高度
visible:=true;
try
Parent := status; //該進(jìn)程條的擁有者為狀態(tài)條status
Min := 0; Max := Count; //進(jìn)程條的最大和最小值
Step := 1; //進(jìn)程條的步長(zhǎng)
for i := 1 to Count do
Stepit; // 累加進(jìn)程條
ShowMessage('現(xiàn)在,進(jìn)程條將要從內(nèi)存中被釋放');
finally
Free; //釋放進(jìn)程條
end; //try
end; //with
status.Panels.Items[2].width:=staPanleWidth; //恢復(fù)狀態(tài)條嵌板的寬度
end; //begin
end.