Der Fehler liegt in der Methode GetFileByName. Dort wird bei jedem Zugriff eine neue Instanz von TFile erzeugt.
Bei dieser Instanz wird dann Checked gesetzt, nicht bei der Instanz in der Liste.
Zusätzlich entsteht noch ein Speicherloch, da keine Freigabe erfolgt.
Delphi-Quellcode:
function TFiles.GetFileByFileName(FileName: string):TFile;
var
iFile: Integer;
begin
for iFile := 0 to Count -1 do
begin
if LowerCase(Items[iFile].FileName) = LowerCase(FileName) then
begin
Result.Assign(Items[iFile]);
Exit;
end;
end;
Result := nil;
end;
Die Methode SaveValues würde dann aber in ihrer jetzigen Form zu einer Zugriffsverletzung führen,
wenn deren Inhalt nicht mit der dargestellten Listbox übereinstimmt.
Delphi-Quellcode:
procedure TfrmCookieFiles.SaveValues(FileList: TFiles);
var
i: Integer;
f: TFile;
begin
for i := 0 to lstFiles.Items.Count -1 do
begin
f := FileList.GetFileByFileName(lstFiles.Items[i].SubItems[1]);
if Assigned(f) then
f.Checked := lstFiles.Items[i].Checked;
end;
end;