2012/11/13

基礎課程 - Delphi Interceptor Classes

利用 「Class 攔截器(Interceptor Classes)」 就可以不需要寫大量的繼承指令碼了

實戰中有時也會遇到,比方說像 TMaskEdit 的 ValidateError 事件的覆寫



uses //...

type
  // interceptor class
  TMaskEdit = class(Mask.TMaskEdit)
     procedure ValidateError; override;
  end;

  TForm1 = class(TForm)
  // any code below

然後在 unit 最後面就可以寫覆載內容,例如像:
※20121114 感謝cat200188提供程式內容
procedure TMaskEdita.ValidateError;
var SMaskEditErra :String;
begin
  // 為了避開系統的錯誤訊息,故不使用 inherited
  //inherited;
  SMaskEditErra := '這是中文測試!!';
  raise EDBEditError.CreateResFmt({$IFNDEF CLR}@{$ENDIF}SMaskEditErra, [EditMask]);
end;

遇到VCL元件不足的地方利用這個方式可以很輕鬆擴展它

嗯,以上基礎課程就到這邊


參考資料
Delphi Interceptor Classes -> TButton = class(TButton)
Synchronizing Threads and GUI in Delphi application
TMaskEdit 的錯誤攔截











有認真看基礎課程嗎?

沒有留言:

張貼留言

How to use URLEncode in Delphi

URL編碼,也稱【百分號編碼(Percent-encoding)】 由於 URL 不能直接接受 UTF8 文字,所以要先轉成百分號編碼後,如此網址才能順利送給 HTTP Server 從 Indy 加入 Delphi 後,就可以用 IdURI.TIdURI 單元進行編碼 ...