Access

  MS Access 2010+  |  Formularze  |   VBA 7.0



• Jak uatrakcyjnić proces otwierania formularza ?

Wiemy już, że formularze są podstawowymi obiektami MS Access. Za ich pomocą możemy prezentować zgromadzone w bazie danych informacje, edytować dane, dodawać nowe oraz usuwać istniejące dane. Skoro jest to najważniejszy obiekt interfejsu bazy danych powinniśmy zadbać o jego wygląd i funkcjonalność. Możemy też spróbować otwierać formularze w niekonwencjonalny sposób. Wizualny efekt procesu otwierania formularza możemy rozłożyć na wiele pojedynczych prezentacji formularza. Najpierw pokazujemy formularz o małym rozmiarze i za każdym razem zwiększamy jego rozmiar oraz jeżeli jest to konieczne również jego położenie.

Rozmiar i położenie okna formularza

Poznaliśmy podstawowe właściwości formularza za pomocą których możemy pobrać aktualne położenie okna formularza (WindowLeft i WindowTop) oraz rozmiar okna formularza (WindowWidth i WindowHeight), a także metody AutoCenterAutoResize za pomocą których możemy wycentrować formularz oraz wymusić, by formularz miał wysokość tak dobraną, by pokazywał pełne rekordy. Aby zmienić położenie i (lub) rozmiar okna formularza (okno formularza musi być oknem aktywnym) możemy użyć metody obiektu DoCmd MoveSize.

Przykładowe otwarcie formularza w kierunku od lewego do prawego boku.

Na stronie Otwarcie formularza znajduje się przykład przedstawiający otwarcie formularza, tak że jego wysokość cały czas jest stała, a szerokość zwiększa się stopniowo, aż do osiągnięcia docelowej szerokości. Wizualny schemat otwarcia formularza pokazany jest poniżej. Na stronie tej omówione zostały problemy na jakie napotkałem realizując przykładowe otwarcie formularza.

Formularz do lewej

5. Od lewego boku do prawego formularza

Dziewięć wizualnych sposobów otwarcia formularza.

Wizualny efekt procesu otwierania formularza możemy rozłożyć na wiele pojedynczych prezentacji formularza. Najpierw pokazujemy formularz o małym rozmiarze i za każdym razem zwiększamy jego rozmiar oraz jeżeli jest to konieczne również jego położenie. W zależności od kierunku zwiększania rozmiaru formularza w trakcie jego otwierania możemy wyróżnić 9 wizualnych efektów:

0. Centralnie
Punktem stałym jest środek formularza. Stopniowo zwiększana jest wysokość i szerokość formularza.
1. Od lewego górnego narożnika do prawego dolnego narożnika
Punktem stałym jest lewy górny narożnik. Stopniowo zwiększana jest wysokość i szerokość formularza.
2. Od prawego górnego narożnika do lewego dolnego narożnika
Punktem stałym jest prawy górny narożnik. Stopniowo zwiększana jest wysokość i szerokość formularza.
3. Od prawego dolnego narożnika do lewego górnego narożnika
Punktem stałym jest prawy dolny narożnik. Stopniowo zwiększana jest wysokość i szerokość formularza.
4. Od lewego dolnego narożnika do prawego górnego narożnika
Punktem stałym jest lewy dolny narożnik. Stopniowo zwiększana jest wysokość i szerokość formularza.
5. Od lewego boku okna formularza do prawego boku okna formularza
Linią stałą jest lewy bok formularza. Stopniowo zwiększana jest szerokość formularza. Wysokość formularza jest stała.
6. Od prawego boku okna formularza do lewego boku okna formularza
Linią stałą jest prawy bok formularza. Stopniowo zwiększana jest szerokość formularza. Wysokość formularza jest stała.
7. Od górnego boku formularza do dolnego boku formularza
Linią stałą jest górne obramowanie formularza. Stopniowo zwiększana jest wysokość formularza. Szerokość formularza jest stała.
8. Od dolnego boku formularza do górnego boku formularza
Linią stałą jest dolne obramowanie formularza. Stopniowo zwiększana jest wysokość formularza. Szerokość formularza jest stała.

Skoro wyliczyliśmy dziewięć wizualnych sposobów otwarcia formularza, ze względu na kierunku zwiększania rozmiaru formularza w trakcie jego otwierania, to utwórzmy typ wyliczeniowy Enum enShowForm

Public Enum enShowForm
    Explode = 0
    LeftTop_RightDown
    RightTop_LeftDown
    RightDown_LeftTop
    LeftDown_RightTop
    Left_Right
    Right_Left
    Top_Down
    Down_Top
End Enum

Poniżej dwa inne wizualne schematy otwarcia formularza.

Formularz Explode

0. Centralnie we wszystkich kierunkach
     Explode = 0


Formularz LeftTop_RightDown

1. Od lewego górnego narożnika
     do prawego dolnego narożnika
     LeftTop_RightDown = 1



