Jo läuft. Wenn man noch eine kleine Klasse vorschaltet wird‘s noch einfacher. Und wie Sir Rufo ja auch schon anmerkte es kann quasi immer nur einen geben, List[I].Assign(List[J]) geht z.B. nicht wie auch die Funktionalität dieser Klasse insgesamt stark eingeschränkt ist, für eine History aber eben völlig ausreichend und auch sinnvoll, wenn man dem User den
RAM nicht "zumüllen" will, weil er z.B. gerade DIN A0 große Metafiles 20 fach gezoomt auf einem Paintbox.Canvas darstellt.
Delphi-Quellcode:
constructor TGraphicListFiles.Create(Path: string);
begin
FItems := TGraphicList.Create;
FPath := IncludeTrailingPathDelimiter(Path);
if not SysUtils.DirectoryExists(FPath) then
SysUtils.CreateDir(FPath);
end;
destructor TGraphicListFiles.Destroy;
begin
FItems.Free;
Clear;
if SysUtils.DirectoryExists(FPath) then
SysUtils.RemoveDir(FPath);
inherited;
end;
procedure TGraphicListFiles.Clear;
var
I: integer;
begin
for I := 0 to FCount - 1 do
if SysUtils.FileExists(FileName(I)) then
SysUtils.DeleteFile(FileName(I));
FCount := 0;
end;
function TGraphicListFiles.FileName(Index: integer): string;
begin
Result := FPath + IntToStr(Index) + '.dat';
end;
function TGraphicListFiles.GetItems(Index: integer): TGraphicList; // ReadOnly;
begin
FItems.LoadFromFile(FileName(Index));
Result := FItems;
end;
function TGraphicListFiles.Add(Value: TGraphicList): integer; // WriteOnly;
begin
Result := FCount;
Value.SaveToFile(FileName(Result));
Inc(FCount);
end;