Array browsen mit farbiger Zelle [erledigt]

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Array browsen mit farbiger Zelle [erledigt]

Beitrag von Ewald »

Moin zusammen,
ich browse ein Array und möchte Farbe ins Spiel bringen. Das gleiche Browser-Fenster mit einer Datenbank hat mich eigentlich nicht vor solche Probleme gestellt, da ich da direkt den Feld-Inhalt abfragen kann.
Also konkret: Ich möchte schon beim Aufruf des Browsers die Zelle Vorname farblich markiert haben wenn "Ewald" darin steht. Ohne das ich sie anspringe oder editiere. Wenn etwas anderes in der Zelle steht
soll sich die Farbe ändern wenn ich "Ewald" reinschreibe. Beide hier gezeigten Versuche führen nicht zum Erfolg, wobei Versuch 1 schon der absoluten Ratlosigkeit zugeordnet werden muss. Versuch 2 bringt zwar
Farbe ins Spiel, aber nicht auf den Zelleninhalt "Ewald" beschränkt. Kann aber eigentlich auch nur funktionieren, wenn ich im Fenster rumklicke. Irgendwie muss ein Codeblock mit dem ob1:??? her vermute ich mal.
Kann mir bitte mal jemand auf Rad helfen ;-)

Gruß
Ewald

Code: Alles auswählen

aadd(aarr,{"Ewald","Saur","Castrop"})
aadd(aarr,{"Roxana","Meier","Hamburg"})

@ 01,01 dcbrowse ob1 data aarr size 120,10 fit ;
            edit ..... ;    
           pointer nkey

dcbrowsecol element 1 header "Vorname" parent ob1 width 10 ;
                      ;//color {|a|if(a[1]="Ewald",{GRA_CLR_RED,NIL},{NIL,NIL})}
                      ;//color {||if(aarr[nkey,1]="Ewald",{GRA_CLR_RED,NIL},{NIL,NIL})}
dcbrowsecol element 2 header "Name"    parent ob1 width 10
dcbrowsecol element 3 header "Ort"     parent ob1 width 10
Zuletzt geändert von Ewald am Di, 15. Sep 2015 14:57, insgesamt 1-mal geändert.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Array browsen mit farbiger Zelle

Beitrag von Wolfgang Ciriack »

Code: Alles auswählen

dcbrowsecol element 1 header "Vorname" parent ob1 width 10 ;
                     color {|| if(DC_GetColArray(1,ob1)="Ewald", {GRA_CLR_RED,NIL},{NIL,NIL})}
Viele Grüße
Wolfgang
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Array browsen mit farbiger Zelle

Beitrag von Ewald »

:blob8: Danke Wolfgang.
Ob ich wohl bis grade DC_GetColArray irgendwie nur mit DC_GetColor in Verbindung gebracht habe ;-)
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Array browsen mit farbiger Zelle [erledigt]

Beitrag von Tom »

DC_GetColArray gibt den Inhalt der Arrayzelle zurück, relativ bezogen auf die Browserzeile. DC_GetColArray(x,oBrowse) gibt Dir in der aktuellen Zeile den Inhalt der Spalte "x". Wenn man in DATA-Spalten und Arrays arbeitet, ist das viel mächtiger als die ELEMENT-Klausel.

Es geht aber noch einfacher:

Code: Alles auswählen

color {|x|if(x="Ewald", {GRA_CLR_RED,NIL},{NIL,NIL})}
Bei Browserfarben und Windows ab XP sowie verwendeten Manifesten ist zu beachten, dass Vordergrundfarben nicht mehr funktionieren. Das geht nur mit Ownerdrawing.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Array browsen mit farbiger Zelle [erledigt]

Beitrag von Tom »

Noch zwei Ergänzungen:

Erstens:

Code: Alles auswählen

DCBROWSECOL DATA {||DC_GetColArray(1,oBrowse)}
wäre der Ersatz für "DCBROWSECOL ELEMENT 1", hier allerdings ohne nennenswerte Wirkung. Das schöne ist, dass man mit dieser Funktion auch noch Auswertungen auf die Inhalte legen kann, also Formatierungen oder ähnliches. Nachteil: Das native Editing von DCBROWSE funktioniert nicht mehr. Das geht nur mit der ELEMENT-Klausel oder mit weiteren Ergänzungen.

Zweitens:

Ich würde keine verschachtelten IF()-Funktionen in den COLOR-Codeblock legen, sondern eine Farbfunktion:

Code: Alles auswählen

DCBROWSECOL ELEMENT 1 COLOR {|x|NamensFarben(x,oBrowse)}

FUNCTION NamensFarben(c,oBrowse)
DO CASE
  CASE c = 'Ewald'
  RETURN {GRA_CLR_RED,NIL}
  ...
ENDCASE
RETURN oBrowse:RowColor() // Standardfarbe retournieren, ggf. Zebra, wenn gesetzt
Das ist eleganter und kann leicht häufiger verwendet werden.
Herzlich,
Tom
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Array browsen mit farbiger Zelle [erledigt]

Beitrag von Ewald »

Hallo Tom,
werde ich alles austesten. Danke.
Wie ich heute morgen gelesen kommst du in meine Nachbarschaft nach RE. Was es alles gibt ;-)
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Array browsen mit farbiger Zelle [erledigt]

Beitrag von Tom »

Wie ich heute morgen gelesen kommst du in meine Nachbarschaft nach RE.
Jo, zwei Lesungen nächste Woche, eine in Recklinghausen und eine in Essen. Ist aber nichts Ungewöhnliches, wenn man Bücher schreibt und veröffentlicht. :wink:
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Array browsen mit farbiger Zelle [erledigt]

Beitrag von Tom »

Ach so. Du kannst im Color-Codeblock natürlich auch irgendeine andere Arrayspalte referenzieren. Nehmen wir an, Du hast in Spalte 1 die Namen und in Spalte 17 das Geschlecht ('m' oder 'w'), dann geht das so:

Code: Alles auswählen

DCBROWSECOL ELEMENT 1 COLOR {||Geschlechtsfarben(DC_GetColArray(17,oBrowse))}

FUNCTION Geschlechtsfarben(cGeschlecht)
RETURN {IF(cGeschlecht='m',GRA_CLR_BLUE,GRA_CLR_RED),GRA_CLR_WHITE}
Dafür ist nicht nötig, dass Spalte 17 auch im Browser verwendet wird!
Herzlich,
Tom
Antworten