Einzelnen Beitrag anzeigen

Rollo62

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

[FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)

  Alt 19. Okt 2018, 12:53
Hallo zusammen,

was stimmt mit diesem Code nicht ?

Vergleiche eigentlich nur auf Standard-Farben von TAlphaColorRec, mit
dem aktuellen Wert, in diese Funktion.

Delphi-Quellcode:
    case LCol of
        TAlphaColorRec.Red : Result := TAlphaColorRec.Fuchsia;
        TAlphaColorRec.Fuchsia : Result := TAlphaColorRec.Blue;
War getestet auf allen Platformen, jetzt noch iOS ...

Plötzlich kommt kein Vergleich mehr durch
Es landet Alles im else Zweig.

Habe es dann erweitert, und mit if Vergleich versucht -> dasselbe Ergebnis

Die Werte im Debugger links und rechts sind gleich, trotzdem geht er nicht ins if.
(z.B. if LCol = LCmp FFFF0000 = FFFF0000)

Habe dann versucht die Bytes einzeln anzufassen s.u., und siehe da,
die R Werte sind plötzlich verschieden.


Delphi-Quellcode:
function TS4Color.Swatch_Next : TAlphaColor;
var
  LCol, LCmp : TAlphaColor;
  LC1, LC2 : System.Byte;
begin
    LCol := Self;

    LCmp := TAlphaColorRec.Red;
    LC1 := TAlphaColorRec(LCol).R; // hier kommt 144 an
    LC2 := TAlphaColorRec(LCmp).R; // und hier 255 bei gleichem LCmp im Debugger, s.o.

    if LC1 = LC2 then
    begin
        if TAlphaColorRec(LCol).G = TAlphaColorRec(LCmp).G then
        begin
            if TAlphaColorRec(LCol).B = TAlphaColorRec(LCmp).B then
            begin
                LCmp := 0;
            end;

        end;
    end;


    case LCol of
        TAlphaColorRec.Red : Result := TAlphaColorRec.Fuchsia;
        TAlphaColorRec.Fuchsia : Result := TAlphaColorRec.Blue;
        TAlphaColorRec.Blue : Result := TAlphaColorRec.Darkblue;
        TAlphaColorRec.Darkblue : Result := TAlphaColorRec.Lightblue;
        TAlphaColorRec.Lightblue : Result := TAlphaColorRec.Green;
        TAlphaColorRec.Green : Result := TAlphaColorRec.Darkgreen;
        TAlphaColorRec.Darkgreen : Result := TAlphaColorRec.Lightgreen;
        TAlphaColorRec.Lightgreen : Result := TAlphaColorRec.Cyan;
        TAlphaColorRec.Cyan : Result := TAlphaColorRec.Purple;
        TAlphaColorRec.Purple : Result := TAlphaColorRec.Orangered;
        TAlphaColorRec.Orangered : Result := TAlphaColorRec.Red;
        else
                                    Result := TAlphaColorRec.Red;
    end;

    Self := Result; // Make myself also different

end;
Wie kann das sein, wahrscheinlich bin ich schon überarbeitet und brauche jetzt mal eine Pause

Geändert von Rollo62 (20. Okt 2018 um 06:30 Uhr)
  Mit Zitat antworten Zitat