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

    Code: Alles auswählen

    [<=3][ROT]Standard ;[<10][BLAU]Standard;Standard
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

Code: Alles auswählen

N_x = (R * 256^2) + (G * 256) + (B)
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
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
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 :D .

Berichte später

bis dann
Dieter