Hmpf...
Ich probier's nochmal...
Ich habe das Item etwas angepasst, so dass es einfacher durch Strings zu füllen ist[1], außerdem bekam die Collection eine Überladung von Add, wodurch man easy ein neues Element hinzufügen kann.
Delphi-Quellcode:
interface
uses
Classes,
dpCollection;
type
TMesswert = class(TCollectionItem)
private
fSpannung : double;
fLeistung : double;
fStrom : double;
fNr : Byte;
public
procedure FromStrings(const aSpannung, aLeistung, aStrom: string);
published
property Nr : Byte read fNr write fNr;
property Spannung : double read fSpannung write fSpannung;
property Strom : double read fStrom write fStrom;
property Leistung : double read fLeistung write fLeistung;
end;
{$DEFINE TYPED_DP_COLLECTION_TEMPLATE}
_COLLECTION_ITEM_ = TMesswert;
{$INCLUDE dpCollection_tmpl.pas}
TMesswertCollection = class(_COLLECTION_)
public
function Add(aNr: Byte; const aSpannung, aLeistung, aStrom: string) : TMesswert; overload;
end;
implementation
uses
SysUtils;
{$INCLUDE dpCollection_tmpl.pas}
{ TMesswert }
procedure TMesswert.FromStrings(const aSpannung, aLeistung, aStrom: string);
begin
fSpannung := StrToFloat(aSpannung);
fLeistung := StrToFloat(aLeistung);
fStrom := StrToFloat(aStrom);
end;
{ TMesswertCollection }
function TMesswertCollection.Add(aNr: Byte; const aSpannung, aLeistung, aStrom: string) : TMesswert;
begin
with inherited Add() do
begin
Nr := aNr;
FromStrings(aSpannung, aLeistung, aStrom);
end;
end;
Benutzt werden kann das so: (Ist Im EndEffekt dein Code
)
Delphi-Quellcode:
var
Messwerte : TMesswertCollection;
i, Anzahl : Integer;
begin
if not TryStrToInt(AnzahlEdit.Text, Anzahl) then
raise EInvalidCast.Create('irgendwas hier')
else
begin
Messwerte := TMesswertCollection.Create();
try
with StringGrid do
for i := 1 to Anzahl do
Messwerte.Add(i, Cells[1, i], Cells[2, i], Cells[3, i]);
Messwerte.SaveToFile('solarz.dat');
finally
Messwerte.Free();
end;
end;
end;
Da gibt es kein Recordgefriemel, kein absolute, keine Compiler zickereien und keinen Byten array...
Auslesen natürlich mit:
Delphi-Quellcode:
Messwerte := TMesswertCollection.Create();
try
Messwerte.LoadFromFile('solarz.dat');
for i := 0 to Messwerte.Count - 1 do
Messwerte[i]...;// irgendwas mit dem Messwert machen
finally
Messwerte.Free();
end;
[1]du solltest dir aber überlegen, deine Werte _nicht_ im Grid zu halten, sondern dort nur anzuzeigen
p.s.: Das Schreiben des Beitrages dauerte doppelt solange, wie das des Codes. Ich bezweifle also, dass es zu "aufwendig" ist.