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

怎樣在delphi中自定義Procedure

尚未結案
6925251
一般會員


發表:7
回覆:14
積分:4
註冊:2003-07-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-19 17:06:16 IP:221.224.xxx.xxx 未訂閱
怎樣在delphi中自定義Procedure,定義Procedure的程序代碼應該放在哪個位置?請大大們指教,不勝感激! Dephi初學者,急盼指教!
------
吳江鵬
a123473119
一般會員


發表:19
回覆:46
積分:18
註冊:2002-08-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-19 18:57:12 IP:211.76.xxx.xxx 未訂閱
感覺上如是本身form要用的,放在 private 即可 如果別的form也要呼叫,則放在 public ,別的form 要 uses 此form即可. 不曉的是不是您要問的.
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-19 19:39:30 IP:203.204.xxx.xxx 未訂閱
引言: 怎樣在delphi中自定義Procedure,定義Procedure的程序代碼應該放在哪個位置?請大大們指教,不勝感激!
6925251 你好 可以參考以下連結 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=52861 _______________________________________ 深藍的魚,祝您好運..........連.連
6925251
一般會員


發表:7
回覆:14
積分:4
註冊:2003-07-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-20 08:24:02 IP:221.224.xxx.xxx 未訂閱
例如定義一個public procedure,max(a,b),傳回a,b中最大值,代碼如下,好像編譯不通過,請您舉個例子! unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public procedure max(a,b); var a,b:inteter; begin if a>b then max(a,b):=a else max(a,b):=b; end; { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} end. Delphi初學者,急盼指教!
------
吳江鵬
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-20 13:05:43 IP:203.204.xxx.xxx 未訂閱
6925251 你好
引言:
例如定義一個public procedure,max(a,b),傳回a,b中最大值,代碼如下,好像編譯不通過,請您舉個例子!
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;    type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    procedure max(a,b);  // 這只是宣告而已
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation  // 以下是實作區 真正執行的程式碼在此    {$R *.DFM}    procedure TForm1.max(a,b);
  var
  a,b:inteter;
begin
  if a>b then
  max(a,b):=a
  else
  max(a,b):=b;
end;    end.    Delphi初學者,急盼指教!
_______________________________________ 深藍的魚,祝您好運..........連.連
6925251
一般會員


發表:7
回覆:14
積分:4
註冊:2003-07-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-20 13:41:29 IP:221.224.xxx.xxx 未訂閱
Chance36大哥,這樣編譯不通過,您在試試? 切盼您的答案. Delphi初學者,急盼指教!
------
吳江鵬
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-20 14:38:50 IP:211.20.xxx.xxx 未訂閱
6925251 你好
  編譯不通過問題是在程序內部的錯誤,不是宣告在那個區段發生的,一直注
意你的題目,卻忽略了程式內容;另外你這個應該定義為Function才對吧!我就
直接改了。    unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;    type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    function  max(a,b:Integer):Integer;  // 這只是宣告而已
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation  // 以下是實作區 真正執行的程式碼在此    {$R *.DFM}    procedure TForm1.max(a,b:Integer):Integer;
begin
  // 傳回值的變數用Result或Function的名稱皆可,視個人習慣使用
  if a>b then
    Result := a
  else
    max :=b;
end;    end.
_______________________________________ 深藍的魚,祝您好運..........連.連 _______________________________________ 深藍的魚,祝您好運..........連.連
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-20 21:50:08 IP:211.162.xxx.xxx 未訂閱
大家別理我,我是來插花的: 一般一個專案中只有唯一的一個>>).< class="code"> program Project1; //文件定義,一個名爲Project1的專案文件 uses //定義在Program中需要用到的單元文件 Forms, Unit1 in 'Unit1.pas' {Form1}, //注意,這裏是"," Dialogs; var MyMsg: String; {$R *.res} //$R是一個編譯指令,此處表示要編譯資源檔案Project1.res procedure AppStart(MyMsg: String); //這裏可以定義函數或過程 begin ShowMessage(MyMsg); end; begin //begin...end部分是program的主體,這裏的code是可以運行的 Application.Initialize; Application.CreateForm(TForm1, Form1); //創建表單 MyMsg := 'I Love KTop'; AppStart(MyMsg); Application.Run; //應用程式開始運行 end. 再來看看unit的組織結構,一個單元文件被unit標識:

unit Unit1;   //文件定義:一個名爲Unit1的單元文件    interface   //在這個部分聲明可供其他單元使用的變數,常量,函數或過程    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs;    type       //聲明類型
  TForm1 = class(TForm)
  private
    procedure ShowInfo(Info: String);
  public
    
  end;    procedure ShowInfo(Info: String);    var   //聲明變數
  Form1: TForm1;    implementation   //在這個部分完成單元的私有聲明,並實現interface聲明的類,函數和過程    uses      //implementation部分的uses內容只針對implementation有效,interface不需要而implementation需要的單元應該在這裏引用
  SysUtils, Variants;    var       //implementation部分可以和interface部分一樣聲明
  ObjectList: TObjectList;    {$R *.dfm}  //編譯對應的dfm文件    procedure ShowInfo(Info: String);  //實現interface部分聲明的函數或過程
begin
  ShowMessage(Info);
end;    procedure TForm1.ShowInfo(Info: String);  //實現interface部分聲明的類
begin
  ShowMessage(Info);
