![]() |
[FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)
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:
War getestet auf allen Platformen, jetzt noch iOS ...
case LCol of
TAlphaColorRec.Red : Result := TAlphaColorRec.Fuchsia; TAlphaColorRec.Fuchsia : Result := TAlphaColorRec.Blue; Plötzlich kommt kein Vergleich mehr durch :shock: 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:
Wie kann das sein, wahrscheinlich bin ich schon überarbeitet und brauche jetzt mal eine Pause :stupid:
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; |
AW: [FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)
Liste der Anhänge anzeigen (Anzahl: 1)
Nochmal weiter analysiert:
Laut ![]() ![]() Zitat:
Es scheint so als würden Vergleiche per "case of" unter iOS nicht zu funktionieren
Delphi-Quellcode:
Vergleiche mit "if then" funktionieren unter iOS schon
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; // <- landet immer hier end;
Delphi-Quellcode:
Im Anhang noch ein kleines Testprogramm, wo ich versucht habe das Problem etwas zu separieren.
if TAlphaColorRec.Red = LCol then
Result := TAlphaColorRec.Fuchsia else if TAlphaColorRec.Fuchsia = LCol then Result := TAlphaColorRec.Blue else if TAlphaColorRec.Blue = LCol then Result := TAlphaColorRec.DarkBlue else if TAlphaColorRec.DarkBlue = LCol then Result := TAlphaColorRec.LightBlue else if TAlphaColorRec.LightBlue = LCol then Result := TAlphaColorRec.Green else if TAlphaColorRec.Green = LCol then Result := TAlphaColorRec.DarkGreen else if TAlphaColorRec.DarkGreen = LCol then Result := TAlphaColorRec.LightGreen else if TAlphaColorRec.LightGreen = LCol then Result := TAlphaColorRec.Cyan else if TAlphaColorRec.Cyan = LCol then Result := TAlphaColorRec.Purple else if TAlphaColorRec.Purple = LCol then Result := TAlphaColorRec.Orangered else Result := TAlphaColorRec.Red; Es liegt wohl nicht daran das TAlphaColor > 32-Bit ist, und auch nicht daran das die Umrechnung von PixelFormaten falsch läuft. Es scheint wirklich am "case of" zu liegen, wobei alle anderen Platformen sich korrekt verhalten. Also werde ich mal mit "if then" weiterarbeiten müssen. Rollo |
AW: [FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)
Ich denke mal nicht dass es etwas mit Farben an sich sondern dem Konzept der
![]() Kannst du das mit einem Mini-Projekt nachstellen? iOS 32 oder 64 Bit oder beide? |
AW: [FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)
Dankesehr für den Hinweis, könnte damit zusammenhängen.
Ich habe aber leider keine Zeit mehr weiter zu Testen, habe damit schon wieder 1 Tag verloren, und muss ein paar Projekttermine einhalten. Aber sind enums überhaupt variante record-Typen ? Ich dachte immer die werden nur auf Cardinal projeziert. Getestet habe ich nur unter iOS-64, ich weiss gar nicht wie ich nur unter iOS-32 Testen sollte, womöglich geht das nur mit alter Hardware. Oder starten die neueren iPhones noch reinen 32-Bit Code im Debug Modus ? Rollo |
AW: [FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)
Enums haben hier doch nichts mit zu tun oder habe ich etwas verpasst?
Zitat:
|
AW: [FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)
Delphi-Quellcode:
Doch das könnte ja was damit zu tun haben, TAlphaColorRec.Red ist ein enum,
case LCol of
TAlphaColorRec.Red : Result := TAlphaColorRec.Fuchsia; genau da funktioniert der Case nicht richtig. Oder was meinst du genau mit den Records ? |
AW: [FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)
Zitat:
|
AW: [FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)
Ja, stimmt, da hast du auch wieder Recht :oops:
Ich sag ja, ich kann mir das auch nicht erklären. Vieleicht hat es was mit dem
Delphi-Quellcode:
zu tun.
Azure = Alpha or TAlphaColor($F0FFFF);
Hatte ja das PixelFormat in Verdacht, aber die Konvertierungsprobleme treten auch bei einer einfachen TAlphaColor Variablen auf. Wie auch immer, bei iOS(64) lande ich IMMEr im else Zweig, bei allen anderen OS holt er sich wie gewünscht das nächste Farbfeld. Hast du das Demo mal getestet, oder verhält sich das bei dir etwa korrekt ? Man muss natürlich den Fehlerfall ent-kommentieren ...
Delphi-Quellcode:
Rollo
LCol := Color_Swatch_Next_ByCase( LCol ); // TAlphaColor compare FAILURE
// LCol := Color_Swatch_Next_ByIfthen( LCol ); // TAlphaColor compare OK |
AW: [FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)
Zitat:
iOS müsste jemand anderes testen. |
AW: [FMX, iOS] TAlphaColor Farbvergleiche falsch (nur iOS)
irgendwas mit den datentypen macht ios da jedenfalls anders.
ich habe mal ganz ketzerisch den farbwert in einen integer geschrieben und siehe da, die case-anweisung funzt damit mit ios
Delphi-Quellcode:
...
var farbwert:integer; ... farbwert:=Acol; case farbwert 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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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