⊗ Public Sub formShowForm(frm As Access.Form, _
                      ByVal lLeft As Long, ByVal lTop As Long, _
                      ByVal lWidth As Long, ByVal lHeight As Long, _
            Optional ByVal enDirect As enShowForm = enShowForm.Explode, _
            Optional ByVal lRepeat As Long = 250)
  • Funkcja formShowForm(...) tworzy wizualny efekt podczas otwierania formularza. Proces otwierania formularza rozłożony jest na wiele pojedynczych prezentacji formularza. Najpierw pokazywany jest formularz o małym rozmiarze i z każdym cyklem pętli For Next razem zwiększany jest jego rozmiar oraz jeżeli jest to konieczne również jego położenie. W zależności od kierunku zwiększania rozmiaru okna formularza możemy wyróżnić 9 wizualnych efektów.
  • argumenty:
    • frm
    • Zmienna obiektowa reprezentująca formularz którego rozmiar będzie zmieniany.
    • lLeft()
    • Końcowa odległość lewego górnego rogu formularza od lewej krawędzi roboczego obszaru okna aplikacji MS Access. Jeżeli widoczne jest „okienko nawigacji”, jest to odległość od jego prawej krawędzi. Jednostką argumentu jest twip.
    • lTop
    • Końcowa odległość lewego górnego rogu formularza od górnej krawędzi roboczego obszaru okna aplikacji MS Access. Najczęściej jest to dolne obramowanie Wstążki (Ribbon). Jednostką argumentu jest twip.
    • lWidth
    • Końcowa szerokość formularza. Jednostką argumentu jest twip.
    • lHeight
    • Końcowa wysokość formularza. Jednostką argumentu jest twip.
    • enDirect
    • Argument opcjonalny. Domyślna wartość to enShowForm.Explode = 0. Typ wyliczeniowy określający sposób (kierunek) zwiększania rozmiaru formularza w trakcie jego otwierania.
    • lRepeat
    • Ilość operacji zmiany rozmiaru formularza. Im niższa wartość, tym szybciej otwierany jest formularz. Dla wartości argumentu lRepeat=0 formularz otwierany jest bez efektów wizualnych..
  • zwraca:
  • procedura nie zwraca żadnej wartości.
  • autor:
    Funkcja powstała w oparciu o:
    Chris St. Valentine, "Access 2.0 - Potęga programowania" wyd. LT&P wyd. 1996 r.
  • data: 02.01.2018
Option Compare Database
Option Explicit
' Typ wyliczeniowy. Kolejne elementy
' określają kierunek wyświetlania formularza
Public Enum enShowForm
    Explode = 0
    LeftTop_RightDown
    RightTop_LeftDown
    RightDown_LeftTop
    LeftDown_RightTop
    Left_Right
    Right_Left
    Top_Down
    Down_Top
End Enum


Public Sub formShowForm(frm As Access.Form, _
                  ByVal lLeft As Long, ByVal lTop As Long, _
                  ByVal lWidth As Long, ByVal lHeight As Long, _
          Optional ByVal enDirect As enShowForm = enShowForm.Explode, _
          Optional ByVal lRepeat As Long = 250)
' tymczasowe wymiary i położenie
' okna formularza szerokość
Dim lWidthTmp   As Long
Dim lHeightTmp  As Long
Dim lLeftTmp    As Long
Dim lTopTmp     As Long
Dim i           As Long

  For i = 1 To lRepeat
    Select Case enDirect
      ' 0. centralnie
      Case enShowForm.Explode
        lLeftTmp = lLeft + (lWidth - lWidthTmp) / 2
        lTopTmp = lTop + (lHeight - lHeightTmp) / 2
        lWidthTmp = lWidth * (i / lRepeat)
        lHeightTmp = lHeight * (i / lRepeat)
      ' 1. od lewego górnego do prawego dolnego
      Case enShowForm.LeftTop_RightDown
        lLeftTmp = lLeft
        lTopTmp = lTop
        lWidthTmp = lWidth * (i / lRepeat)
        lHeightTmp = lHeight * (i / lRepeat)
      ' 2. od prawego górnego do dolnego lewego
      Case enShowForm.RightTop_LeftDown
        lLeftTmp = lLeft + (lWidth - lWidthTmp)
        lTopTmp = lTop
        lWidthTmp = lWidth * (i / lRepeat)
        lHeightTmp = lHeight * (i / lRepeat)
      ' 3. od prawego dolnego do lewego górnego
      Case enShowForm.RightDown_LeftTop
        lLeftTmp = lLeft + (lWidth - lWidthTmp)
        lTopTmp = lTop + (lHeight - lHeightTmp)
        lWidthTmp = lWidth * (i / lRepeat)
        lHeightTmp = lHeight * (i / lRepeat)
      ' 4. od lewego dolnego do prawego górnego
      Case enShowForm.LeftDown_RightTop
        lLeftTmp = lLeft
        lTopTmp = lTop + (lHeight - lHeightTmp)
        lWidthTmp = lWidth * (i / lRepeat)
        lHeightTmp = lHeight * (i / lRepeat)
      ' 5. od lewej do prawej (bez zmiany wysokości)
      Case enShowForm.Left_Right
        lLeftTmp = lLeft
        lTopTmp = lTop
        lWidthTmp = lWidth * (i / lRepeat)
        lHeightTmp = lHeight
      ' 6. od prawej do lewej
      Case enShowForm.Right_Left
        lLeftTmp = lLeft + (lWidth - lWidthTmp)
        lTopTmp = lTop
        lWidthTmp = lWidth * (i / lRepeat)
        lHeightTmp = lHeight
      ' 7. od góry do dołu (bez zmiany szerokości)
      Case enShowForm.Top_Down
        lLeftTmp = lLeft
        lTopTmp = lTop
        lWidthTmp = lWidth
        lHeightTmp = lHeight * (i / lRepeat)
      ' 8. od dołu do góry (bez zmiany szerokości)
      Case enShowForm.Down_Top
        lLeftTmp = lLeft
        lTopTmp = lTop + (lHeight - lHeightTmp)
        lWidthTmp = lWidth
        lHeightTmp = lHeight * (i / lRepeat)
      Case Else
        Exit Sub
    End Select
      
    ' zmieniaj tylko szerokość formularza
    DoCmd.MoveSize lLeftTmp, lTopTmp, lWidthTmp, lHeightTmp
    DoEvents
    ' ustawiaj fokus na otwieranym formularzu
    DoCmd.SelectObject acForm, frm.Name, False
  Next
 
  DoEvents
 
End Sub