Diese Methode funktioniert nur wenn die
Strings die in deinem Programm
nie länger als 255 Zeichen sind.
Da es mit
String (AnsiString) nicht funktioniert, wurden diese durch
ShortString ersetzt.
Delphi-Quellcode:
Type subdaten = record
Case Boolean of
False: (
Name: ShortString;
Exe: ShortString;
iscategory: Boolean;
Programm1: ShortString;
Programm2: ShortString;
Programm3: ShortString;
Programm4: ShortString;
Programm5: ShortString;
Programm6: ShortString;
Programm7: ShortString;
Programm8: ShortString;
Programm9: ShortString;
Programm10: ShortString;
Name1: ShortString;
Name2: ShortString;
Name3: ShortString;
Name4: ShortString;
Name5: ShortString;
Name6: ShortString;
Name7: ShortString;
Name8: ShortString;
Name9: ShortString;
Name10: ShortString);
True: (
Name_: ShortString;
Exe_: ShortString;
iscategory_: Boolean;
Programm__: Array[1..10] of ShortString;
Name__: Array[1..10] of ShortString);
End;
datensatz = record
Case Boolean of
False: (
Prog1: subdaten;
Prog2: subdaten;
Prog3: subdaten;
Prog4: subdaten;
Prog5: subdaten;
Prog6: subdaten;
Prog7: subdaten;
Prog8: subdaten;
Prog9: subdaten;
Prog10: subdaten;
Prog11: subdaten;
Prog12: subdaten;
Prog13: subdaten;
Prog14: subdaten;
Prog15: subdaten;
Prog16: subdaten;
Prog17: subdaten;
Prog18: subdaten;
Prog19: subdaten;
Prog20: subdaten;
Prog21: subdaten;
Prog22: subdaten;
Prog23: subdaten;
Prog24: subdaten;
Prog25: subdaten);
True: (Prog__: Array[1..25] of subdaten);
End;
Var daten: datensatz;
...
{ liest Text von Label1 ein und schreibt ihn auf Label2}
daten.Prog14.Programm2 := Label1.Caption;
Label2.Caption := daten.Prog__[14].Programm__[2];
Deine Variablen-Deklaration wurde einfach mit dieser überlagert. Da die Reihenfolge und Anzahl der Sub-Deklaration identisch sind, liegen somit die selben Variablen übereinander (nutzen den selben Speicherbereich).
Somit ist der "alte" Zugriff und der Zugriff über Array's gleichzeitig möglich.
Ein Beispiel für den Zugriff auf diese Deklaration ist schon im obrigen Code enthalten.
Delphi-Quellcode:
Type subdaten = record
Name_: ShortString;
Exe_: ShortString;
iscategory_: Boolean;
Programm__: Array[1..10] of ShortString;
Name__: Array[1..10] of ShortString;
End;
datensatz = record
Prog__: Array[1..25] of subdaten;
End;
"_" wurde zur Unterscheidung der alten zur neuen Deklaration eingefügt.
Kleine Erleuterung:
Das kann man gut zur Typen-Umwandlung/-Zerlegung verwenden.
Ich nutze sowas zum Beispiel um eine reelle Variable byteweise in eine Datei zu schreiben und auszulesen.
Delphi-Quellcode:
Var Farbe: Record
Case Boolean of
False: (Color: TColor);
True: (Alpha, Blau, Gruen, Rot: Byte);
End;
Farbe.Alpha := ...;
Farbe.Blau := ...;
Farbe.Gruen := ...;
Farbe.Rot := ...;
... := Farbe.Color;
************************************************** ***
Besser kommst'e aber wenn du doch dein Prog umschreibst.
Brauchst doch nur mit Suchen & Ersetzen drüber rauschen und dann noch die Deklaration auszutauchen.
Delphi-Quellcode:
Var daten: Array[1..25] of record
Name: String;
Exe: String;
iscategory: Boolean;
Programm: Array[1..10] of String;
ProgName: Array[1..10] of String;
End;
{für's ersetzen}
datenXX => daten[XX]
ProgrammXX => Programm[XX]
NameXX => ProgName[XX]