0

Farbwert für Datenfeld "Farbe" berechnen/automatisch einsetzen?

Grüsst Euch, Forum!

Ich möchte Farbfelder einsetzen, dessen Wert "berechnet" und automatisch gesetzt wird.

Einerseits habe ich 3 Zellen, R G und B, die die Anfangsfarbe generieren sollen, anschliessend möchte ich daraus Variationen ableiten und als Farbe zeigen...

Ist das möglich?

16 Antworten

null
    • mirko3
    • vor 3 Monaten
    • Gemeldet - anzeigen

    Hallo Herr Grün. Wenn Du Textfelder für R,G,B benutzt und diese auch so heißen, dann sollte es so funktionieren,

    color("rgb(" + R + "," + G + "," + B + ")")
    

    wenn es Zahlenfelder sind, dann so.

    let r:=text(R);
    let g:=text(G);
    let b:=text(B)
    color("rgb(" + r + "," + g + "," + b + ")")
    

    Mirko

      • David Braun Gestalter HfG
      • Herr_Grun
      • vor 3 Monaten
      • Gemeldet - anzeigen

       

      Vielen Dank, Mirko.

      Aber ich habs nicht zum Laufen bekommen.

      Die Felder sind Zahlenfelder, hab ich also Version 2 genommen und im Farbfeld ins "Trigger nach Änderung" kopiert.

      Am falschen Ort eingesetzt?

      (Sollte nach der zweitletzten Zeile noch ein Semikolon ans Zeilenende?)

      • Ninox-Professional
      • planoxpro
      • vor 3 Monaten
      • Gemeldet - anzeigen

      Hallo, die RGB-Parameter werden numerisch angegeben, also bspw für Orange:

      color(255, 165, 0)
      

      Hexadezimalwerte und CSS-Farbnamen hingegen werden als String angegeben:

      color("#FFA500")
      
      color("Orange")
      
      • mirko3
      • vor 3 Monaten
      • Gemeldet - anzeigen

       ja, es fehlt das Semikolon. Aber bei Zahlenfeldern geht eleganter die Version von Planox.

    • mirko3
    • vor 3 Monaten
    • Gemeldet - anzeigen

    ...und eben auch als String

    color("rgb(22,50,25)")
    
      • Ninox-Professional
      • planoxpro
      • vor 3 Monaten
      • Gemeldet - anzeigen

       Ja, sorry, ich hätte schreiben sollen "[...] können auch numerisch angegeben werden" (was in diesem Fall als die bessere Variante erschien). Es war nicht meine Absicht, deinen Ansatz als generell falsch darzustellen. Manchmal hat man halt den Tunnelblick ... 😉

    • David Braun Gestalter HfG
    • Herr_Grun
    • vor 3 Monaten
    • Gemeldet - anzeigen

    Vielen Dank! Habs probiert, das skript

    let r := text(R);
    let g := text(G);
    let b := text(B);
    color(r + g + b)

    wird akzeptiert, aber es tut sich nichts. 

    Es ist im Farbfeld (das die Farbe anzeigen soll) eingefügt, unter 

    "Trigger nach Änderung"

    Dann habe ich

    - eine Farbe manuell eingefügt

    - in die Felder R, G, B zahlen eingefügt

    (Also im Farbfeld und in den Feldern (R G B) Änderungen vorgenommen) 

    ...

    Sollte der Trigger evtl. in den Zahlenfelder (R G B) gesetzt und das Farbfeld "ferngesteuert" werden?

    👏

    Ich spiele jetzt noch ein wenig herum und lese mich im Handbuch schlau. Für Tips und Hinweise bin ich natürlich dankbar!

      • mirko3
      • vor 3 Monaten
      • Gemeldet - anzeigen

       Schreibe den Code in ein Funktionsfeld (Variante A), dann brauchst du kein Farbfeld, oder als Trigger in das Zahlenfeld "B" (Variante B) - Colorfeld := color(R, G, B). In Deinem Code oben stehen Pluszeichen, müssen aber Kommas sein, vielleicht reicht ja schon das.

    • Ninox-Professional
    • planoxpro
    • vor 3 Monaten
    • Gemeldet - anzeigen

    Hm, sollte es darum gehen, die RGB-Werte des Farbfeldes auszulesen und in die drei Zahlenfelder zu schreiben, um sie dort dann anpassen zu können, so ginge das wohl nur über einen Umweg. Denn m. W. lässt sich der Farbcode nur als Hex-Angabe zurückgeben. Diese müsste dann in Dezimalwerte umgerechnet werden.

    Also angenommen, es gäbe ein Farbfeld namens Farbe, drei Zahlenfelder namens Rot, Grün und Blau sowie ein Formelfeld namens 'Neue Farbe' zur Anzeige der angepassten Werte aus Rot, Grün und Blau.

    Der Code für den „Trigger nach Änderung“ im Feld Farbe könnte dann so aussehen:

    let myHexArray := ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
    let myHexColor := upper(raw(Farbe));
    let myHexR := substr(myHexColor, 1, 2);
    Rot := index(myHexArray, substr(myHexR, 1, 1)) * 1 + index(myHexArray, substr(myHexR, 0, 1)) * pow(16, 1);
    let myHexG := substr(myHexColor, 3, 2);
    'Grün' := index(myHexArray, substr(myHexG, 1, 1)) * 1 + index(myHexArray, substr(myHexG, 0, 1)) * pow(16, 1);
    let myHexB := substr(myHexColor, 5, 2);
    Blau := index(myHexArray, substr(myHexB, 1, 1)) * 1 + index(myHexArray, substr(myHexB, 0, 1)) * pow(16, 1)
    

    Die Werte von Rot, Grün und Blau könnten dann beliebig verändert werden. Das Ergebnis ließe sich in dem Formelfeld 'Neue Farbe' anzeigen: 

    color(Rot, 'Grün', Blau)
    

    Generell würde ich übrigens versuchen, die Namen von Variablen und Datenfeldern immer aus mindestens zwei Zeichen bestehen zu lassen.

    • David Braun Gestalter HfG
    • Herr_Grun
    • vor 3 Monaten
    • Gemeldet - anzeigen

    Hi Mirko und Planox

    Danke vielmals!

    es geht mir eher darum, den Farbwert in klassischen Eingabefelder einzugeben, anstatt im Farbfeld, weil das dort mühselig ist, schneller verändert/verloren geht (?), und bei Bedarf easy auch visuell ausgelesen werden kann... Das Darstellen der Farbe hingegen ist wichtig.

    Das Auslesen in einem Formelfeld funktioniert tadellos

    text(R + ", " + G + ", " + B)

    Ergebnis = "125, 114, 95"

     

    hingegen schaffe ich es nicht, den Wert in ein Textfeld zu schreiben oder (Endziel) das Farbfeld zu beeinflussen?

    Testfeld_txt = text(R + ", " + G + ", " + B)

     

    Testfeld_txt bleibt leer. Auch, wenn ich eingebe

    Testfeld_txt = text('hallo welt')
      • Developer by Smartplanung
      • smartplanung
      • vor 3 Monaten
      • Gemeldet - anzeigen

       Du musst den Doppelpunkt vor das Gleichheitszeichen setzen 😉

      Testfeld_txt := text(R + ", " + G + ", " + B)
      • David Braun Gestalter HfG
      • Herr_Grun
      • vor 3 Monaten
      • Gemeldet - anzeigen

       Cool, ja, natürlich... Danke! Funktioniert beim verlassen des Felds.

      Jetzt also zum Farbfeld... mit Skript

      color(100, 100, 100)

      im Feld "Trigger nach Änderung" macht es keinen Mucks.

      Als externes Skript meldet es 

      "Diese Funktion darf keine Datenänderungen vornehmen"

       

      Ich übersehe wohl was, aber was?

      • Developer by Smartplanung
      • smartplanung
      • vor 3 Monaten
      • Gemeldet - anzeigen

       also es müssen bei RGB Nummern an das Farbfeld übergeben werden. Ich würde für jede Farbe ein Nummernfeld erstellen Red, Green und Blue. Hast Du ja vielleicht auch schon.

      Dann trägst Du in jedem Feld unter Trigger nach Änderung folgendes ein:

      if Red >= 0 and Green >= 0 and Blue >= 0 then
          Farbe := color(Red, Green, Blue)
      end
      

      Zusätzlich kannst Du in den Nummernfeldern noch Minimum (0) und Maximum (255) angeben.

      • David Braun Gestalter HfG
      • Herr_Grun
      • vor 3 Monaten
      • Gemeldet - anzeigen

       Dank Patrick.

      Ist soweit alles da. Die Felder ("R","G" und "B") sind Zahlenfelder, Wert muss zwische 0 und 255 sein.

      Die Zeile 

          Farbe := color(Red, Green, Blue)
      bzw. bei mir im Farbfeld
          color(R, G, B)
      oder
          'auto-RGB':= color(R,G,B);
      

      bewirken leider nix oder (im Skriptfeld) einen Fehler.

      • David Braun Gestalter HfG
      • Herr_Grun
      • vor 3 Monaten
      • Gemeldet - anzeigen

       Habe die Felder umbenannt, Rwert, Gwert, Bwert. Hilft auch nicht.

    • David Braun Gestalter HfG
    • Herr_Grun
    • vor 3 Monaten
    • Gemeldet - anzeigen

    HA! Stop! ES FUNKTIONIERT! JUHU!

Content aside

  • Status Answered
  • vor 3 MonatenZuletzt aktiv
  • 16Antworten
  • 60Ansichten
  • 4 Folge bereits