Browserzellen ermitteln

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Browserzellen ermitteln

Beitrag von Manfred »

ich habe einen Arraybrowser, dessen Daten ich über eine Schleife prüfen möchte.

Code: Alles auswählen

FOR nI := 1 TO Len(::aBrowseUnterricht)                               // es wird generell immer alles druchlaufen, da es nicht so viele Sätze sein werden
              IF ! Empty(::aBrowseUnterricht[nI]:datum)
                 IF TimeToSec(::aBrowseUnterricht[nI]:zeitbis) - TimeToSec(::aBrowseUnterricht[nI]:zeitvon) > 0 // die Zeit muß logisch sein.
                    IF ! Empty(::aBrowseUnterricht[nI]:idlehrer)
                    ENDIF
                 ENDIF
              ENDIF
          NEXT
ich möchte an jeder Abfragestelle, die nicht dem Wunsch entspricht nun die entsprechende Zelle einfärben. Ich komme aber nicht drauf, wie ich jetzt im Browseobjekt die Hintergrundfarbe setzen kann/muß. Ist sicherlich einfach, aber es fällt mir nicht ein. Ich weiß zwar durch nI welche Zeile ich in dem Browseobjekt habe, aber wie komme ich an die Zelle ran?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: Browserzellen ermitteln

Beitrag von Tom »

Das musst Du im ColorBlock der Column/Cellgroup abfangen. Eine Zelle ist ein Bestandteil der Cellgroup (die letztlich ein Static ist), aber die Zelle selbst ist kein Objekt.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browserzellen ermitteln

Beitrag von Manfred »

ja, das weiß ich irgendwie, aber wie sieht der Code dafür aus? Ich habe im Moment keinen Schimmer, wie ich das Objekt as solches abfragen muß. Sicherlich irgendwas mit ::oBrowseunterricht[nI]:getcell() oder so. Mir fehlt der letzte entscheidende Hinweis dazu.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: Browserzellen ermitteln

Beitrag von Tom »

Den Inhalt einer Zelle bekommst Du im COLOR-Codeblock von DCBROWSECOL als Parameter:

Code: Alles auswählen

DCBROWSECOL ... COLOR {|x|IF(x="Juhu",aColor[1],aColor[2])}
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browserzellen ermitteln

Beitrag von Manfred »

hm, das wollte ich eigentlich vermeiden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: Browserzellen ermitteln

Beitrag von Tom »

Du willst direkt eine Zelle einfärben? Kann ich Dir morgen den Code für geben.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Jan »

Manfred,

Du postest das nicht im Fachbereich zu eXpress++. Machst Du das also mit einem XbüBrowse?

Wenn ja, kannst Du über oSpalte:colorblock die Farbe setzen. Da gibt es vier Parameter: Vordergrundfarbe, Hintergrundfarbe, Vordergrundfarbe des Cursors, Hintergrundfarbe des Cursors. Ich markiere da mit recht häufig Zellen, die bestimmte Bedingungen erfüllen.

Wobei ich jetzt einfach mal hoffe, bei Dir nicht wieder am Thema vorbei zu antworten...

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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Tom »

Man kann auch die Zelle direkt einfärben. Hat nix mit eXpress++ zu tun.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browserzellen ermitteln

Beitrag von Manfred »

ich mache das mit express++ ,aber ich denke mal, an der Stelle kann/muß/sollte man ruhig in purem Xbase++ angreifen. Ein bisschen möchte ich ja auch noch dazulernen :wink:
Aber das ist ja meine Frage, wie ermittel ich an der Stelle über das Browserobjekt die Spalte und/oder die Zelle? Die Zeile habe ich ja
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Martin Altmann »

Moin,
schon mal :colPos angeschaut?

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
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: Browserzellen ermitteln

Beitrag von Tom »

Also, Manfred.

Du hast ein zweidimensionales Array, dessen Inhalt gebraust wird - ein Array aus DataObjects. Wenn die Differenz des Inhalts zweier iVars (zeitbis,zeitvon) größer Null ist, sollen die Zellen, die aber eigentlich eine andere Information aus dem jeweiligen DataObject anzeigen, hervorgehoben werden. Verstehe ich das richtig? Vermutlich soll der Benutzer die Option wählen können (siehe unten).

Dein Freund wäre "setCellColor", eine Methode der XbpCellGroup-Klasse. Aus (bis zu drei) Objekten dieser Klasse bestehen XbpColumns. Es gibt eines für die Spaltenüberschriften (oColumn:Heading), eines für den Datenbereich (oColumn:DataArea) und ggf. eines für die Fußzeile (oColumn:Footing). Mit oColumn:DataArea:SetCellColor(<nRowPos>,<nColorFG>,<nColorBG>,.T.) kannst Du die Farbe der Zelle in der Zeile nRowPos der Spalte oColumn setzen, und das .T. am Ende bewirkt, dass die Farbe sofort angezeigt wird (bis ein Repaint des Browses erfolgt und ggf. die ColorBlöcke andere Ergebnisse liefern!). Aber, Achtung: nRowPos ist die Ordinalposition der Zelle! Wenn das Brause gerade mit Zeile 15 beginnt, weil Zeilen 1 bis 14 nicht zu sehen ist, hebt man mit 3 als nRowPos den Inhalt der Arrayzeile 18 hervor! Du müsstest vorher herausbekommen, welches die TopRow ist (das findest Du in den Beispielen).

