Wolfgang Chien's Homepage | Delphi學習筆記 - 問答篇 |
兩個問題請教眾兄弟:
![]() |
1. 程式中如何模擬按下 DBNavigator 元件任一按鈕的動作(例如按下 Post按鈕)是不是 DBNavigatorClick(Self), 但是如何送出 Post 鈕參數呢 |
![]() |
2. 程式中如何判斷 DBNavigator元件那一個按鈕是 Enable (例如 Post 按鈕) |
![]() |
可以呼叫 TDBNavigator.BtnClick() 其宣告如下:
procedure BtnClick(Index: TNavigateBtn); 其中: TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh); 而且這個方法還模擬得很徹底喔! 像是 DBNavigator1.BtnClick(nbNext), 除了記錄指標往下一筆, 同時也會觸發 DBNavigator1 的 OnClick 事件. 事實上, 如果大家去看 VCL 原始程式的話, TDBNavigator 的 OnClick 就是在 BtnClick 這個方法中啟動的. |
||||
![]() |
有兩個方法請您參考看看. (嗯! 如果加上 Kevin Lee 的法子, 那就有三種了.
:p)
這個測試元件安裝好之後, 它與原來的 TDBNavigator 只差在多了一個名為: GetButton的方法, 以您提出的問題, 想要知道 post 按鈕的致能狀態, 就可以透過類以如下的寫法: if TestNav1.GetButton(nbPost).Enabled then ShowMessage('Post Button is Enabled'); 只是提醒您一點, 雖然我們己經開發出一個 GetButton 方法, 其傳回值是 TNavButton (也就是TDBNavigator中個別的SpeedBtn), 但我們不應該直接改變這個物件的內容(而且改了對於DataSet也沒用); 再加上有時我們會呼叫 Dataset.DisableControls 以加快執行速度, DBNavigator 不一定會忠實反映資料集的狀態. 所以, 可能的話, 建議應儘可能用甲案, 畢竟, DataSet 的情況才是DBNavigator 各按鈕狀況的情報來源, 是嗎? :) |
unit TestNav; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls; type TTestNav = class(TDBNavigator) private { Private declarations } protected { Protected declarations } public { Public declarations } function GetButton(Index: TNavigateBtn):TNavButton; published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TTestNav]); end; function TTestNav.GetButton(Index: TNavigateBtn): TNavButton; begin Result := Buttons[Index]; end; end.
首頁 | 學習筆記 | 主題公園 | 軟體下載 | 關於本站 | 討論信群 | 相約下次 |