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

善用 C++Builder OnIdle 事件即時監控剪貼簿狀態

     編輯:關於C++

前言:OnIdle 事件的實戰應用

在 C++Builder 應用程式開發中,OnIdle 事件是一個強大卻常被忽視的機制。當應用程式處於閒置狀態(無訊息需處理)時,會持續觸發此事件。本文示範如何利用 OnIdle 即時監控剪貼簿內容與編輯器狀態,動態啟用/停用選單項目與工具列按鈕,提升使用者體驗。

實作步驟

1. 表單標頭檔宣告

在 Form1.h 的 private 區段加入事件處理函數宣告:

void __fastcall OnIdle(TObject* Sender, bool& Done);

2. 事件處理邏輯實作

在 Form1.cpp 中撰寫具體邏輯:

void __fastcall TForm1::OnIdle(TObject* Sender, bool& Done)
{
    // 檢查 DBRichEdit1 是否有文字被選取
    bool TextSelected = DBRichEdit1->SelLength > 0;
    N17->Enabled = TextSelected; // 剪下
    N18->Enabled = TextSelected; // 複製
    N20->Enabled = TextSelected; // 清除

    // 檢查剪貼簿是否包含文字格式(需 #include <Clipbrd.hpp>)
    bool CBHasText = Clipboard()->HasFormat(CF_TEXT);
    N19->Enabled = CBHasText;    // 貼上

    // 檢查 RichEdit1 是否有內容
    bool HasText = RichEdit1->Lines->Count > 0;
    N21->Enabled = HasText;      // 全選

    // 檢查內容是否已修改
    bool HasChanged = RichEdit1->Modified;
    ToolButton2->Enabled = HasChanged; // 存檔
    ToolButton4->Enabled = HasChanged; // 另存新檔
}

3. 綁定事件

在 Form1 的 OnCreate 事件中註冊:

Application->OnIdle = OnIdle;

關鍵技術點解析

  • 即時回應:OnIdle 在訊息佇列為空時高頻觸發,能確保 UI 狀態與實際資料同步。
  • 剪貼簿檢查:使用 Clipboard()->HasFormat(CF_TEXT) 判斷是否有文字可貼上,需引入 Clipbrd.hpp。
  • 效能考量:邏輯應保持輕量,避免在 OnIdle 執行耗時運算導致介面卡頓。
  • Done 參數:若設為 true,應用程式將在下一次進入閒置前不再呼叫 OnIdle;通常保持 false 以持續監控。

應用場景延伸

此模式同樣適用於:工具列按鈕狀態更新、狀態列資訊刷新、背景自動儲存觸發條件檢查、網路連線狀態輪詢等。善用 OnIdle 可讓介面更貼近使用者操作脈絡。

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