Nicht nur deshalb - vor allem aber wegen der Gefahr, die Einfärbung gleich wieder zu verlieren, wenn ein Refresh erfolgt - würde ich das anders machen. Deine Abfrage ist ein Klassiker für den ColorBlock {|o|IF(o:zeitbis < o:zeitvon,aFARBE1,aFARBE2)]}, und wenn Du das von einer Benutzerinteraktion abhängig machen willst (Checkbox "Hebe alle Zellen hervor, bei denen Zeitintervalle vorliegen"), dann nimmst Du noch ein .AND. in die Abfrage {|o|IF(lHebeZeitenHervor .AND. o:zeitbis < o:zeitvon,aFARBE1,aFARBE2)]}. In solchen Fällen reicht ein simples oBrowse:RefreshAll(), um sämtliche ColorBlöcke feuern zu lassen. Noch eleganter wäre die Abfrage im UI-Thread (Ownerdrawing), da würde dann ein oBrowse:InvalidateRect() ausreichen. Der Codeblock kann in jeder Column recyclet werden.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browserzellen ermitteln

Beitrag von Manfred »

ok, ich merke das führt irgendwie in die Dunkelheit.
nochmal von vorne:
ich steh hier und ermittel erstmal die Zeile, in der der Cursor im browser steht.

Code: Alles auswählen

nZeile := DC_GetColArray(0,::oBrowse)
dann durchlaufe ich das DataObject der Zeile

Code: Alles auswählen

FOR nI := 1 TO Len(::aBrowseUnterricht)
jetzt möchte ich gerne an das passende Objekt rankommen. und das müßte so gehen

Code: Alles auswählen

::oBrowseUnterricht:getcolumn(nI)
das liefert mir ein Xbpcolumn zurück
hiermit

Code: Alles auswählen

::oBrowseUnterricht:getcolumn(nI):dataarea
bekomme ich ein XbpCellGroup zurück.
Reicht das, oder muß ich noch tiefer bohren? Kann ich damit schon etwas anfangen? Oder bin ich schon zu tief hier? Irgendwann müßte ich doch da landen, wo ich die Farbe der Zelle ändern kann.
Oder liege ich schon total falsch?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: Browserzellen ermitteln

Beitrag von Tom »

Jetzt müsstest Du nur noch wissen, mit welcher Zelle das Browse aktuell beginnt (um aus Deinem Rückgabewert von DC_GetColArray(0,oBrowse) die Ordinalposition zu errechnen), dann könntest Du SetCellColor abfeuern, was ohnehin nur für sichtbare Zellen geht:

Code: Alles auswählen

::oBrowseUnterricht:getcolumn(nI):dataarea:SetCellColor(nZeile-nTopOffset,GRA_CLR_BLUE,GRA_CLR_RED,.T.)
Wenn es keine anderen Farbangaben gibt, müsste das reichen. Wenn es Color-Codeblöcke gibt, ist das mit dem nächsten Refresh wieder dahin.
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Koverhage »

Das Zebra Beispiel hilft Dir nicht ?
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Browserzellen ermitteln

Beitrag von Manfred »

ich erinnere mich ganz entfernt. Aber war das nicht zeilenorientiert?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: Browserzellen ermitteln

Beitrag von Tom »

Das arbeitet auch mit den ColorBlöcken. Es ist möglicherweise nicht sinnvoll, mit SetCellColor und ähnlichem die (überhaupt nicht existenten) Zellen direkt zu manipulieren, da das einen nur sehr vorübergehenden Effekt hat, sowieso nur die sichtbaren Zellen betrifft und etwas schwergängig ist. Es ist in fast allen Fällen sehr viel sinnvoller, die bereits etablierten ColorBlöcke dafür zu nutzen - wie in meinem Beispiel gezeigt. Es sei denn, es geht darum, nur in der aktiven Zeile zu highlighten.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browserzellen ermitteln

Beitrag von AUGE_OHR »

hi,

Ich bin ja kein Express User also frage ich mal als Newbie :
muss man bei Express++ nicht auch den "visual Style" für o:DataArea "abschalten" damit man Farbe bekommt ( ausser Hilite-Bar ) :?:
gruss by OHR
Jimmy
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: Browserzellen ermitteln

Beitrag von Tom »

Das hat mit eXpress++ nichts zu tun - sind ja auch XbpBrowses, Jimmy. Also funktioniert es bei vorhandenen Manifesten und aktiven visuellen Stilen nur mit den Vordergrundfarben, außer, man arbeitet (zusätzlich) mit Ownerdrawing oder mit lokal abgeschalteter Verwendung der visuellen Stile.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Browserzellen ermitteln

Beitrag von AUGE_OHR »

hi,

die Frage war für Manfred gedacht da er nicht an die Farben kommt ...
gruss by OHR
Jimmy
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: Browserzellen ermitteln

Beitrag von Tom »

Die Frage war, wie er an die Zellen kommt. Farben als Problem wurden hier bislang nicht diskutiert.
Herzlich,
Tom
Antworten