2016-05-11 12 views
2

Ich habe eine Anwendung in Delphi 10.1 Berlin mit Windows als Master View erstellt. Ich habe eine TListView auf dem Formular gelöscht und mit dem neuen Toggle Design Mode angepasst. Ich habe ein TImageObjectAppearance und mehrere TTextObjectAppearance Elemente hinzugefügt. Ich habe Code hinzugefügt, um das Bild für TImageObjectAppearance festzulegen, und die Textelemente haben verschiedene Schriftgrößen und -stile. Ich habe auch 3 TImage-Komponenten in dem Formular, das ich der TImageObjectAppearance.Bitmap basierend auf einem Wert zuweisen.Delphi Berlin: FMX-TListView, Wechsel zwischen Windows und Android

Wenn ich es für Win32 kompiliere und alles läuft sieht alles gut aus. Die Bitmap-Bilder werden basierend auf dem Wert in jeder Zeile der TListView angezeigt. Wenn ich den Stil auf Android und die Sicht auf Android 10" Tablet die IDE wirft diesen Fehler:

‚wechseln. Es kann keine TAppearanceObjectItem zu einem TAppearanceObjectItem zuweisen‘

Die noch Ansicht sagt Android 10" Tablet aber die tatsächliche Ansicht auf dem Formular ist immer noch ein Windows-Formular. Also meine erste Frage ist, was zum Teufel ist dieser Fehler überhaupt? Ich dachte, Delphi sollte in der Lage sein, alle diese verschiedenen Ziele/Geräte mit demselben Code zu kompilieren. Das passiert sicherlich nicht. Aber warten Sie, es gibt mehr ...

So wechselte ich zurück zu Stil: Windows und View: Master. Ich klickte auf das TImageObjectAppearance Element in dem Formular und drückte die Entf-Taste, und ich habe diesen Fehler:

"Kann nicht eine persistente Referenz aus dem Designer löschen."

Wenn Sie jedoch auf das Element im Strukturfenster klicken und auf Löschen klicken, wird es gelöscht. Fehler? So würde ich sagen. Wie auch immer, es gibt mehr. Ich löschte den TImageObjectAppearance Artikel aus dem Strukturfenster und dann wieder zu Style: Android und View: Android 10 "Tablet und rate mal ... Ich bekomme den gleichen Fehler. Aber es gibt nicht TImageObjectAppearance auf dem Formular! Also lösche ich vollständig die TListView-benutzerdefinierten Elemente in Windows | Master-Ansicht und starten Sie neu mit Android 10 "Tablet-Ansicht. Ich füge alle benutzerdefinierten Aussehen Objekte, einschließlich der TImageObjectAppearnce.But, wenn ich es für ein 10 "Android Tablet kompilieren und es auf meinem Galaxy Tab S2, 1) Keine Bilder erscheinen.Hier ist der Code, den ich schrieb, um die Bilder zu setzen sind 3 TImage-Komponenten auf dem Formular, das ich für die TImageObjectAppearance Elemente verwenden.) Dieser Code funktioniert nur gut, wenn für Win32 kompilieren.

function TdmVisual.AddOrUpdateItem(AItem: TListViewItem; AMGDL: Integer): TListViewItem; 
var 
    LObject: TListItemImage; 

begin 
    Result   := AItem; 
    LObject  := Result.Objects.FindObjectT<TListItemImage>('imgRating'); 
    LObject.Bitmap := TBitmap.Create; 

    if AMGDL < 70 then 
    LObject.Bitmap.Assign(fmMain.iLow.Bitmap) 
    else if (AMGDL >= 70) and (AMGDL <= 130) then 
    LObject.Bitmap.Assign(fmMain.iGreen.Bitmap) 
    else if (AMGDL > 130) and (AMGDL <= 180) then 
    LObject.Bitmap.Assign(fmMain.iYellow.Bitmap) 
    else 
    LObject.Bitmap.Assign(fmMain.iRed.Bitmap); 
end; 

Meine zweite (3. oder 4.) Frage ist, warum nicht der obige Code funktioniert, wenn für Android kompilieren und was ist der richtige Weg, Bilder zu einem TImageObjectAppearance in Code zuweisen?

Dank -Barry

+0

Wo ist Ihre AddOrUpdateItem Funktion aufgerufen? Außerdem scheint es nicht richtig, dass Sie von einer Funktion einen Wert zurückgeben, der als Parameter übergeben wurde. Warum nicht einfach einen var-Parameter verwenden? – nolaspeaker

+0

Lassen Sie uns einfach die Methode ignorieren und konzentrieren uns auf die eigentliche Frage: Was ist die richtige Methode, um Bilder einem TImageObjectAppearance im Code zuzuordnen? Und das Ziel des Projekts ist Android. Der Code innerhalb der Prozedur funktioniert, wenn das Ziel Win32, aber nicht Android ist. – BDirks

Antwort