Spalten bzw. Zeilenfarbe in Tbrowse [ERLEDIGT]

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Spalten bzw. Zeilenfarbe in Tbrowse [ERLEDIGT]

Beitrag von messing »

Guten Tag,
Ich hab da ein kleines Problem, möchte in einer Tabelle Felder hervorheben, welche ein gewisses Datum erreichen, zwecks HU und AU und SP.

Habe folgende Zeilen

Code: Alles auswählen

tabelle2:=TbrowseDB(2,0,maxrow(),maxcol())
tabelle2:addColumn(TBColumnNew( "KFZART:", {|| kfzart } ))
tabelle2:addColumn(TBColumnNew( "Marke:", {|| marke } ))
tabelle2:addColumn(TBColumnNew( "Kennzeichen:", {|| kennz } ))
tabelle2:addColumn(TBColumnNew( "TUEV bis:", {|| tuev } ))
tabelle2:addColumn(TBColumnNew( "SP bis:", {|| sp_unt } ))
tabelle2:addColumn(TBColumnNew( "Fahrgestellnr.:", {|| kfz_ident } ))

möchte das die Zelle, bei TUEV und SP hervorgehoben wird, wenn noch ein Monat Zeit ist.
Die Felder TUEV und SP sind Datumsfelder.
Kann jemand helfen mit Hinweis, was wo passiert. Habe bis heute große Probleme mit den in der Hilfe befindlichen Anweisungen z.B. oTBColumn:colorBlock := {|n| IIf( n<0, {3,4}, {1,2} ) }
Was dort in den Klammern steht? { |n| für was dieses n? IIf( n<0, {3,4},{1,2} ) } und dann der Vergleich das dieses n kleiner als 0???.
Bitte nicht so umständlich, oder mit Hinweisen, damit ich endlich mal kapiere was in diesen Klammern überhaupt passiert.

Danke an alle.

Gruß Messing :banghead: :banghead: :banghead:
Zuletzt geändert von messing am Mo, 30. Aug 2010 16:47, insgesamt 1-mal geändert.
Gruß
Bruno
Messing
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Spalten bzw. Zeilenfarbe in Tbrowse

Beitrag von brandelh »

Hallo,

das n ist nur ein Beispiel für numerische Variablen die in der Spalte angezeigt werden, unter 0 die eine sonst die andere Farbkombination.
Bei dir wäre nValue ein Datum ...

Code: Alles auswählen

oTBColumn:colorBlock := {|dDatum| IIf( dDatum+30 > date() , {3,4}, {1,2} ) } // einfacher Vergleich mit fixen Tagen
wenn deine Bedingung komplexer ist, besser in eine eigene Funktion auslagern ;-)

Code: Alles auswählen

// Farbauswahl festlegen
oTBrowse:colorSpec := "w,n,w+,g,r" // ich hoffe mal dass ich das richtig in Erinnerung habe ;-)

oTBColumn:colorBlock := {|dDatum| DatumSpezialFarbe(dDatum) }

function  DatumSpezialFarbe(dDatum)
    local aColor
    IF ... hier kommt irgend eine sehr komplexe Abfrage mit .t. / .f. Ergebnis 
        aColor := {1,3}  // vordergrund Farbe 1, Hintergrund 3
    else
        aColor := {4,6}  // vordergrund Farbe 4, Hintergrund 6
    endif
return aColor
Gruß
Hubert
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Spalten bzw. Zeilenfarbe in Tbrowse

Beitrag von messing »

brandelh hat geschrieben:Hallo,

das n ist nur ein Beispiel für numerische Variablen die in der Spalte angezeigt werden, unter 0 die eine sonst die andere Farbkombination.
Bei dir wäre nValue ein Datum ...

Code: Alles auswählen

oTBColumn:colorBlock := {|dDatum| IIf( dDatum+30 > date() , {3,4}, {1,2} ) } // einfacher Vergleich mit fixen Tagen
wenn deine Bedingung komplexer ist, besser in eine eigene Funktion auslagern ;-)

Code: Alles auswählen

// Farbauswahl festlegen
oTBrowse:colorSpec := "w,n,w+,g,r" // ich hoffe mal dass ich das richtig in Erinnerung habe ;-)

oTBColumn:colorBlock := {|dDatum| DatumSpezialFarbe(dDatum) }

function  DatumSpezialFarbe(dDatum)
    local aColor
    IF ... hier kommt irgend eine sehr komplexe Abfrage mit .t. / .f. Ergebnis 
        aColor := {1,3}  // vordergrund Farbe 1, Hintergrund 3
    else
        aColor := {4,6}  // vordergrund Farbe 4, Hintergrund 6
    endif
return aColor
Vielen Dank!
Greife nochmal auf diese Klammer zurück, {|dDatum| DatumSpezialFarbe(dDatum) }
was passiert im ersten Teil |dDatum| eigentlich, egal ob es ein Datum ist oder nicht, was passiert in diesen beiden Strichen?
Das Ende ist mir schon klar, da rufe ich eine Funktion auf mit Wertübergabe.
Ich hab das bis heut nicht reingekriegt :banghead: ,
Gruß
Messing
Gruß
Bruno
Messing
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Spalten bzw. Zeilenfarbe in Tbrowse

Beitrag von Martin Altmann »

