Seite 1 von 2
[gelöst] Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: Fr, 03.01.2014 17:11
von Dieter_Graz
Hallo!
Ich habe ein Formular erstellt, dass zur Dateneingabe aber auch als Infoplattform dienen soll.
Um die Einträge besser darstellen zu können wäre es hilfreich wenn z-B. Statusangaben farblich dargestellt werden.
yes=grün
norot
ongoing=orange
Als Neuling benötige ich dringend Hilfe. Ich komme einfach noch nicht zurecht

.
1. Kann mir bitte wer ein Makro dazu schreiben?
2. Wie beginnt man am Besten das Schreiben von Makros zu erlernen?
3. Gibt es eine Möglichkeit das Problem mit einer Art "bedingter Formatierung" zu lösen?
Vielen, vielen Dank!
Dieter
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: Fr, 03.01.2014 17:18
von F3K Total
Hallo Dieter,
kannst Du bitte genauer beschreiben, was Du mit Statusangaben meinst.
Welche Art von Tabellenspalte liegt zugrunde, welche Art von Kontrollfeld?
Am besten lädst du eine Beispieldatei hoch.
Dieter_Graz hat geschrieben:Als Neuling benötige ich dringend Hilfe. Ich komme einfach noch nicht zurecht

.
1. Kann mir bitte wer ein Makro dazu schreiben?
2. Wie beginnt man am Besten das Schreiben von Makros zu erlernen?
3. Gibt es eine Möglichkeit das Problem mit einer Art "bedingter Formatierung" zu lösen?
- zu 1.) ...
- zu 2.) Es gibt eine Reihe von Informationsmöglichkeiten, schon in diesem Forum.
- zu 3.) Man kann die Schiftfarbe in einem formatierten Feld mit Hilfe des Formatcodes steuern, die Hintergrundfarbe nicht.
z.B mit
Gruß R
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: Fr, 03.01.2014 22:20
von Dieter_Graz
Hallo R,
erstmal herzlichen Dank für deine schnelle Hilfe. Zur Erklärung habe ich einen Screenshot angehängt. Es handelt sich um Textfelder. Nehme an
die gehören gegen formartierte Felder getauscht.
Die Einträge ändern sich mit dem Projectfortlauf (no, ongoing, yes). Das ganze Formular enthält ca. 60 Texfelder, davon 15 mit diesen Werten, natürlch nach jedem
Projectupdate immer anders verteilt.
Die Tabellenspalten sind auch als Text definiert. Es mir nur darum, das Ganze visuell besser darstellen zu können. Mit verschiedenen Textfarben, je nach Status
wäre ich schon sehr happy.
Ich hoffe ich konnte, das vertändlich erklären, beschäftige mich erst seit 2 Wochen mit Base.
Vielen Dank
Gruß aus Graz
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: Sa, 04.01.2014 08:26
von F3K Total
Moin,
ich habe dir da mal was gebaut, zwei Makros,
S_Insert_Backgroundcolor und
S_Insert_Backgroundcolor_on_Rowchange.
Binde
S_Insert_Backgroundcolor bei jedem
Textfeld, dass eingefärbt werden soll, an das Ereignis
Modifiziert.
Damit sich die Feldfarben bei einem Datensatzwechsel auch anpassen, binde
S_Insert_Backgroundcolor_on_Rowchange an das
Formularereignis
Nach dem Datensatzwechsel
Möchtest Du, das die Hintergrundfarbe des Textfeldes angepasst wird, schreibe in die Zusatzinformation (engl.: tag) ein
B für
Background, läßt du die Zusatzinformation leer, wird die Schriftfarbe angepasst.
Die Farben stehen ganz oben, es gilt, um sie aus RGB zu errechnen, die Formel
z.B. für Rot -> RGB(255, 0, 0)
Code: Alles auswählen
=>
N_rot = (255 * 256^2) + (0 * 256) + (0)
N_rot = 16711680
Code: Alles auswählen
const C_N = 16711680 'rot
const C_O = 16744960 'orange
const C_Y = 39168 'grün
const C_S = 13882323 'grau
Sub S_Insert_Backgroundcolor(event, optional oControl)
if ismissing(oControl) then
ocontrol = event.source.model
endif
select case ocontrol.CurrentValue
case "no"
nBackgroundcolor = C_N
nTextColor = C_N
case "ongoing"
nBackgroundcolor = C_O
nTextColor = C_O
case "yes"
nBackgroundcolor = C_Y
nTextColor = C_Y
case else
nBackgroundcolor = C_S
nTextColor = 0
end select
if ocontrol.tag = "B" then
ocontrol.Backgroundcolor = nBackgroundcolor
else
ocontrol.TextColor = nTextColor
endif
thiscomponent.modified = false
End Sub
sub S_Insert_Backgroundcolor_on_Rowchange(event)
oForm = event.source
for i = 0 to oform.count - 1
oControl = oForm(i)
if oControl.supportsservice("com.sun.star.form.binding.BindableDatabaseTextField") then
if ubound(oForm.getScriptEvents(i))>= 0 then
oscripts = oform.getScriptEvents(i)
if oscripts(0).ScriptCode="vnd.sun.star.script:Standard.States.S_Insert_Backgroundcolor?language=Basic&location=document" then
S_Insert_Backgroundcolor(event,oControl)
endif
endif
endif
next i
end sub
Anbei eine Beispieldatei.
So, viel Erfolg
Gruß R
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: Sa, 04.01.2014 13:28
von Dieter_Graz
Haoll R,
Vielen dank für Deine Mühe. Sobald ich zeit habe werde ich alles ausprobieren und Dir selbstverständlich berichten.
Schönes Wochenende und Gruß aus Graz
Dieter
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: Sa, 04.01.2014 23:29
von Dieter_Graz
Hakko R,
ich bin begeistert! Danke!
Es funktioniert astrein, die Schrift wird färbig. Leider wusste ich mit den beiden "Farbenformeln" nichts anzufangen. Sind die dazu da die Werte erstmal alle einzufärben. Momentan sind sie schwarz bis ich den Wert ändere. Allerdings ein yes wird immer ein yes bleiben, d.h. schwarz bleiben. Das Sahnehäubchen wäre jetzt nur noch alle erstmal einzufärben, dem aktuellen Stand nach. Sonst müsste ich alle ändern und wieder zurückändern, das wären nicht Stunden sondern Tage.
Ich muss das "Markroschreiben" unbedingt erlernen, ist eine Super-Sache.
Gruß aus Graz
Dieter
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: Sa, 04.01.2014 23:40
von F3K Total
Dieter_Graz hat geschrieben: Leider wusste ich mit den beiden "Farbenformeln" nichts anzufangen
Ganz oben über den Makros steht
Code: Alles auswählen
const C_N = 16711680 'rot
const C_O = 16744960 'orange
const C_Y = 39168 'grün
const C_S = 13882323 'grau
Die Nummern stehen für die Farben, wenn du andere Farben haben möchtest, tauscht du die Nummern aus, wenn du eine Farbe kennst die dir gefällt, z.B.
RGB (4,102,204), dann berechnest Du die Zahl so: 4*256^2+102*256+204 = 288460
Dieter_Graz hat geschrieben:Das Sahnehäubchen wäre jetzt nur noch alle erstmal einzufärben, dem aktuellen Stand nach. Sonst müsste ich alle ändern und wieder zurückändern, das wären nicht Stunden sondern Tage.
Diese Funktion ist bereits integriert:
F3K Total hat geschrieben:... binde S_Insert_Backgroundcolor_on_Rowchange an das Formularereignis Nach dem Datensatzwechsel ...
Gruß R
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: So, 05.01.2014 09:14
von Dieter_Graz
Hallo Rik,
Vielen Dankfür die Erklärung.
Ich habe die Tabellen ursprünglich aus einen .xlsx Datei importiert. D.h. viele Werte werden nicht mehr verändert, damit erfolgt keine Datenänderung mehr.
Was ich meine ist dass die Werte auch schon beim Starten des Formulars eingefärbt werden.
Gruß aus Graz,
Dieter
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: So, 05.01.2014 09:18
von F3K Total
Dieter_Graz hat geschrieben:... dass die Werte auch schon beim Starten des Formulars eingefärbt werden ...
Ja,
genau dass tut das Makro
S_Insert_Backgroundcolor_on_Rowchange, wenn es
richtig angewendet wird!
Gruß R
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: So, 05.01.2014 10:12
von Dieter_Graz
Hallo R,
das tut es leider nicht. Nach dem Schließen und wieder Öffnen ist wieder alles in schwarz. Danke für Deine Geduld.
Lg,
Dieter
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: So, 05.01.2014 10:13
von F3K Total
Das tut es doch, siehe
Beispieldokument !!!
Ich habe dir eine PN (private Nachricht) geschickt.
Gruß R
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: So, 05.01.2014 11:35
von Dieter_Graz
Hallo R,
habe jetzt mal versucht, Dein Beispiel nachzubauen. Davor habe ich immer an meiner Tabelle probiert.
Irgendwo habe ich was übersehen. Habe die beiden Datein verglichen, bis auf das S in den Zusatzinformationen ist mir nichts aufgefallen. Was mache ich falsch.
hab den Nachbau angehängt.
Lg,
Dieter
Achja yes sollte grün sein, no rot usw. Ein Bedienfehler meinerseits an Deiner Datei?
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: So, 05.01.2014 12:07
von F3K Total
Hallo Dieter,
Dieter_Graz hat geschrieben:Ein Bedienfehler meinerseits an Deiner Datei?
vermutlich, bei mir sieht das so aus:

