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

如何將常用的function放在一個Pas,使用時 myFunction.xxx、myFunction.bbb ?

答題得分者是:Coffee
rookie_me
一般會員


發表:4
回覆:3
積分:1
註冊:2007-05-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-25 11:04:14 IP:124.10.xxx.xxx 訂閱
<textarea class="delphi" rows="10" cols="60" name="code"> unit myFunctio; interface uses …; type myFunctioUtils =class(????) private { Private declarations } public { Public declarations } procedure aaaa; end; implementation procedure myFunctioUtils.aaaa; var </textarea> ----------------------- 要如何才能在使用時,使用 myFunctioUtils.aaaa; 而不需再 create myFunctioUtils ??
Jasonwong
版主


發表:49
回覆:918
積分:558
註冊:2006-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-25 11:10:21 IP:211.75.xxx.xxx 未訂閱
<textarea class="delphi" rows="10" cols="60" name="code"> unit myFunctio; interface uses …; implementation procedure myFunctioUtils.aaaa; var </textarea>
------
http://www.cobbler.tw

聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-25 11:27:39 IP:220.130.xxx.xxx 訂閱
這是我的方法,這樣連是哪個物件都不需要知道 可以參考看看    <textarea cols="60" rows="10" class="delphi" name="code"> unit mutils; interface uses .....; type TPStrFunc = function(ComponentName : string):string of object; type TSetCaptionProc = procedure(Component : TWinControl; ContainerClassName : string = 'TPanelTGroupBoxTScrollBox') of object; type TPStrProc = procedure (ComponentName : string) of object; type TGetStrFunc = function : string of object; var cfg : TConfiguration; mtm : TMailTypeMap; GetCaption : TPStrFunc; SetControlCaptions : TSetCaptionProc; LoadCaptions : TPStrProc; GetXLSTemplatePath, GetOutputPath : TGetStrFunc; implementation . . . . . initialization try cfg:=TConfiguration.Create; GetCaption:=cfg.GetCaption; SetControlCaptions:=cfg.SetControlCaptions; LoadCaptions:=cfg.LoadCaptions; CurrentDateEditMask:=cfg.CurrentDateEditMask; DateNull:=cfg.DateNull; except cfg.Free; mtm.Free; end; finalization FreeAndNil(cfg); FreeAndNil(mtm); end. </textarea>
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
rookie_me
一般會員


發表:4
回覆:3
積分:1
註冊:2007-05-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-25 11:37:36 IP:124.10.xxx.xxx 訂閱

sorry 前輩,我是想自己的function 全在一個物件內(myFunctioUtils)
這樣,用時,或別人讀程式時,一眼就可看出。
所以,問題應該是,要如何做,自已的funcion 物件,不需create就可用

不需
var
aaa:myFunctioUtils;
begin
aaa:=myFunctioUtils.create;
aaa.aaaa

而是直接用
myFunctioUtils.aaaa; 即可
===================引 用 Jasonwong 文 章===================
<textarea name="code" cols="60" rows="10" class="delphi">unit myFunctio; interface uses …; implementation procedure myFunctioUtils.aaaa; var </textarea>
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-25 11:49:10 IP:220.130.xxx.xxx 訂閱
我的寫法就是你只要在要用的unit裡面去引用這個unit,那你就可以直使用
  1. GetCaption
  2. SetControlCaptions
  3. LoadCaptions
  4. CurrentDateEditMask
  5. DateNull
這幾個函式,不需要create,因為它在自己的initialization裡面就已經初始化完畢

如果你其實不需要物件,Jasonwong大的方法也可行,只是我記得要在implementation前先宣告?
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
編輯記錄
Coffee 重新編輯於 2007-05-25 11:53:43, 註解 無‧
rookie_me
一般會員


發表:4
回覆:3
積分:1
註冊:2007-05-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-25 11:58:54 IP:124.10.xxx.xxx 訂閱
經您解說,看懂您的程式了,這樣用,真好;感謝您!!
===================引 用 Coffee 文 章===================
我的寫法就是你只要在要用的unit裡面去引用這個unit,那你就可以直使用
  1. GetCaption
  2. SetControlCaptions
  3. LoadCaptions
  4. CurrentDateEditMask
  5. DateNull
這幾個函式,不需要create,因為它在自己的initialization裡面就已經初始化完畢

如果你其實不需要物件,Jasonwong大的方法也可行,只是我記得要在implementation前先宣告?
Jasonwong
版主


發表:49
回覆:918
積分:558
註冊:2006-10-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-05-25 11:59:11 IP:211.75.xxx.xxx 未訂閱
你又沒講清楚, 只說不想 CREATE 而以

就參考 Coffee 兄的方式, 在 initialization 下將你的 myFunctioUtils 給 CREATE 就好了

===================引 用 rookie_me 文 章===================

sorry 前輩,我是想自己的function 全在一個物件內(myFunctioUtils)
這樣,用時,或別人讀程式時,一眼就可看出。
所以,問題應該是,要如何做,自已的funcion 物件,不需create就可用

不需
var
? aaa:myFunctioUtils;
begin
?
aaa:=myFunctioUtils.create;
? aaa.aaaa

而是直接用
?
myFunctioUtils.aaaa; 即可
------
http://www.cobbler.tw

聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
Kingron
中階會員


發表:1
回覆:51
積分:60
註冊:2005-09-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-15 03:46:39 IP:125.89.xxx.xxx 訂閱
估计是Java程序员转过来的。 :-)

N多方法:
前面的大大已经给出来了,总结一下:
第一个方法:
直接写function GetCaption:string;,不要使用Class来封装,这样只要直接使用即可,推荐用这种方式。

第二个方式:
用Class,但可以在Init 和Final节添加代码,整个unit类似下面:
unit Utils;

interface

TUtils=class
public
function GetCaption:String;
end;

var
Utils: TUtils;

implemention
...
initialization
Utils := TUtils.Create;
finalization
Utils.Free;
end;
这样别人只要调用Utils.Caption即可,如果不喜欢Delphi的方式,可以用这种方法。

第三种,使用Class function:
unit Utils;

interface

TUtils=class
public
class function GetCaption:String;
end;

var
Utils: TUtils;

implemention

class function TUtils.GetCaption: string;
begin
....
end;.

end;
别人只要使用TUtils.GetCaption即可,也不需要创建了~
------
超级猛料:http://kingron.delphibbs.com
系統時間:2017-12-13 11:15:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!