關於繼承舊元件時的事件改寫問題 |
|
davidsun
初階會員 發表:57 回覆:71 積分:25 註冊:2002-04-14 發送簡訊給我 |
請教各位有關於撰寫元件(繼承於既有的元件)時,如果我要在既有的事件觸發前,先執行自己的一段程式碼,再執行使用者記自行定義的程式碼時,我們可以使用 Dymanic 的方式,列如:
Type TMyEdit = class(TEdit) procedure OnChange ; dymanic;但是我用 TSocketServer 來製作新元件時,原本有 onClientConnect 的事件, 我希望在觸發此事件時,能先執行自己的一段程式碼, 所以我使用 type TOMCServer = class(TServerSocket) private FonClientConnect: TSocketNotifyEvent; protected procedure ClientConnect(Socket: TCustomWinSOcket); dynamic; public constructor Create(Owner: TComponent); override; destructor Destroy; override; published property onClinetConnect : TSocketNotifyEvent read FonClientConnect Write FonClientConnect; end; .... Procedure TOMCServer.ClientConnect(Socket: TCustomWinSOcket); begin // 執行自己的程式碼 //.......................... if assigned(FonClientConnect) then // 如果使用者有定義事件,則執行 FonClientConnect(Self,Socket); end;但是我發現有 Client 連接時, Procedure TOMCServer.ClientConnect(Socket: TCustomWinSOcket); 並不會被執行到,使用者定義的 Event 也不會,能否請各指教,我是不是什麼地方做錯了? |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 請教各位有關於撰寫元件(繼承於既有的元件)時,如果我要在既有的事件觸發前,先執行自己的一段程式碼,再執行使用者記自行定義的程式碼時,我們可以使用 Dymanic 的方式,列如:應該是用 override 才對吧! 不過您要的功能 TSocketServer 可能無法只用 override 這麼簡單就解決, 因為他是使用 Thread 處理, 您要從 Thread 下手...Type TMyEdit = class(TEdit) procedure OnChange ; dymanic; [/code] 但是我用 TSocketServer 來製作新元件時,原本有 onClientConnect 的事件, 我希望在觸發此事件時,能先執行自己的一段程式碼, 所以我使用type TOMCServer = class(TServerSocket) private FonClientConnect: TSocketNotifyEvent; protected procedure ClientConnect(Socket: TCustomWinSOcket); dynamic; public constructor Create(Owner: TComponent); override; destructor Destroy; override; published property onClinetConnect : TSocketNotifyEvent read FonClientConnect Write FonClientConnect; end; .... Procedure TOMCServer.ClientConnect(Socket: TCustomWinSOcket); begin // 執行自己的程式碼 //.......................... if assigned(FonClientConnect) then // 如果使用者有定義事件,則執行 FonClientConnect(Self,Socket); end; [/code] 但是我發現有 Client 連接時, Procedure TOMCServer.ClientConnect(Socket: TCustomWinSOcket); 並不會被執行到,使用者定義的 Event 也不會,能否請各指教,我是不是什麼地方做錯了?
------
將問題盡快結案也是一種禮貌! |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 請教各位有關於撰寫元件(繼承於既有的元件)時,如果我要在既有的事件觸發前,先執行自己的一段程式碼,再執行使用者記自行定義的程式碼時,我們可以使用 Dymanic 的方式,列如:不知道您這問題解決沒 ? 我想到一個方法您參考看看.Type TMyEdit = class(TEdit) procedure OnChange ; dymanic;..... 省略 ...... type TOMCServer = class(TServerSocket) private { Private declarations } procedure NewClientConnect(Sender: TObject; Socket: TCustomWinSocket); protected { Protected declarations } public { Public declarations } constructor Create(AOwner: TComponent); override; published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TOMCServer]); end; { TOMCServer } constructor TOMCServer.Create(AOwner: TComponent); begin inherited Create(AOwner); Self.OnClientConnect := NewClientConnect; end; procedure TOMCServer.NewClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin // 您要作的事 end; end. [/code]
------
將問題盡快結案也是一種禮貌! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |