2017-10-16 106 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