Hallo,
und wieder eine Sache, bei der ich nicht weiterkomme und auch keine wirkliche Hilfe im Netz gefunden habe.
Ich verwende eine TCheckListBox und hänge an die Einträge noch Daten. Hier die Funktion, die die Checklistbox füllt. Die Daten dazu stammen aus einer abgeleiteten TList Klasse namens ASList:
Delphi-Quellcode:
procedure TASManForm.FillASListBox(ASList: TTC7AutoStart; FilterSet: TListFilter);
var
i: integer;
ASStruc: TTC7AutoStartStruc;
ASPointer: PTTC7AutoStartStruc;
begin
DisposeList(ListBox_AS); //<- hier kracht es beim zweiten Durchlauf, Procedure ist unten gelistet
ListBox_AS.Clear;
if ASList.Count>0 then begin
ListBox_AS.Items.BeginUpdate;
for i:=0 to ASList.Count-1 do begin
ASPointer := ASList[i];
ASStruc := ASPointer^;
if ASStruc.AutoStartDangerLevel in FilterSet then begin
ListBox_AS.Items.AddObject(ASStruc.FileData.FileName, TObject(ASPointer));
end;
end;
ListBox_AS.Items.EndUpdate;
end;
end;
Funktioniert wunderbar. Die Daten werden angelegt und in der Liste verankert.
Hier ist meine bisherige DisposeList Procedure:
Delphi-Quellcode:
//TCheckListBox
procedure DisposeList(List: TCheckListBox);
var
c: integer;
i: integer;
ASPointer: PTTC7AutoStartStruc;
begin
c := List.Items.Count;
if c>0 then begin
for i:=0 to c-1 do begin
if Assigned(List.Items.Objects[i]) then begin
// ASPointer := PTTC7AutoStartStruc(List.Items.Objects[i]);
Dispose(PTTC7AutoStartStruc(List.Items.Objects[i])); //<- hier kracht es
end;
end;
end;
end;
Ich hab es schon mit verschiedenen Typecasts (TObject, PTTC7AutoStartStruc) probiert, keine Chance.
Habt ihr eine Ahnung, wo ich noch einen Denkfehler habe? Laut Debugger ist jeder Pointer assigned und ich kann auch noch die Daten auslesen, bis zum Dispose. Führe ich dann die Disposezeile auf gibts eine schicke EInvalidPointer
Exception
Erst wenn man dreimal auf Holz klopfen will, stellt man fest, dass die Welt nur noch aus Plastik und Aluminium besteht.