Seite 1 von 1
codeblock
Verfasst: Fr, 12. Aug 2022 10:28
von saul
Hallo,
mit
oLFZEingabe:Abrowse:GetColumn(1):ColorBlock := { | nData | IIF( Val(nData)<0,{GRA_CLR_BLACK,GRA_CLR_YELLOW},) }
kann ich die Farbe wechseln bei verschiedenen Werten. Gibt es auch die Möglichkeit in einer Anwendung je nach wert die Farben zu wechseln?
<0 = Schwarz auf Rot
>=0 und < 10 = Schwarz auf Gelb
>=10 und < 100 = Schwarz auf Blau
Wie muss da der Codeblock aussehen?
Wolfgang
Re: codeblock
Verfasst: Fr, 12. Aug 2022 10:34
von Jan
Hallo Wolfgang,
im Prinzip wie Du das jetzt schon machst. Halt nur mehrere IIF-Abfragen ineinander verschachtelt.
Code: Alles auswählen
oSpalte:colorBlock := {|x| IIf(Empty(aPositionen[nRecnoPosition]:projekt) .AND. aPositionen[nRecnoPosition]:prodmita < 1, ; // Arbeitszeit für Kundenauftrag
{GRA_CLR_BLACK, hintergrundgruen()}, ;
IIf(aPositionen[nRecnoPosition]:prodmita < 1, ; // Es gibt kein Produktionsdatum = Artikel
{GRA_CLR_BLACK, hintergrundgelb()}, ;
{GRA_CLR_BLACK, GRA_CLR_BACKGROUND}))}
Das Problem ist: Das wird dann auch ganz schnell mal unübersichtlich. Ich lagere das dann gerne aus.
Code: Alles auswählen
oSpalte:colorBlock := {|x| farbenBrowseAuze(nSpalte)} // Die Farben extern zusammenstellen, wird sonst riesige IIF()-Schachtelei
...
FUNCTION farbenBrowseAuze(nSpalte)
LOCAL aColorBlock := {}
LOCAL cHintergrund := GRA_CLR_BACKGROUND
LOCAL cVordergrund := GRA_CLR_BLACK
plzregion->(myDbSeek(SubStr(auze->plz, 1, 2)))
IF SubStr(auze->zeilpos, 1, 4) == " 1/"
cVordergrund := GRA_CLR_RED
ELSEIF auze->versandort[1] $ MEMVAR->gcLagerbereicheGaertnerei .AND. Len(AllTrim(auze->versandort)) < 2
cVordergrund := GRA_CLR_BLACK
...
ENDIF
aColorBlock := {cVordergrund, cHintergrund} // Vorder- und Hintergrundfarben dem ColorBlock zuweisen
RETURN aColorBlock
Jan
Re: codeblock
Verfasst: Fr, 12. Aug 2022 13:09
von Tom
Der ColorBlock-Codeblock wird evaluiert (also ausgeführt), wenn RefreshCurrent() auf eine betroffene Zeile oder RefreshAll() auf das gesamte Browse angewendet werden. Wechselt dann der Wert, der die Farbauswahl bestimmt, wechselt auch die Farbe.
Re: codeblock
Verfasst: Fr, 12. Aug 2022 15:08
von saul
Dank für die Rückmeldung. Habe das mal für mich umgeschrieben.
Code: Alles auswählen
oLFZEingabe:Abrowse:GetColumn(2):ColorBlock := {|x| farbenBrowseAuze( val (X))} // val(X) weil x =Caracter Variable ist
.......
FUNCTION farbenBrowseAuze(nSpalte)
if nSpalte <0
Return {GRA_CLR_BLACK, GRA_CLR_WHITE}
endif
if nSpalte <10 .and. nSpalte >=0
Return {GRA_CLR_BLACK, GRA_CLR_YELLOW}
endif
RETURN .t.
Leider funktioniert mein Coade nicht.
Re: codeblock
Verfasst: Fr, 12. Aug 2022 15:21
von Marcus Herz
Vielleicht hilfts, auch ne Farbe im letzten Return zurückzugeben
Re: codeblock
Verfasst: Fr, 12. Aug 2022 15:36
von Jan
saul hat geschrieben: ↑Fr, 12. Aug 2022 15:08
Leider funktioniert mein Coade nicht.
Das hilft ja leider nicht wirklich weiter. Gibt es eine Fehlermeldung? Was sonst? Welche Farben werden denn angezeigt?
Ich vermute das der Val(x) nicht korrekt funktioniert. Ich habe das ja anders aufgebaut. Und übergebe damit tatsächlich die Position der aktuellen Spalte. Wenn aber Val(x) = 0 ist, dann werden neutrale Farben zurück gegeben.
Was sagt denn der Debugger dazu in der farbenBrowseAuze?
Jan
Re: codeblock
Verfasst: Sa, 13. Aug 2022 8:23
von AUGE_OHR
hi,
Code: Alles auswählen
{|xValue| IIf( <lExpression>, {<nColorFG1>,<nColorBG1>}, ;
{<nColorFG2>,<nColorBG2>} )
Zur Farbdefinition können Konstanten verwendet werden, die mit GRA_CLR_ oder XBP_SYSCLR_ beginnen.
also 2 x Array und 4 Werte
Re: codeblock
Verfasst: Sa, 13. Aug 2022 18:02
von saul
Habe den Fehler gefunden. Hatte falschen Variblentyp übergeben. Jetzt läuft das Programm.
Danke für die Hilfe.
Wolfgang