- R.png (2.43 KiB) 4604 mal betrachtet
Nun zu deiner Datei:
Du hast die Makros nicht im Dokument, sondern unter "Meine Makros", darum sind sie nicht mitgekommen und ich kann nicht sehen, was du daran gemacht hast. Es fällt auf, dass im untersten Feld kein S steht.
Die Zusatzinformation ist nicht das
S sondern ein
B wenn die Hintergrundfarbe angepasst werden soll,
kein Eintrag, wenn die Textfarbe angepasst werden soll!
Anbei deine Datei, mit eingebetteten Makros, die bei mir funktioniert.
Habe noch vier zusätzliche Felder eingebaut, damit Du den Unterschied bzgl. Zusatzinfomation
nix oder
B direkt sehen kannst.

- D.png (5.72 KiB) 4606 mal betrachtet
Gruß R
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: So, 05.01.2014 13:46
von F3K Total
Hallo Dieter,
ich habe da noch mal eine Idee, warum meine Dateien, ggf. bei Dir nicht funktionieren. Es muss natürlich zugelassen werden, dass die mitgelieferten Makros auch ausgeführt werden dürfen.
Dazu, stellst du unter
Extras/Optionen/Openoffice.org oder LibreOffice.org/Sicherheit/Makrosicherheit
mindestens die Stufe Mittel ein, dann wirst du beim Öffnen von Dokumenten gefragt, ob du Makros ausführen möchtest.
Gruß R
Re: Base: Kontrollfeld/Schrift je nach Inhalt färben
Verfasst: So, 05.01.2014 17:10
von Dieter_Graz
Hallo R,
ja Du hast Recht, Deine Makros laufen jetzt astrein. Danke. Werde mich daran machen dass ich "meine" auch zum Laufen bringe

.
Berichte später
bis dann
Dieter