none
variabler Formularhintergrund

    Frage

  • Hallo allerseits,

    beim Laden verwende ich für alle Formulare ein kleines Unterprogramm, welches benutzerabhängig einen Formularhintergrund lädt. Bis Access 2007 hat das auch immer funktioniert. Mit Access 2010 (32Bit) nun nicht mehr. Das Programm läuft ohne Fehler durch. Auch wenn ich das unterprogramm beim Laden einbinde. habe ich keinen Formularhintergrund.

    Private Sub Form_Open(Cancel As Integer)
        Dim Modus As Byte
        Modus = 1

        Set SchemaForm = Me
        Call SchemaLaden((Modus))
    End Sub

    Function SchemaLaden(Modus As Byte)
                If IsNull(Forms!Login_2.HintergrundF) Or Forms!Login_2.HintergrundF = "" Then
                Else
                    SchemaForm.Picture = GetDatabasePath() & "Styles\" & Forms!Login_2.HintergrundF
                    SchemaForm.PictureType = 1
                    SchemaForm.PictureSizeMode = Forms!Login_2.HintergrundFPS
                    SchemaForm.PictureAlignment = Forms!Login_2.HintergrundFPA
                    SchemaForm.PictureTiling = Forms!Login_2.HintergrundFPT
                End If
    End Function

    In Forms!Login_2. stehen die Benutzerinformationen.

    Kann mir vielleicht jemand einen Tipp geben? Vielen Dank im voraus.

    Mittwoch, 15. Dezember 2010 08:00

Antworten

  • Hallo,

    AxelKorte wrote:

    3. Alle Felder sind gefüllt. HintergrundF = Standard.jpg; HintergrundFPS = 0; HintergrundFPA = 2; HintergrundFPT = -1

    Wie gesagt, ind allen Access-Versionen bis 2007 einschließlich funktioniert es.

    Ich hab beim Testen gesehen, dass der PictureType eine Rolle zu spielen
    scheint. Setz mal in dem Formular, das das Hintergrundbild zeigen soll, den
    PictureType = Linked und probier nochmal.
    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 15. Dezember 2010 13:31
    Moderator

Alle Antworten

  • Hallo,

    AxelKorte wrote:

    Private Sub Form_Open(Cancel As Integer)
        Dim Modus As Byte
        Modus = 1


    *    Set SchemaForm = Me

    Wo/wie wird SchemaForm deklariert? Falls nirgendwo, fueg mal ganz oben im
    Modul nach der Zeile Option Compare ...  Option Explicit ein.

        Call SchemaLaden((Modus))
    End Sub*

    *Function SchemaLaden(Modus As Byte)
                If IsNull(Forms!Login_2.HintergrundF) Or Forms!Login_2.HintergrundF = "" Then
                Else
                    SchemaForm.Picture = GetDatabasePath() & "Styles\" & Forms!Login_2.HintergrundF
                    SchemaForm.PictureType = 1
                    SchemaForm.PictureSizeMode = Forms!Login_2.HintergrundFPS
                    SchemaForm.PictureAlignment = Forms!Login_2.HintergrundFPA
                    SchemaForm.PictureTiling = Forms!Login_2.HintergrundFPT

    Ich hab das bei mir (mit festen Werten) getestet, alles hat funktioniert.

    Hast du geprueft, was jeweils in den Feldern HintergrundFPS, ...FPA und ...
    FTP steht, bzw. was GetDatabasePath() zurueckgibt?
    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 15. Dezember 2010 09:09
    Moderator
  • Hallo Peter,

    danke für die schnelle Antwort. Nun zu den Fragen:

    1. Ja. Ich habe in jedem Formual ein "Option Explicit".

    2. GetDatabasePath() gibt das Verzeichnis der Anwendung incl. abschließenden \ zurück.

    3. Alle Felder sind gefüllt. HintergrundF = Standard.jpg; HintergrundFPS = 0; HintergrundFPA = 2; HintergrundFPT = -1

    Wie gesagt, ind allen Access-Versionen bis 2007 einschließlich funktioniert es.

    Mit freundlichen Grüßen

    Axel

    Mittwoch, 15. Dezember 2010 11:25
  • hallo Axel,

    Wozu die globale Variable SchemaForm?

    Schreibe deine Funktion um (in einem Standardmodul):

    Public Function SchemaLaden( _
      AForm As Access.Form, AModus As Byte) As Boolean
       SchemaLaden = False
       If Not IsNull(Forms!Login_2.HintergrundF) And _
        Not (Forms!Login_2.HintergrundF = "") Then
        AForm.Picture = _
          GetDatabasePath() & "Styles\" & _
          Forms!Login_2.HintergrundF
        AForm.PictureType = 1
        AForm.PictureSizeMode = Forms!Login_2.HintergrundFPS
        AForm.PictureAlignment = Forms!Login_2.HintergrundFPA
        AForm.PictureTiling = Forms!Login_2.HintergrundFPT
        SchemaLaden = True
      End If
    
    End Function

    dann kannst du sie entweder direkt als Eigenschaft nutzen:

    Beim Laden = "=SchemaLaden([Form];1)

    oder im Code

    Private Sub Form_Load()
       SchemaLaden Me.Form, 1
    
    End Sub

    btw, das Ereignis Beim Öffnen ist imho das falsche. Da gehört eigentlich nur eine Prüfung hinein ob das Formular geöffnet werden soll oder nicht, daher der Cancel-Parameter. Alles was ausgeführt werden soll wenn das Formular normal geöffnet wird und offen bleibt, sollte in das Beim Laden Ereignis.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Mittwoch, 15. Dezember 2010 12:05
    Moderator
  • Hallo,

    AxelKorte wrote:

    3. Alle Felder sind gefüllt. HintergrundF = Standard.jpg; HintergrundFPS = 0; HintergrundFPA = 2; HintergrundFPT = -1

    Wie gesagt, ind allen Access-Versionen bis 2007 einschließlich funktioniert es.

    Ich hab beim Testen gesehen, dass der PictureType eine Rolle zu spielen
    scheint. Setz mal in dem Formular, das das Hintergrundbild zeigen soll, den
    PictureType = Linked und probier nochmal.
    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 15. Dezember 2010 13:31
    Moderator
  • Hallo Peter,

    super, danke. Der Tipp mit PictureType war genau richtig. Setze ich diesen auf 1 = linked und setzte dann den Verweis auf das Bild, dann funktioniert es auch unter 2010.

    Vielen Dank und Grüße aus Bad Rothenfelde

    Axel

    Mittwoch, 15. Dezember 2010 14:07