end;    initialization  //單元初始化部分
  ObjList := TObjectList.Create;    finalization    //單元終止部分
  FreeAndNil(ObjList);
end.
================================= 人生在勤,不索何獲 業精於勤荒於嬉,行成於思毀於隨 臨淵羡魚不如退而結網
------
人生在勤,不索何获?
6925251
一般會員


發表:7
回覆:14
積分:4
註冊:2003-07-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-21 08:32:56 IP:221.224.xxx.xxx 未訂閱
Chance36大哥,這樣編譯不通過,您在試試? 錯誤提示"procedure cannot have a result type 此行編譯無法通過procedure TForm1.max(a,b:Integer):Integer; 切盼您的答案. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public function max(a,b:Integer):Integer; { Public declarations } end; var Form1: TForm1; implementation procedure TForm1.max(a,b:Integer):Integer;//錯誤處 begin // 傳回值的變數用Result或Function的名稱皆可,視個人習慣使用 if a>b then Result := a else result :=b; end; {$R *.DFM} end. Delphi初學者,急盼指教!
------
吳江鵬
shinhrn
中階會員


發表:54
回覆:165
積分:83
註冊:2002-06-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-21 09:07:58 IP:218.170.xxx.xxx 未訂閱
引言: Chance36大哥,這樣編譯不通過,您在試試? 錯誤提示"procedure cannot have a result type 此行編譯無法通過procedure TForm1.max(a,b:Integer):Integer; 切盼您的答案. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public function max(a,b:Integer):Integer; { Public declarations } end; var Form1: TForm1; implementation procedure TForm1.max(a,b:Integer):Integer;//錯誤處 begin // 傳回值的變數用Result或Function的名稱皆可,視個人習慣使用 if a>b then Result := a else result :=b; end; {$R *.DFM} end. Delphi初學者,急盼指教!
procedure TForm1.max(a,b:Integer):Integer;//錯誤處 因該是 function TForm1.max(a,b:Integer):Integer; 才對吧
6925251
一般會員


發表:7
回覆:14
積分:4
註冊:2003-07-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-07-21 10:36:47 IP:221.224.xxx.xxx 未訂閱
是應該用function;還有一問題,如果調用該函數時,如何直接調用其傳回的result? 我用下面程序,可以達到結果,好像太麻煩,是否有更好的方法? 如showmessage(result)? procedure TForm1.Button1Click(Sender: TObject); begin max(strtoint(edit1.text),strtoint(edit2.text)); showmessage(floattostr(max(strtoint(edit1.text),strtoint(edit2.text)))); end; Delphi初學者,急盼指教!
------
吳江鵬
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-07-21 11:00:04 IP:218.15.xxx.xxx 未訂閱
6925251 您好: 首先让我们一起来了解函数(FuncTion)与过程(procedure)的区别: 函数能返回计算结果,即有一个返回值,而过程没有; 好了,现在对于您的问题可以下面写法(其实上面前辈都已说得很明白,小弟我纯属乱PO) < class="code"> unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } function Fmax(a,b:Integer):Integer;//函数的声明,声明及下面的使用应一致 procedure Pmax(a,b:Integer); //过程的声明 public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} //***********下面是函数***********************// function TForm1.Fmax(a,b:Integer):Integer; //返回类型为整型,值为Result begin if a>b then Result :=a else Result :=b; end; procedure TForm1.Button1Click(Sender: TObject); //函数的使用 var i,j:integer; begin i:=3; j:=5; showmessage('最大值为:' inttostr(Fmax(i,j))); end; //***********下面是过程***********************// procedure TForm1.Pmax(a,b:Integer); //无返回值 begin if a>b then showmessage('最大值为:' inttostr(a)) else showmessage('最大值为:' inttostr(b)); end; procedure TForm1.Button2Click(Sender: TObject); //过程的使用 var i,j:integer; begin i:=3; j:=5; Pmax(i,j); end; end. 基本上两种用法的简单演示,具体讲解可参考上述前辈的解答,希望能有所帮助,早日完工 讲多一句,如果
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-07-21 11:14:12 IP:218.15.xxx.xxx 未訂閱
引言: 是應該用function;還有一問題,如果調用該函數時,如何直接調用其傳回的result? 我用下面程序,可以達到結果,好像太麻煩,是否有更好的方法? 如showmessage(result)? procedure TForm1.Button1Click(Sender: TObject); begin max(strtoint(edit1.text),strtoint(edit2.text)); showmessage(floattostr(max(strtoint(edit1.text),strtoint(edit2.text)))); end; Delphi初學者,急盼指教!
6925251您好: 可参考上面过程的写法: 然后直接在Button1的OnClick事件中写: procedure TForm1.Button1Click(Sender: TObject); //过程的使用 begin Pmax(strtoint(edit1.Text),strtoint(edit2.Text)); end; 即可,试试看 ——行径窄处,留一步与人行—— ——
6925251
一般會員


發表:7
回覆:14
積分:4
註冊:2003-07-09

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-07-21 11:21:45 IP:221.224.xxx.xxx 未訂閱
謝謝各位大大,每個人的回答都對我有啟發,我覺得deity的回答最系統,分數就給deity了,謝謝各位! Delphi初學者,急盼指教!
------
吳江鵬
系統時間:2024-11-22 9:01:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!