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
AutoCenter i AutoResize 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.
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.
0. Centralnie we wszystkich kierunkach
Explode = 0
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