Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
3.916 Beiträge
 
Delphi 12 Athens
 
#4

AW: FMX Listview Einträge Richtig Laden

  Alt 7. Aug 2019, 19:10
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.

Geändert von Rollo62 ( 7. Aug 2019 um 19:16 Uhr)
  Mit Zitat antworten Zitat