codeblock

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

codeblock

Beitrag 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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14417
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 19 Mal
Danksagung erhalten: 59 Mal
Kontaktdaten:

Re: codeblock

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8947
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 63 Mal
Danksagung erhalten: 235 Mal
Kontaktdaten:

Re: codeblock

Beitrag 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.
Herzlich,
Tom
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: codeblock

Beitrag 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.
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 641
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 27 Mal
Danksagung erhalten: 127 Mal
Kontaktdaten:

Re: codeblock

Beitrag von Marcus Herz »

Vielleicht hilfts, auch ne Farbe im letzten Return zurückzugeben
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14417
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 19 Mal
Danksagung erhalten: 59 Mal
Kontaktdaten:

Re: codeblock

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12774
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 17 Mal
Danksagung erhalten: 24 Mal

Re: codeblock

Beitrag 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
gruss by OHR
Jimmy
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: codeblock

Beitrag von saul »

Habe den Fehler gefunden. Hatte falschen Variblentyp übergeben. Jetzt läuft das Programm.
Danke für die Hilfe.

Wolfgang
Antworten