@Michael:
Danke für das "Entschrummpeln" der Forumsansicht!
Zitat von
Luckie:
Oder besser noch, sag uns, was du eigentlich vor hast.
Zitat von
sirius:
Was heißt den löschen?
Record löschen, zurücksetzen, oder wie Marius schrieb "Alle Felder leeren", also alle Werte des Records auf einen Anfangswert setzen. Z. B. Strings auf '' (leer), Integer auf 0, ...
Was ich vorhabe:
Zum einen will ich hierbei meinen Delphi-Horizont erweitern. Bisher habe ich bei Records eine Routine geschrieben, in der alle Felder auf einen definierten Wert gesetzt wurden. Beispiel:
Delphi-Quellcode:
Type
TMyRecord = record
Test_1 : string;
Test_2 : string;
Integer_1 : Integer;
Integer_2 : Integer;
end;
function PrepareMsg(AMyRecord: TMyRecord): string;
begin
Result :=
'Test_1: ' + AMyRecord.Test_1 + #13#10+
'Test_2: ' + AMyRecord.Test_2 + #13#10+
'Integer_1: ' + IntToStr(AMyRecord.Integer_1) + #13#10+
'Integer_2: ' + IntToStr(AMyRecord.Integer_2);
end;
procedure ResetMyRecord(var AMyRecord: TMyRecord);
begin
AMyRecord.Test_1 := '';
AMyRecord.Test_2 := '';
AMyRecord.Integer_1 := 0;
AMyRecord.Integer_2 := 0;
end;
procedure SetTestValues(var AMyRecord: TMyRecord);
begin
AMyRecord.Test_1 := 'Hallo ';
AMyRecord.Test_2 := 'Welt!';
AMyRecord.Integer_1 := 9;
AMyRecord.Integer_2 := 2008;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyRecord: TMyRecord;
begin
// undefinierte AnfangsWerte (beim ersten Test erscheinen hier Zufallswerte)
ShowMessage(PrepareMsg(MyRecord));
// BeispielWerte zuweisen
SetTestValues(MyRecord);
ShowMessage(PrepareMsg(MyRecord));
// mit "händischer" Lösung auf definierte AnfangsWerte setzen
ResetMyRecord(MyRecord);
ShowMessage(PrepareMsg(MyRecord));
// BeispielWerte zuweisen
SetTestValues(MyRecord);
ShowMessage(PrepareMsg(MyRecord));
// "FillChar"-Lösung
Finalize(MyRecord);
FillChar(MyRecord, SizeOf(MyRecord), 0);
ShowMessage(PrepareMsg(MyRecord));
end;
Nun will ich zum Einen wissen, ob es da eine einfachere Möglichkeiten gibt, um meinen Code kürzer und übersichtlicher zu halten.
Zum Anderen hat die obige "händische" Lösung zwar den Vorteil, dass man selbst definierte Werte erhält, aber den Nachteil, dass das bei umfangreicheren Records schnell recht aufwendig wird. Hinzu kommt, dass in meinem konkretten Fall (Verknüpfungen auslesen) mein Record auch noch einen weiteren Record enthält. Da ist dann die Frage, wie weit die händische Lösung sinnvoll ist.
Delphi-Quellcode:
type
TMyRecord = record
Test_1 : string;
Test_2 : string;
Integer_1 : Integer;
Integer_2 : Integer;
FindData: TWIN32FINDDATA; // <-- weiterer Record in meinem Record
end;
@toms
Die "MyBlankRecord"-Lösung entspricht in meiner Auffassung der "händischen" Lösung, ist hier also nicht gewollt.
Die "FillChar"-Lösung erscheint mir eher als eine Lösung in meinem Sinne. Gewünscht ist eine Lösung mit kurzem Code, die schon-vorhandene Delphi Routinen benutzt. Und das wäre hierbei der Fall. Und es schein sogar recht elegant zu sein.
OK, nach ersten Tests (siehe Komplett-Code oben) scheint die "FillChar"-Möglichkeit tatsächlich die gewünschte "elegange" Lösung zu sein. Ich werde nun noch Test mit dem zusätzlichen Record in meinem Record (FindDate: TWIN32FINDDATA) durchführen.
@Ronny
Meines Wissens nach werden mit FillChar auch die Strings auf "0" gesetzt (komplett mit Nullen gefüllt, also sozusagen Null-terminiert). Das entspricht einem leeren String und ist das gewünschte Ziel.
Mal sehen, was die anderen sagen.
Guido.