Records gab es schon in Turbo Pascal 3.0
Damals war Pascal noch nicht objektorientiert.
Das änderte sich erst mit der Version Turbo Pascal 5.5
Der Unterschied zwischen TP5 und 5.5 waren eigentlich nur eine Hand voll Schlüsselwörter.
Eines davon war "object"
Trotzdem haben Records noch ihre Daseinsberechtigung.
Es gibt viele Dinge die mit einem Record einfach zu erledigen sind.
Aber auch komplexe Aufgeben wie
Variante Teile in Records lassen leicht darstellen:
Delphi-Quellcode:
type
TPerson = record
FirstName, LastName: string[40];
BirthDate: TDate;
case Citizen: Boolean of
True: (Birthplace: string[40]);
False: (Country: string[20];
EntryPort: string[20];
EntryDate, ExitDate: TDate);
end;
oder wenn man wissen will, wie z.B. ein Extended intern im Speicher abgelegt ist, kann man das einfach erledigen:
Delphi-Quellcode:
...
type
myReal = record
case Boolean of
True: (Zahl: Extended); // Extended belegt intern 10 Bytes
False: (Speicher: array[0..9] of Byte);
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
r: myReal;
i: Integer;
s: string;
begin
// Zahl zuweisen
r.Zahl := 7.5;
// Speicher, der von Zahl belegt wird hexadezimal ausgeben
s := '';
for i := 0 to 9 do
begin
s := s + IntToHex(r.Speicher[i], 2) + ' ';
end;
Label1.Caption := s;
end;
...
Delphi 7 Hilfe
...Wie bereits erwähnt, erfüllen variante Teile noch eine zweite Aufgabe. Sie können dieselben Daten so behandeln, als würden sie zu unterschiedlichen Typen gehören. Dies gilt auch in den Fällen, in denen der Compiler eine Typumwandlung nicht zulässt. Wenn beispielsweise das erste Feld einer Variante einen 64-Bit-Real-Typ und das erste Feld einer anderen Variante einen 32-Bit-Integer-Wert enthält, können Sie dem Real-Feld einen Wert zuweisen und anschließend die ersten 32 Bits als Integer-Wert verwenden (indem Sie sie beispielsweise an eine Funktion übergeben, die einen Integer-Parameter erwartet).
Records können ja auch Objekte enthalten:
Delphi-Quellcode:
...
type
TFormRec = record
MainForm: TForm1;
ClientForm: TForm1;
blabla: string;
end;
var
FormRec: TFormRec;
...
procedure TForm1.Button3Click(Sender: TObject);
begin
FormRec.MainForm := TForm1.Create(Application);
FormRec.ClientForm := TForm1.Create(Application);
FormRec.MainForm.Color := clRed;
FormRec.ClientForm.Color := clBlue;
FormRec.MainForm.Show;
FormRec.ClientForm.Show
end;