2017-10-16 6 views
1

私はRAD XE7を使用しています。私の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ではポインタアプローチ – MBo

3

デルファイの「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あなたの質問に対する答えはあなたのようです。これはQ&Aサイトであるため、そうであれば回答を受け入れ、2番目の問題について別の質問をしてください。 – Dsm

関連する問題