2017-10-16 15 views
1

J'utilise RAD XE7. Dans mon application Delphi, je veux définir des valeurs par défaut pour les champs d'enregistrements.Comment définir la valeur par défaut pour enregistrer en Delphi

J'ai essayé le code suivant, mais il ne compile pas, je sais que c'est faux. Y-a-t-il un autre moyen?

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

Vous pouvez utiliser une fonction dans ce dossier, renvoyer un nouvel enregistrement avec vos valeurs souhaitées. Regardez par exemple La fonction StartNew de l'enregistrement TStopWatch dans System.Diagnostics. – nil

+0

Pourquoi voulez-vous utiliser des enregistrements, par opposition aux classes? Si vous utilisez des pointeurs sur des enregistrements, cela définit pour moi les cloches d'alarme, car les objets de classe sont intrinsèquement des pointeurs, et il me semble qu'en utilisant des classes vos problèmes disparaissent. – Dsm

+0

En fait, je suis en train de migrer le code vers xe7 et l'ancien code est dans Codegare 2007 que, pourquoi et beaucoup d'enregistrements dans l'ancien code. Créer un constructeur est une bonne solution? – Ankush

Répondre

5

Si vous souhaitez définir un enregistrement partiellement initialisé, juste Déclarez une constant record, mais omettent ces paramètres ne pas avoir besoin des valeurs par défaut:

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

Oui cela fonctionne. mais j'ai créé un pointeur d'enregistrement comme celui-ci PTDtcData =^TDtcData; parce que je veux faire une liste d'enregistrement en utilisant Tlist, donc cela ne fonctionne pas pour ce cas, toute autre façon en utilisant le pointeur d'enregistrer quelque chose comme ça – Ankush

+2

Un pointeur fonctionne de manière similaire: 'var myP: PDtcData; commencer Nouveau (myP); myP ^: = cDefaultDtcData; etc ... ', où' type PDtcData =^TDtcData; TDtcData = enregistrement ... etc.' –

+1

Avec XE7 vous pouvez utiliser le 'TList ' générique au lieu de l'approche de pointeur – MBo

3

Avec l'ajout de types d'enregistrement « class like » en Delphi, vous pouvez résoudre cela en utilisant une fonction de classe.

Définissez class function CreateNew: TDtcData; static; pour votre dossier.

La mise en œuvre définit les valeurs par défaut pour l'enregistrement résultant:

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

L'utilisation de ce pour obtenir un enregistrement avec les valeurs par défaut comme ceci:

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

Ok c'est bien pour la valeur par défaut mais je veux faire une liste d'enregistrement en utilisant Tlist et après cela récupérer les enregistrements de tlist – Ankush

+0

@Ankush Votre commentaire semble que vous acceptez la réponse à votre question. Il s'agit d'un site de questions-réponses. Si tel est le cas, acceptez la réponse et posez une autre question pour votre deuxième problème. – Dsm