首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 實作狀態列進度條:讓使用者即時掌握任務進度

     編輯:Delphi

經常上網的朋友一定注意到,瀏覽器底部的狀態列在載入網頁時會顯示一個動態進度條,隨著資料下載逐格前進,直觀提示使用者目前進度。這項技術不僅廣泛應用於瀏覽器,像熱門的 BT 下載軟體也大量採用。對於開發網路軟體的程式設計師來說,掌握在狀態列嵌入進度條的技巧是相當實用的基本功。

狀態列組件配置示意圖

建立基礎介面:狀態列與面板設定

首先啟動 Delphi,從「Win32」頁面拖曳 StatusBar(狀態列) 組件到表單上。預設情況下,狀態列會自動停駐在表單底部(Align 屬性為 alBottom),並包含一個面板。為了示範方便,我們再新增一個面板:

  1. 雙擊狀態列組件開啟「面板編輯器」。
  2. 右鍵選擇「Add」新增一個面板。
  3. 選取第一個面板,在「物件檢視器」中將 Text 屬性設為 Progress:。
  4. 關閉編輯器。

核心步驟:將進度條嵌入狀態列面板

接著從工具箱拖曳 ProgressBar(進度條) 到表單上。此時進度條位於狀態列上方,而非內部。要將它真正放入面板並能正常運作,關鍵在於以下兩步:

進度條初始位置示意圖

  1. 將 ProgressBar 的 Parent 屬性設為 StatusBar。
  2. 將 StatusBar 第二個面板的 Style 屬性改為 psOwnerDraw。這是關鍵:預設的 psText 僅能顯示文字,改為 psOwnerDraw 後,面板才能在 OnDrawPanel 事件中繪製其他組件。

程式碼實作

1. FormCreate 事件:初始化設定

procedure TForm1.FormCreate(Sender: TObject);
var
  ProgressBarStyle: Integer;
begin
  // 將狀態列第二個面板設為自繪模式
  StatusBar1.Panels[1].Style := psOwnerDraw;
  // 將進度條放入狀態列
  ProgressBar1.Parent := StatusBar1;
  // 移除進度條邊框,使其與狀態列融為一體
  ProgressBarStyle := GetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE);
  ProgressBarStyle := ProgressBarStyle - WS_EX_STATICEDGE;
  SetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE, ProgressBarStyle);
end;

2. OnDrawPanel 事件:精確定位進度條

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; 
  Panel: TStatusPanel; const Rect: TRect);
begin
  // Panels[1] 為第二個面板(索引從 0 開始)
  if Panel = StatusBar.Panels[1] then
    with ProgressBar1 do begin
      Top := Rect.Top;
      Left := Rect.Left;
      Width := Rect.Right - Rect.Left - 15; // 預留邊距
      Height := Rect.Bottom - Rect.Top;
    end;
end;

完整範例:動態演示進度條

在表單上放置一個 Button 與 Memo 組件(如圖所示),撰寫按鈕點擊事件:

完整範例介面配置

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  ProgressBar1.Position := 0;
  ProgressBar1.Max := 100;
  for i := 0 to 100 do begin
    ProgressBar1.Position := i;
    Sleep(25); // 模擬耗時操作
  end;
end;

按下 F9 執行程式,點擊按鈕即可看到進度條在狀態列中平滑運行。這項技術同樣適用於檔案下載、資料處理等長時間操作的進度提示,顯著提升使用者體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved