Das war ein genereller Vorschlag um den Zugriff auf die Elemente abzusichern.
Solche Wrapper kannst Du selber schreiben, am Besten in einer eigenen
Unit, oder als class helper.
Hier mal schnell hingekritzelt (ungetestet), solange das über deinem Code steht sollte der Zugriff wie unten OK sein.
Das Problem in der App kann aber auch von einer ganz anderer Stelle kommen, mir ging es
nur darum diese möglichen Zugriffsfehler auf nil schonmal ausschliessen.
Delphi-Quellcode:
function TryFindObject(const AItem : TListViewItem;
const AName : String;
var AObj : TListItemText ) : Boolean; overload;
begin
if Assigned( AItem ) then
begin
AObj := AItem.Objects.FindObjectT<TListItemText>( AName );
if Assigned( AObj ) then
Result := True
else
Result := False;
end
else
begin
AObj := nil;
Result := False;
end;
end;
function TryFindObject(const AItem : TListViewItem;
const AName : String;
var AObj : TListItemImage ) : Boolean; overload;
begin
if Assigned( AItem ) then
begin
AObj := AItem.Objects.FindObjectT<TListItemImage>( AName );
if Assigned( AObj ) then
Result := True
else
Result := False;
end
else
begin
AObj := nil;
Result := False;
end;
end;
´
//...
procedure InDeinerAnwendungsfunktion;
var
LItem : TListViewItem;
LObjText : TListItemText;
LObjImg : TListItemImage;
begin
LItem := LVEinkauf.items.Add;
if TryFindObject( LItem, 'Anzahl', LObjText) then
LObjText.Text := ReAddBlanks(VList[0]); // <-- hier kannst Du sicher sein das LObj existiert
//...
if TryFindObject( LItem, 'LineImage'', LObjImg) then
LObjImg.Bitmap := Image1.Bitmap; // <-- hier kannst Du sicher sein das LObj existiert
end;
So ein Zugriff über eine Textsuche ist nicht unbedingt ideal, ich würde versuchen das anders zu lösen.
Geht aber wolh in diesem Fall, wenn die Elemente auch wirklich da sind und gefunden werden können.
Am Besten einfach mal debuggen und sehen was zurückgeliefert wird, bevor man darauf zugreift.