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

請問有關record Type 的問題

尚未結案
SamSam1230
中階會員


發表:128
回覆:178
積分:65
註冊:2004-12-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-23 12:15:57 IP:218.103.xxx.xxx 未訂閱
 
unit Unit1    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,    const
     NUll_TYPE       = -1;
type
     BK_Record = record
       REC_NO    : Integer;
       KVU_Rec_No : String;
       UNIT_ID   : String;
       Clear     : Procedure CL(); <---- 1
       END;    ..
.
.
private
   Procedure CL(); <--- 2
   Procedure ABC(IN:BK_Record); <----3
.
.
Public
.
.
.
implementation    {$R *.DFM}    .
.
.
Procedure TForm1.CL(); <--- 4
begin
.
.
end;    end.
我的問題是請問大大這樣的做法有可能嗎? 我想在 record type 裡加一個procedure 但因為那個procedure 宣告又在後面 那個record type 又會被另外一個的procedure call 所以又不能在 public 之後才宣告 請問有directive 可以做嗎? forward 的directive 可以用嗎??是用在這裡嗎? 謝謝大大
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-23 12:58:39 IP:59.120.xxx.xxx 未訂閱
在record裡只能宣告型態,不能宣告實體.如果你有procedure或function要宣告在record裡,則必需先為該procedur設定一個型態(如 TNotifyEvent = procedure (Sender:TObject) of objects;)才能使用.
SamSam1230
中階會員


發表:128
回覆:178
積分:65
註冊:2004-12-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-23 15:01:41 IP:218.103.xxx.xxx 未訂閱
是這樣嗎?     
 
type
     BK_Record = record
       REC_NO    : Integer;
       KVU_Rec_No : String;
       UNIT_ID   : String;
       Clear     : TNotifyEvent ;
       END;    private
       procedure A();
       procedure B();     procedure TForm1.A();
var BK : BK_Record;
begin
     BK.Clear := B();
end;    procedure TForm1.B();
begin
end;
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-23 16:07:32 IP:59.120.xxx.xxx 未訂閱
to SamSam1230: 我想你必需先對delphi的procdural type有個瞭解.Delphi允許你為procedure定義成一種型態,如此, 你就可以把一個procedure當成是變數來使用.而所謂的procdural type,其實就是定義一個procedure,會有那些參數,而不是定義procedure的名稱. 舉個簡單的例子,Delphi裡最常用的procdural type之一就是,就是TNotifyEvent,其宣告如下:
type
  TNotifyEvent = procedure(Sender: TObject) of object;
所以,凡是物件裡有procedure其參數為(Sender:TObject)的,就可以說他是TNotifyEvent. 例如TButton.OnClick就是一個TNotifyEvent,只要你在物件裡有宣告這種參數的procedure,那麼這個 procedure就可以給TButton1.OnClick呼叫. 回到你的問題:你的Clear是Procedure CL()(指在record裡的宣告),這當然不對,而宣告成TNotifyEvent對不對,就問你了. 如果你原來CL的參數就是Sender:TObject,那麼就沒有錯,如果不是,那麼你就要另外宣告一個procedureal type,其參數為你原來規劃給CL的參數. 這樣了解嗎? 建議你可以在delphi 的 online help上搜尋 "Procedural types",參考相關的說明.
系統時間:2024-05-17 11:09:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!