Browserzellen ermitteln

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

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

Browserzellen ermitteln

Beitrag von Manfred » Sa, 15. Feb 2020 12:52

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 kannste sein, Hauptsache pfiffig!!

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8173
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 5 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Tom » Sa, 15. Feb 2020 13:11

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: 19661
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 7 Mal
Danksagung erhalten: 26 Mal

Re: Browserzellen ermitteln

Beitrag von Manfred » Sa, 15. Feb 2020 13:15

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 kannste sein, Hauptsache pfiffig!!

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8173
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 5 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Tom » Sa, 15. Feb 2020 13:54

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: 19661
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 7 Mal
Danksagung erhalten: 26 Mal

Re: Browserzellen ermitteln

Beitrag von Manfred » Sa, 15. Feb 2020 13:59

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 kannste sein, Hauptsache pfiffig!!

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8173
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 5 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Tom » Sa, 15. Feb 2020 17:55

Du willst direkt eine Zelle einfärben? Kann ich Dir morgen den Code für geben.
Herzlich,
Tom

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13878
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Jan » Sa, 15. Feb 2020 18:05

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

Re: Browserzellen ermitteln

Beitrag von Tom » Sa, 15. Feb 2020 19:00

Man kann auch die Zelle direkt einfärben. Hat nix mit eXpress++ zu tun.
Herzlich,
Tom

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 19661
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 7 Mal
Danksagung erhalten: 26 Mal

Re: Browserzellen ermitteln

Beitrag von Manfred » So, 16. Feb 2020 18:39

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 kannste sein, Hauptsache pfiffig!!

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 15490
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 6 Mal
Danksagung erhalten: 8 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Martin Altmann » So, 16. Feb 2020 19:11

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
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8173
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 5 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Tom » Di, 18. Feb 2020 14:36

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: 19661
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 7 Mal
Danksagung erhalten: 26 Mal

Re: Browserzellen ermitteln

Beitrag von Manfred » Di, 18. Feb 2020 15:00

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 kannste sein, Hauptsache pfiffig!!

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8173
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 5 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Tom » Di, 18. Feb 2020 15:29

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: 2309
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 5 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Koverhage » Mi, 19. Feb 2020 7:39

Das Zebra Beispiel hilft Dir nicht ?
Gruß
Klaus

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 19661
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 7 Mal
Danksagung erhalten: 26 Mal

Re: Browserzellen ermitteln

Beitrag von Manfred » Mi, 19. Feb 2020 8:21

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 kannste sein, Hauptsache pfiffig!!

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8173
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 5 Mal
Danksagung erhalten: 25 Mal
Kontaktdaten:

Re: Browserzellen ermitteln

Beitrag von Tom » Mi, 19. Feb 2020 8:34

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: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: Browserzellen ermitteln

Beitrag von AUGE_OHR » Mi, 19. Feb 2020 9:35

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

Re: Browserzellen ermitteln

Beitrag von Tom » Mi, 19. Feb 2020 9:47

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: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: Browserzellen ermitteln

Beitrag von AUGE_OHR » Mi, 19. Feb 2020 23:28

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

Re: Browserzellen ermitteln

Beitrag von Tom » Do, 20. Feb 2020 7:12

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

Antworten