全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1930
推到 Plurk!
推到 Facebook!

自定义过程

答題得分者是:Stallion
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-04 14:35:51 IP:222.184.xxx.xxx 訂閱
procedure Tform1.getsj
begin
.....
end;
我自定义了以上的一个过程,在其它代码中调用 getsj,我要问的是一般在procedure 后面总有一个(Sender: TObject),不知道我这个是不是一定要写为procedure Tform1.getsj(Sender: TObject)?
------
我的编程起步于ktop,我将永远支持ktop
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-04 15:34:44 IP:211.22.xxx.xxx 未訂閱
這視你的需求而定!如果需要知道與引用呼叫者就加上去,如果純粹只是處理特定的作業跟呼叫者無關就不必。
===================引 用 ntjrr 文 章===================
procedure Tform1.getsj
begin
.....
end;
我自定义了以上的一个过程,在其它代码中调用 getsj,我要问的是一般在procedure 后面总有一个(Sender: TObject),不知道我这个是不是一定要写为procedure Tform1.getsj(Sender: TObject)?
eaglewolf
資深會員


發表:4
回覆:268
積分:429
註冊:2006-07-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-04 18:01:09 IP:211.75.xxx.xxx 訂閱
一般在procedure 后面总有一个(Sender: TObject),
指的應該是Event Procedure(參考TNotifyEvent)
不管是procedure 或 function
是否要有參數傳遞完全要看你的需求
------
先查HELP
再查GOOGLE
最後才發問

沒人有義務替你解答問題
在標題或文章中標明很急
並不會增加網友回答速度

Developing Tool:
1.Delphi 6
2.Visual Studio 2005
3.Visual Studio 2008
DBMS:
MS-SQL
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-11 01:44:25 IP:58.61.xxx.xxx 訂閱
这个问题的答案,正如上面两位的回答:一个 procedure 里面的 parameter 是什么,看你的需求而定。

本质上,这是 delphi 的语法的问题。从语法角度来看,任何一个 procedure 或者 function,其参数可以根据你的需要任意定。

至于你看到的那些,例如,双击一个 Button1 以后 delphi 帮你自动产生的框架代码:

procedure TForm1.Button1Click(Sender: TObject)

这个是 Button1 的 OnClick 的事件对应的方法。这个方法之所以有 Sender: TObject 这个参数,是因为 TButton 的 OnClick 事件的参数就是如此,绑定事件的方法,必须和事件定义的参数相同。

OnClick 事件的类型是 TNofityEvent,而 TNotifyEvent 这个类型的定义是:

TNotifyEvent = procedure(Sender: TObject) of object; //这个你去看 delphi help 里关于 TNotifyEvent 的描述就清楚了。

再深入一步,为什么它要定义 Sender: TObject 这个参数呢?

1. Sender 是参数名称,随便写个什么都可以,写成 Sender 可以,写成 MySender 也可以的。
2. TObject 是所有类的根。从 delphi 的语法来说,所有的类,比如 TButton, TLabel.... 都是从 TObject 继承下来的。就好比男人、女人,都是从“生物”这个类继承下来的。这里采用 TObject 也就是说 Sender 可以是任何一个类别的对象,不限制类别。如果是 TLabel,那么就不能在这里放 TButton 的对象 Button1 了。

回头来看 procedure TForm1.Button1Click(Sender: TObject),这里,Sender 就是 Button1。通过 Sender 你就可以获得用户 Click 了的那个按钮。比如你有3个按钮,用户点了以后,就把被点的那个按钮的 Caption 改写为当前时间,就可以这样写:

If Sender is TButton then TButton(Sender).Caption := DateTimeToStr(Now);

这样,不管用户点哪个按钮,都能正确执行。而不用分别写三个方法。

===================引 用 ntjrr 文 章===================
procedure Tform1.getsj
begin
.....
end;
我自定义了以上的一个过程,在其它代码中调用 getsj,我要问的是一般在procedure 后面总有一个(Sender: TObject),不知道我这个是不是一定要写为procedure Tform1.getsj(Sender: TObject)?
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-11 01:52:22 IP:58.61.xxx.xxx 訂閱
哈,上面我的那个回复里,所有的 “ forbidden” 其实都是 O_N_C_L_I_C_K, 怎么被系统自动替换成了 forbidden ?
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-11 07:42:20 IP:222.184.xxx.xxx 訂閱
感谢各位大大的指点,感谢pcplayer99大大的深入解析。
------
我的编程起步于ktop,我将永远支持ktop
系統時間:2024-04-29 20:29:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!