Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Carl am Mai 07, 2019, 19:28:02

Titel: generelle Eigenschaften
Beitrag von: Carl am Mai 07, 2019, 19:28:02
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
Titel: Re: generelle Eigenschaften
Beitrag von: PhilS am Mai 07, 2019, 19:39:33
Ja.
Ich bin zwar nicht ganz sicher, ob ich verstehe was du tun möchtest, aber höchstwahrscheinlich sollte das möglich sein.
Titel: Re: generelle Eigenschaften
Beitrag von: Carl am Mai 07, 2019, 20:35:31
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
Titel: Re: generelle Eigenschaften
Beitrag von: dedidado am Mai 08, 2019, 10:35:00
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
Titel: Re: generelle Eigenschaften
Beitrag von: Carl am Mai 08, 2019, 14:14:24
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
Titel: Re: generelle Eigenschaften
Beitrag von: dedidado am Mai 08, 2019, 15:30:22
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
Titel: Re: generelle Eigenschaften
Beitrag von: Carl am Mai 08, 2019, 15:46:07
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
Titel: Re: generelle Eigenschaften
Beitrag von: MzKlMu am Mai 08, 2019, 16:18:48
Hallo,
stelle den gewünschten Hintergrund ein und kopiere dann den Farbwert aus den Eigenschaften. Und den verwendest Du.
Titel: Re: generelle Eigenschaften
Beitrag von: dedidado am Mai 08, 2019, 18:02:20
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...
Titel: Re: generelle Eigenschaften
Beitrag von: Carl am Mai 08, 2019, 18:38:26
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
Titel: nachgefragt, CodeContextObject"
Beitrag von: Beaker s.a. am Mai 08, 2019, 18:47:09
@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
Titel: Re: generelle Eigenschaften
Beitrag von: Carl am Mai 08, 2019, 19:19:39
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
Titel: Re: generelle Eigenschaften
Beitrag von: Beaker s.a. am Mai 09, 2019, 16:02:32
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
Titel: Re: generelle Eigenschaften
Beitrag von: dedidado am Mai 10, 2019, 12:58:08
@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
Titel: Re: generelle Eigenschaften
Beitrag von: Carl am Mai 10, 2019, 13:00:39
okay, danke, es klappt.
Titel: Re: generelle Eigenschaften
Beitrag von: Milvus am Mai 10, 2019, 16:41:58
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)
Titel: Re: generelle Eigenschaften
Beitrag von: Beaker s.a. am Mai 10, 2019, 20:59:45
Hallo Dieter,
Danke für deine Rückmeldung.
gruss ekkehard