Textfarbe abrufen
Hallo zusammen,
kann man die Textfarbe vom Eintrag eines dynamischen Auswahlfeldes abrufen
let TxtFarbeTerArt := color(text(DYAF)) funktioniert nicht
Gruß
Andreas
4 Antworten
-
Ja, kann man.
In der Tabelle für das dynAF befindet sich in diesem Beispiel ein Farbfeld.
Das dynAF verweist bei 'Farbe des dynamischen Wertes' auf das Farbfeld der zugrunde liegenden TabelleWenn du ein Berechnungsfeld mit nachfolgendem Script erstellst wird die Ausgewählte Farbe angezeigt.
let vNr := number(DYAF);
record('TABELLE FÜR dynAF',first((select 'TABELLE FÜR dynAF')[number(Nr) = vNr]).Nr).FarbeSoll der HexWert angezeigt werden:
record('TABELLE FÜR dynAF',first((select 'TABELLE FÜR dynAF')[number(Nr) = vNr]).Nr).raw(Farbe)
Den rgb-Wert kann man meines Wissens nicht ableiten, ausser wenn der rgb-Wert hinterlegt wurde. -
Da gibt es keine einfache Möglichkeit.
Denkmodell:
Die Schriftfarbe ist meines Wissens von der Helligkeit der Hintergrundfarbe abhängig.Ist die Helligkeit <= 160, so wird als Schriftfarbe 'weiss' benutzt.
> 160 schwarz
Diesen Wert kann man mit folgender Formel aus einem RGB-Wert ermitteln.
™planox.prosqrt(0.299 * pow(R, 2) + 0.587 * pow(G, 2) + 0.114 * pow(B, 2))
Wenn der rgb-Wert der Hintergrundfarbe bekannt ist oder rechnerisch aus dem hex-Wert ermittelt wird, kann man diese Formel anwenden und dementsprechend die Schriftfarbe, die angezeigt werden soll bestimmen.
-
Ich habe mal ein kleines Script geschrieben um die Helligkeit aus einem Hex-Wert zu berechnen.
Farbe ist ein Farbfeld.
function fx_HexToRgb(vWert : text) do let nWert := null; switch upper(vWert) do case "A": (nWert := 10) case "B": (nWert := 11) case "C": (nWert := 12) case "D": (nWert := 13) case "D": (nWert := 14) case "F": (nWert := 15) default: (nWert := number(vWert)) end; nWert end; let bHex := replace(raw(Farbe), "#", ""); let r := substr(bHex, 0, 2); let g := substr(bHex, 2, 2); let b := substr(bHex, 4, 2); let R := number(fx_HexToRgb(substr(r, 0, 1))) * 16 + number(fx_HexToRgb(substr(r, 1, 1))); let G := number(fx_HexToRgb(substr(g, 0, 1))) * 16 + number(fx_HexToRgb(substr(g, 1, 1))); let B := number(fx_HexToRgb(substr(b, 0, 1))) * 16 + number(fx_HexToRgb(substr(b, 1, 1))); sqrt(0.299 * pow(R, 2) + 0.587 * pow(G, 2) + 0.114 * pow(B, 2))
Anbei noch eine kleine DB zum testen:
Content aside
- vor 2 JahrenZuletzt aktiv
- 4Antworten
- 67Ansichten
-
2
Folge bereits