2017-10-16 104 views
1

我正在使用RAD XE7。在我的Delphi應用程序中,我想爲記錄字段設置默認值。如何設置默認值以在delphi中記錄

我試過下面的代碼,但它不能編譯,我知道這是錯誤的。我還有其他方法嗎?

TDtcData = record 
    TableFormat  : TExtTableFormat = fmNoExtendedData; 
    DTC    : integer = 0; 
    Description  : string = 'Dummy'; 
    Status   : TDtcStatus;  
    OccurenceCnt : integer =20; 
    FirstDTCSnapShot: integer; 
    LastDTCSnapShot: integer; 
    end; 
+0

你可以在使用記錄的功能,用你想要的值返回一個新記錄。看看例如System.Diagnostics中的TStopWatch記錄的StartNew函數。 – nil

+0

爲什麼要使用記錄,而不是類?如果你正在使用指向記錄的指針,那麼爲我設置警報鈴,因爲類對象本質上是指針,在我看來,通過使用類,你的問題就會消失。 – Dsm

+0

其實我正在將代碼遷移到xe7,舊代碼是在Codegare 2007中爲什麼和那裏有很多舊代碼中的記錄。創建構造函數是很好的解決方案 – Ankush

回答

5

如果要定義一個部分初始化的記錄,只是聲明瞭一個constant record,但省略這些參數不需要的默認值:

Type 
    TDtcData = record 
    TableFormat  : TExtTableFormat; 
    DTC    : integer; 
    Description  : string; 
    Status   : TDtcStatus; 
    OccurenceCnt : integer; 
    FirstDTCSnapShot: integer; 
    LastDTCSnapShot: integer; 
end; 

Const 
    cDefaultDtcData : TDtcData = 
    (TableFormat : fmNoExtendedData; 
    DTC : 0; 
    Description : 'Dummy'; 
    OccurenceCnt : 20); 

var 
    someDtcData : TDtcData; 
begin 
    ... 
    someDtcData := cDefaultDtcData; 
    ... 
end; 
+0

是的,它的工作原理。但我創建了像這樣的記錄指針PTDtcData =^TDtcData;因爲我想使用Tlist創建記錄列表,所以這不適用於這種情況,任何其他方式使用像這樣的記錄指針 – Ankush

+2

指針的工作原理類似:var myP:PDtcData;開始新(myP); myP ^:= cDefaultDtcData; etc ...',其中'type PDtcData =^TDtcData; TDtcData = record ... etc.' –

+1

使用XE7,您可以使用通用的'TList '而不是指針方法 – MBo

3

通過增加在Delphi「class like」記錄類型,你可以通過使用類函數來解決這個問題。

定義class function CreateNew: TDtcData; static;爲您的記錄。

的實現設置的默認值所產生的記錄:

class function TDtcData.CreateNew: TDtcData; 
begin 
Result.TableFormat := fmNoExtendedData; 
Result.DTC := 0; 
Result.Description := 'Dummy'; 
Result.OccurenceCnt := 20; 
end; 

使用此得到像這樣的默認值的記錄:

var 
    AData: TDtcData; 
begin 
    AData := TDtcData.CreateNew;; 
end. 
+0

好吧這對於默認值是好的,但我想使用Tlist創建記錄列表,然後從tlist檢索記錄 – Ankush

+0

@Ankush您的評論看起來像您正在接受您的問題的答案。這是一個問答網站,如果是這樣的話,請接受答案並針對您的第二個問題提出另一個問題。 – Dsm