2017-10-16 4 views
1

Ich verwende RAD XE7. In meiner Delphi-Anwendung möchte ich Standardwerte für Felder von Records festlegen.Wie setze ich den Standardwert für die Aufzeichnung in Delphi

Ich versuchte folgenden Code, aber es kompiliert nicht, ich weiß, dass es falsch ist. Ich da noch einen anderen Weg?

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

Sie könnten eine Funktion in diesem Datensatz verwenden, Zurückgeben eines neuen Datensatzes mit Ihren gewünschten Werten. Betrachten Sie z.B. Die StartNew-Funktion des TStopWatch-Datensatzes in System.Diagnostics. – nil

+0

Warum möchten Sie Datensätze im Gegensatz zu Klassen verwenden? Wenn Sie Zeiger auf Datensätze verwenden, setzt dies Alarmglocken für mich, weil Klassenobjekte intrinsisch Zeiger sind, und es scheint mir, dass durch die Verwendung von Klassen Ihre Probleme verschwinden. – Dsm

+0

Eigentlich bin ich migrieren Code zu xe7 und Alter Code ist in Codegare 2007, warum und da viele Datensätze in alten Code. Erstellen Konstruktor ist eine gute Lösung? – Ankush

Antwort

5

Wenn Sie eine teilweise initialisiert Datensatz definieren wollen, erklären nur constant record, aber diese Parameter nicht Standardwerte auslassen benötigen:

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

Ja, es funktioniert. aber ich habe den Zeiger eines Datensatzes wie dieses erstellt PTDtcData =^TDtcData; Weil ich eine Liste von Datensätzen mit Tlist erstellen möchte, funktioniert das nicht für diesen Fall. Jede andere Methode, die den Zeiger des Datensatzes verwendet, ist etwa so: – Ankush

+2

Ein Zeiger funktioniert ähnlich: 'var myP: PDtcData; beginne neu (myP); myP ^: = cDefaultDtcData; etc ... ', wobei' type PDtcData =^TDtcData; TDtcData = record ... etc.' –

+1

Mit XE7 können Sie generische 'TList ' anstelle des Pointer-Ansatzes – MBo

3

Mit dem Zusatz von ‚class like‘ in Delphi-Datensatztypen, Sie könnten dies lösen, indem Sie eine Klassenfunktion verwenden.

Definieren Sie class function CreateNew: TDtcData; static; für Ihre Aufzeichnung.

Die Implementierung der Standardwerte für die resultierenden Datensatz:

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

dies einen Datensatz mit den Standardwerten wie diese zu erhalten verwenden:

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

Ok, das ist in Ordnung für den Standardwert, aber ich möchte Liste von Datensatz mit Tlist machen und danach Datensätze aus Tlist abrufen – Ankush

+0

@Ankush Ihr Kommentar sieht aus wie Sie die Antwort auf Ihre Frage akzeptieren. Dies ist eine Frage-und-Antwort-Website, also wenn dies der Fall ist, akzeptiere die Antwort und stelle eine andere Frage für dein zweites Problem. – Dsm

Verwandte Themen