Bei welchem Code habt ihr denn Probleme?
Im Grunde so wie oben im 1. Beitrag schon beschrieben; hier mal mein Beispiel:
Delphi-Quellcode:
uses
..., Contnrs;
type
TBauteil = class(TObject)
ID : Integer;
Name : string;
end;
TBauteilList = class(TObjectList)
private
function GetItem(ndx: Integer): TBauteil;
public
property Items[ndx: Integer]: TBauteil read GetItem; default;
end;
{ TBauteilList }
function TBauteilList.GetItem(ndx: Integer): TBauteil;
begin
Result := TBauteil(inherited Items[ndx]);
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
LBauteilList : TBauteilList;
LBauteil1 : TBauteil;
LBauteil2 : TBauteil;
i : Integer; { 3 }
begin
LBauteilList := TBauteilList.Create(True);
try
for i := 0 to LBauteilList.Count-1 do
begin
LBauteil1 := LBauteilList[i]; { 1 }
LBauteil2 := LBauteilList[LBauteilList.Count-1]; { 2 }
if Assigned(LBauteil1) and Assigned(LBauteil2) then ;
end;
finally
LBauteilList.Free;
end;
end;
(Ja, die Liste ist leer. Aber es geht um einen Fehler beim compilieren für Win64.)
Delphi 11.3: compiliert ohne Fehler.
Delphi 12.1: In der mit { 2 } markierten Zeile "E2010 Incompatible types: 'TBauteil' and 'TObject'"
Tausche ich in der Klasse TBauteilList den Datentyp für ndx in "NativeInt", dann dreht sich das Verhalten um:
Delphi 11.3: In der mit { 1 } markierten Zeile: "E2010 Incompatible types: 'TBauteil' and 'TObject'"
Delphi 12.1: compiliert ohne Fehler.
Nächster Versuch:
Die Laufvariable "i" (Markierung { 3 }) ändern von Integer nach NativeInt:
Delphi 11.3: Fehler in der Zeile { 2 }
Delphi 12.2: kein Fehler.
Gibt es eine allgemeingültige Lösung?
Von dieser Art Listen -- von TObjectList abgeleitet -- haben wir jede Menge.
Gruß