Hallo, ist es möglich, einen Code mit Hintergrundfarbe für alle Formulare in einem Modul zu hinterlegen und dieses Modul im Eigenschaftsfenster anzusprechen? Also im Fenster mit F4.
Carl
Ja.
Ich bin zwar nicht ganz sicher, ob ich verstehe was du tun möchtest, aber höchstwahrscheinlich sollte das möglich sein.
Also ich suche eine Möglichkeit, eine Eigenschaft wie die Hintergrundfarbe global zu ändern. Am liebsten wäre mir, wenn es ein globales Modul gäbe, in das Optionen geschrieben werden können, die Einträge im Eigenschaftsfenster eines jeden Formulares überschreiben.
Als: Mach alle Hintergründe aller Formulare weiß.
Carl
Hallo Carl,
das Modul kannst du dir ganz einfach selbst machen.
Sofern du nicht schon eine "globale" Funktion in jeder Maske hast, die beim laden oder öffnen eines Formulars ausgeführt wird, legst du dir eben eine solche an und legst darin fest wie deine Formulare aussehen sollen.
Public Function Aktion_Beim_Laden_aller_Formulare()
With CodeContextObject
.Formularkopf.BackColor = FarbeKopf ' oder direkt abrufen Forms!xxx!FarbeKopf
.Detailbereich.BackColor = FarbeDetailbereich
.Formularfuß.BackColor = FarbeFuss
End With
End Function
Die Variablen FarbeKopf etc. kannst du beim Start der Anwendung in einem unsichtbaren Formular festlegen.
Über diesen Weg kannst du deine Anwendung ganz individuell und einheitlich gestalten.
Gruß Dieter
Vielen Dank für Deine Antwort.
Also ich lege ein Modul an, z.B. Modul1 und kopiere den vervollständigten Quellcode da hinein. Wie merkt Access, dass es ein allgemeines Modul ist?
Wie spreche ich dann an, dass, egal welches Formular geöffnet, wird, immer dieser Code genommen wird und immer der Wert, der im Eigenschaftsfenster steht, davon überschrieben wird? Vermerkt man im Formular, dass es diesen Code in dem Modul gibt?
Carl
beim erstellen eines Moduls gibt es nur Module oder Klassenmodule, "allgemeine" Module gibt es nicht.
Das was du vermutlich meinst, sind einfach nur "Module".
Du musst in all deinen Formularen im Ereignis "Bei Laden" die Funktion aufrufen.
Sieht dann in etwa so aus:
Private Sub Form_Load()
Aktion_Beim_Laden_aller_Formulare
End Sub
Der Wert den jedes Formular hat wird automatisch durch den Wert überschrieben, den du beim Laden setzt.
Vermerken musst du dabei nichts, außer eben in jedem Formular einmalig diesen Funktionsaufruf im Ereignis "bei Laden" setzen.
Danach kannst du über diese eine Funktion das komplette Erscheinungsbild deiner Formulare ändern, sofern das eben für alle Formulare gelten soll.
Gruß Dieter
Ich habs gemacht und der Hintergrund des zu ladenden Formulars wird schwarz, egal welchen Farbwert ich im Modul eintrage.
Public Function Aktion_Beim_Laden_aller_Formulare()
With CodeContextObject
.Detailbereich.BackColor = CCC8C2
End With
End Function
Woran könnte das denn liegen?
Carl
Hallo,
stelle den gewünschten Hintergrund ein und kopiere dann den Farbwert aus den Eigenschaften. Und den verwendest Du.
ich glaube das hat er auch gemacht, nur da steht keine Dezimalzahl drin, sondern eine verdrehte Hex. In VBA funktioniert die natürlich nicht.
Wenn du die HEX benutzen willst, dann musst du dir noch folgende Funktion in dein Modul rein kopieren:
Public Function getcolor(s As String) As Long
Dim objRegEx As Object
Set objRegEx = CreateObject("VBscript.regexp")
s = Left(s & "000000", 6)
objRegEx.Pattern = "^[0-9A-F]{0,6}$"
If objRegEx.Replace(s, "") <> "" Then
getcolor = 0
Else
getcolor = "&h" & Mid(s, 5, 2) & Mid(s, 3, 2) & Mid(s, 1, 2)
End If
Set objRegEx = Nothing
End Function
In der Funktion sieht die Zeile dann so aus:
.Detailbereich.BackColor = getcolor("CCC8C2")
alternativ dazu, könntest du auch alle gewünschten Farben in einem Formular einstellen und dann beim laden den Code anhalten und dir die Dezimalwerte für jedes Objekt übers Direktfenster ausgeben lassen.
Find ich aber auf Dauer ziemlich umständlich, aber das ist nur meine Meinung...
Ah, damit funktioniert es. Ihr seid super! Ich glaube diese globalen Module sind sehr nützlich in vielerlei Hinsicht.
Ich hatte zwischenzeitlich vergeblich versucht, Hex in VBA flott zu machen, aber daran gescheitert, dass viele ihre Farbwerte aus einer Tabelle holen. Das ist wahrscheinlich besser, wenn man eine Administratorseite macht, mit der der User die Farboptionen wählen kann. Dann muss der Code nochmal anders aussehen.
Danke
Carl
@dedidado
Wie sicher ist denn "CodeContextObject" bezügl. Verweis auf
das aufrufende Formular?
Wenn ich die OH richtig verstehe, ist es in diesem Fall nicht
unbedingt nötig dieses Objekt heranzuziehen.
Ich habe bei sowas immer einfach direkt das Form übergeben
(ByRef frm As Access.Form)
gruss ekkehard
Ich habe jetzt mal versucht, eine weitere Public Funktion für die Schriftfarben der TextBoxen anzulegen.
Im Formular funktioniert "Text72i.ForeColor = 32768".
Im Modul funktioniert aber folgende Codes nicht. Fehler: "Objekt fehlt".
Public Function Aktion_Beim_Laden_aller_Texte()
Me!Text72.ForeColor = 32768
Me.Text72.ForeColor = 32768
Text72i.ForeColor = 32768
Text72ii.ForeColor = 1
End Function
Was könnte der Grund sein?
Carl
Hallo Carl,
ZitatWas könnte der Grund sein?
"Me." funktioniert auch nur im Formularmodul. In "fremden" Modulen
musst du eine explizite Referenz auf das Formular einrichten.
Entweder, wie schon mal gezeigt, mit dem "CodeContextObject"
With CodeContextObject
!Text72.ForeColor = 32768
'usw.oder per Übergabe des Formulars an die Function
Public Function Aktion_Beim_Laden_aller_Texte(ByRef frm As Access.Form)
With frm
!Text72.ForeColor = 32768
'usw.gruss ekkehard
@ekkehard
ich nutze CodeContextObject in wirklich unzähligen Funktionen einer Anwendung die schon über 15 Jahre läuft und hab damit noch nie Probleme gehabt!
Gruß Dieter
okay, danke, es klappt.
Hi in die Runde,
bin mir nicht sicher, ob per Code die beste Alternative ist.
Modernes Access hat doch auch so was wie Designs. Findest Du im formularentwurf unter Menü Entwurf oben links.
Wird wohl aber kaum abwärtskomplatibel sein.
Nur so eine Idee, ohne viel zu wissen (würde mich aber auch interessieren)
Hallo Dieter,
Danke für deine Rückmeldung.
gruss ekkehard