AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein FMX Listview Einträge Richtig Laden
Thema durchsuchen
Ansicht
Themen-Optionen

FMX Listview Einträge Richtig Laden

Ein Thema von jacky213 · begonnen am 7. Aug 2019 · letzter Beitrag vom 8. Aug 2019
 
Rollo62

Registriert seit: 15. Mär 2007
4.239 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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz