線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1586
推到 Plurk!
推到 Facebook!

是否有辦法 override 其他 unit 上面的procedure

答題得分者是:carstyc
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-13 18:41:14 IP:59.125.xxx.xxx 訂閱
//delphi5

像我用一個 datamodule

定義一個
function showmessage(vInStr:string):string;


function showmessage(vInStr:string):string;
begin
Dialogs.ShowMessage(big52gb(vInStr));
end;

這樣我其他有用到ShowMessage全部會指到這個,我就不用一個一個回頭去找來改



現在要在 tquery.open 的時候把資料轉成簡體

現在知道他會指到
DB.pas 的

procedure TDataSet.Open;
begin
Active := True;
end;

是想要改成這樣

procedure TDataSet.Open;
begin
Active := True;
doQueryAfterOpen(self); //讓他有沒有自己的 afteropen 都能跳到我自己的doQueryAfterOpen
end;

如果我把db.pas 拷出來加到project裡, 可以改,可是包的時候會跟說其他底層有用到db.pas也要重包,變成每個都要加進來
...會加個沒完沒了...還會有那種只有 bpl 沒有 *.pas 的 ....Orz

現在試想說,能不能再另外一個 unit 把 TDataSet.Open; override; override掉,這樣就不需要動到其他的底層,包的時候就不用怕東加西加加到睡著

因為有一大堆 tquery,有的已經有定義 afteropen,一個一個去指定要很很很很久, 還有一部分是 在程式裡面 用 myQuery := TQuery.Create(); 也是要一個一個找來改..Orzzzz
編輯記錄
shininggod 重新編輯於 2009-05-13 18:44:47, 註解 無‧
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-14 00:16:53 IP:219.84.xxx.xxx 訂閱
你可以自行寫一個物件,去繼承 TQuery ,然後用關鍵字 override 去覆蓋原有的 procedure 

TmyQuery=class(TQuery)
.
.
.
procedure Open; override;
.
.
.

procedure TmyQuery.Open;
begin
inherited Open;
.
.
end;

但這樣似乎不能解決你的問題吧,這樣作則必需把你所有的 TQuery 全部換成 TmyQuery....

花的功夫應該也不會少吧。
AndrewK
高階會員


發表:6
回覆:151
積分:161
註冊:2006-10-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-14 07:00:26 IP:60.250.xxx.xxx 訂閱
Hello

可以試著利用看看函式指標,只要了解程式所要改物件事件有哪些,於觸發前,先指定即可
而寫著物件,確實也是一個好方法,有利於未來要使用時,直接使用進化版的物件使用即可
------
Just Do It
-------------------------
其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-19 15:36:56 IP:59.125.xxx.xxx 訂閱

===================引 用 carstyc 文 章===================
...
procedure TmyQuery.Open;
begin
inherited Open;
.
.
end;
...


我原本就是懶的每個進去找,實在沒這時間一個一個挖,所以整批一次把TQuery換成 TmyQuery 這種整批換掉可以省很多時間

多丟參數也可以,不過也要先預 carstyc 的方法切出來才行Orz .. (因為缺少 DB 的一部分底層的 *.pas...)
系統時間:2024-04-19 7:40:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!