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