Hallo Leute,
in einer Tabelle speichere ich in mehreren Feldern Farbwerte.
Wäre es möglich, die entsprechenden Felder in einem Formular als Rich-Text-Textfeld so benutzen, dass die Felder die Farbe als Background amzeigen?
Oder anders gefragt: wie müsste die Rich-Text-Anweisung lauten, um den Inhalt eines Feldes (Farbe als long) als Backcolor darzustellen? Den Farbwert (Inhalt des Feldes) könnte man dann einfach über den Linken Rand (z.B. 2cm, wenn das Feld z.B. 1,6cm breit ist) "unsichtbar" machen.
Select iif(nz(tblFarbe,0) >0,"\backcolor=" & tblFarbe,"") as xFarbe from MyTab...
Oder HTML?
Hallo,
warum muss es RichText sein? Kannst du nicht ein einfaches Textfeld nehmen und die BackColor-Eigenschaft einstellen? Oder handelt es sich um ein Endlosformular? Dann geht das nur mit Bedingter Formatierung.
Hallo MaggieMay,
sorry, dass ich erst heute antworten kann.
In der Tat handelt es sich um ein Endlos-Formular bzw. ein Ufo. Ich habe darin 30 Felder, die jeweils einen individuellen Farbwert haben.
Meine Überlegung ist, durch "einfache" RTF- (oder HTML?)Anweisungen im Select die Inhalte der entsprechenden Tabellen-Felder so vorzubereiten, dass sie von Access zur Anzeige gleich richtig interpretiert werden können, so dass ich die bedingte Formatierung nicht mehr brauche.
Jedes meiner 30 Tabellen-Felder kann übrigens jeden Farbwert annehmen, so dass bed. Formatierung m.E. ohnehin ausscheidet. Und leider funktionieren ja Konstrukte wie
me.Feld.backcolor = me.Feld
nicht, da Access dies auf alle Records des Endlos-Formulars bezieht, wie wir ja aus anderen Threads gelernt haben.
Meine Idee ist es, wie gesagt, den gespeicherten Zahlenwert der Farbe in ein RTF-Minimum einzubetten, das dann von Access interpretiert und dargestellt wird. Eigentlich doch eine coole Idee, oder?
Leider arbeitet RTF, wie ich inzwischen gelernt habe, mit einer indizierten Farbtabelle, je Eintrag mit 3 Werten R, G und B. Ich müsste meinen long-Farbwert also erst in RGB-Werte wandeln, dann eine Mini-Farbtabelle im RTF-Format erzeugen und letztendlich einen Text ausgeben (z.B. Leerzeichen), um das RTF-Feld im Formular in der gewünschten Farbe darzustellen.
Vielleicht könnte ich die RGB-Werte meiner Farben schon in der Tabelle zu einer RTF-Anweisung zusammenbasteln.
Was mir nur fehlt ist ein RTF-Mini-Konstrukt, so zu sagen als Rahmen.
Dann könnte ich im Formular für die Bearbeitung meiner 30 Felder per VBA sowas bauen (Luftcode):
private function RTFErzeugen(strFeld as string)
lngColor =me.controls(strfeld).backcolor
iR=<getR>(lngcolor)
iG=<getG>(lngcolor)
iB=<getB>(lngcolor)
me.controls(strFeld & "RTF") = _
"<RTF-Statements-Anfang>" & _
"<RTF-Statements-R>"& iR & _
"<RTF-Statements-G>"& iG & _
"<RTF-Statements-B>"& iB & _
"<RTF-Statement-Wert>" & " " & _
"<RTF-Statements-Ende"
und so die RTF-Anweisung in der Ursprungs-Tabelle speichern.
Im select des Endlos-Formulars (Unter-Formulars) bräuchte ich dann nur die RTF-Felder selektieren, den Rest würde Access erledigen.
Je mehr ich die Idee beschreibe, desto mehr glaube ich, dass es funktionieren könnte.
Ist dies nun eine geniale oder eine dumme Idee?
Hallo,
Tipp:
http://lebans.com/formatbycriteria.htm
Hi,
ich kenne diesen Tipp, kann die DB aber mit Access 2016 nicht öffnen.
Gruß an den Bodensee
Hallo liebe Leute,
Ich habe die Lösung und Antwort auf meine Frage jetzt selbst gefunden.
Zunächst einmal scheint Access Rich-Text nicht wirklich zu unterstützen, sondern bettet Rich-Text in HTML ein.
Also warum nicht gleich HTML benutzen?
Ich speichere jetzt in meine Felder der Ursprungs-Tabelle HTML-Anweisungen, z.B.
<div><font style="BACKGROUND-COLOR:#B0B070"> B0B070</font></div>
(Scheinbar will Access das div-Tag)
Die Leerzeichen vor dem zweiten b0b070 dienen nur dazu, den Wert nach rechts zu schieben, um ihn im Formular "unsichtbar" zu machen.
Im Endlos-Formular stelle ich die Tabellenfelder (wie dort natürlich auch) als Rich-Text-Felder dar. Das Resultat meines Einzeiler-Endlosformulars sieht dann so aus, wie im angefügten Screenshot.
In der ersten Spalte habe ich übrigens die bedingte Formatierung (mit 5 Bedingungen, was in Access 2016 wohl möglich ist) bemüht.
Die übrigen Felder mit (im Beispiel) 225 verschiedenen Farbwerten werden ohne weiteren VBA-Code oder bedingte Formatierung "auf einen Schlag" richtig dargestellt.
Also wenn das keine coole Lösung (sorry, Eigenlob, aber ich bin echt stolz und happy) für unzählige Probleme mit Endlos- oder Subforms ist... Natürlich könnte man in den Tabellenfeldern auch anderen HTML-Code speichern. Access interpretiert den HTML-Code für jedes einzelne Feld (ohne irgendwelchen Code in Form_Load oder Form_Current oder sonstwo).
Nur in der zugrunde liegenden Tabelle muss ich meine Werte mit HTML "dekorieren" - und das war's.
Ein Datenbank-Feld weiß nun, wie es dargestellt werden soll - funktioniert auch in der Tabellen-Ansicht.
Ich bin mal gespannt auf eure Reaktionen...
Schönen Sonntag!