Moin,
das ganze zwischen den {}-Klammern wird als Codeblock bezeichnet. Dieser erhält x Werte (mal 1, mal 2 oder auch 3), die in den || am Anfang stehen. Die dort genannten Namen sind einfach nur die Bezeichnungen der Parameter. Diese können innerhalb der {}-Klammern genutzt werden (z.B. als Übergabe an Funktionen).

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Spalten bzw. Zeilenfarbe in Tbrowse

Beitrag von brandelh »

ergänzend dazu ...

Code: Alles auswählen

::iVAR = "bitter"
{| a, b, c| MeineFunktion(a,b,c,::iVAR)}
a, b, c sind die Parameter, die der Codeblock vom aufrufenden Programm oder Control bekommt.
im Codeblock sind das LOCAL Variablen ! Siehe hierzu auch aEval()

::iVAR ist hier eine Instanzvariable vom aktuellen Fenster, die auch im Codeblock übernommen wird.
Diese ist NICHT LOCAL im Codeblock !!!
Und der Codeblock ist nicht innerhalb der Klasse, daher müsste hierfür die iVAR EXPORTED sein !

So hingegen wird die IVAR in einen lokalen Parameter umgewandelt:

Code: Alles auswählen

::iVAR = "bitter"
aEval({| a, b, c,d| MeineFunktion(a,b,c,d)}, p1,p2,self,::iVar 
a ist hier dann die KOPIE (also der Wert, nicht per Referenz) von p1
b " von p2
c " von SELF, also beinhaltet auch die neue Variable eine Referenz auf das aktuelle objekt
d " von ::iVar -> so kann man auch (lesend) auf eine protected iVar zugreifen.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Spalten bzw. Zeilenfarbe in Tbrowse

Beitrag von AUGE_OHR »

messing hat geschrieben:

Code: Alles auswählen

oTBColumn:colorBlock := {|dDatum| IIf( dDatum+30 > date() , {3,4}, {1,2} ) } // einfacher Vergleich mit fixen Tagen
... was passiert im ersten Teil |dDatum| eigentlich, egal ob es ein Datum ist oder nicht, was passiert in diesen beiden Strichen?
die "Striche" nennt man "Pipes" und sind bei :colorBlock überflüssig.

Code: Alles auswählen

tabelle2:=TbrowseDB(2,0,maxrow(),maxcol())
da du wohl ein Hybrid Fenster verwendest : hast du noch INKEY() in deinem Sourcen ?
gruss by OHR
Jimmy
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Spalten bzw. Zeilenfarbe in Tbrowse

Beitrag von messing »

AUGE_OHR hat geschrieben:
messing hat geschrieben:

Code: Alles auswählen

oTBColumn:colorBlock := {|dDatum| IIf( dDatum+30 > date() , {3,4}, {1,2} ) } // einfacher Vergleich mit fixen Tagen
... was passiert im ersten Teil |dDatum| eigentlich, egal ob es ein Datum ist oder nicht, was passiert in diesen beiden Strichen?
die "Striche" nennt man "Pipes" und sind bei :colorBlock überflüssig.

Code: Alles auswählen

tabelle2:=TbrowseDB(2,0,maxrow(),maxcol())
da du wohl ein Hybrid Fenster verwendest : hast du noch INKEY() in deinem Sourcen ?
Ja, habe INKEY() im Source.

Gruß
Messing
[erledigt]
Zuletzt geändert von messing am Di, 30. Mär 2010 14:33, insgesamt 1-mal geändert.
Gruß
Bruno
Messing
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Spalten bzw. Zeilenfarbe in Tbrowse

Beitrag von brandelh »

AUGE_OHR hat geschrieben:
messing hat geschrieben:

Code: Alles auswählen

oTBColumn:colorBlock := {|dDatum| IIf( dDatum+30 > date() , {3,4}, {1,2} ) } // einfacher Vergleich mit fixen Tagen
... was passiert im ersten Teil |dDatum| eigentlich, egal ob es ein Datum ist oder nicht, was passiert in diesen beiden Strichen?
die "Striche" nennt man "Pipes" und sind bei :colorBlock überflüssig.
Hallo Jimmy,

das stimmt nicht !

{|| } ist ein codeblock
{ } ohne die "Pipes" (?) Striche wird daraus ein Array !

oTB:colorBlock erwartet einen Codeblock, also müssen die Striche da rein ;-)
wenn ein Array erwartet wird, dürfen Sie nicht da rein ... :D
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Spalten bzw. Zeilenfarbe in Tbrowse

Beitrag von AUGE_OHR »

brandelh hat geschrieben:das stimmt nicht !

{|| } ist ein codeblock
{ } ohne die "Pipes" (?) Striche wird daraus ein Array !

oTB:colorBlock erwartet einen Codeblock, also müssen die Striche da rein ;-)
wenn ein Array erwartet wird, dürfen Sie nicht da rein ... :D
klar hast du Recht, ich hab das falsch ausgedrückt.

Bei :colorBlock gibt es doch keinen Parameter, also muss nichts "zwischen" den Pipes stehen

Code: Alles auswählen

oCol:COLORBLOCK := { || IF( LIEFER->LIEFNR >= "99990", { 5, 2 }, { 1, 2 } ) }
gruss by OHR
Jimmy
Antworten