Tekst informacyjny o polityce Cookies Close   
    
 
         
• Strona główna
• 1. Linki
• 3. Kontakt: e-Mail
 
         
• 1. Baza danych
• 2. Tabele i kwerendy
• 3. Formularze
• 4. Raporty
• 5. Moduły i makra
• 6. Obsługa błędów
 
    

II.   VBA 

    
• 1. Okna Accessa
• 2. Okna Formularzy
• 3.Okna Dialogowe
• 4. Tekst
• 5. Liczby
• 6. Pliki
• 7. Inne
 
    

III.   API 

    
• 1. Ogólnie o API
• 2. Funkcje API
• 3. System
• 4. Praca z oknami
• 5. Okna dialogowe
• 6. API - Inne
 
         
• 1. Bitmapy 24 Bit
• 2. GDI i HDC
• 3. Kody kreskowe
• 4. Formant Image
• 5. FreeImage.dll
 
    

V.   Inne 

    
• 1. Shell i MsDOS
• 2. Kontrolki
• 3. ६ԼҚ ਸ
• 4. Unikod

 
Odwiedzin:

Logo AccessFAQ• I.3. Access - Formularze [1] •

3.1 Jak przesunąć formularz bez zmiany jego rozmiaru oraz jak zmienić rozmiar formularza bez zmiany jego położenia ?
3.2 Dziewięć wizualnych sposobów otwarcia formularza.
3.3 Czy można otworzyć ten sam formularz w nowym oknie ?
3.4 Jak zmusić Access do korzystania z szablonów formularzy i raportów ?
3.5 Jak sprawdzić, czy wybrane formanty formularza zostały wypełnione ?
3.6 Jak pobrać nazwy wbudowanych i niestandardowych pasków poleceń oraz sprawdzić, który z nich jest widoczny ?
3.7 Jak sprawdzić, która sekcja formularza zawiera formant ?
3.8 Jak zrobić migającą etykietę na formularzu ?
3.9 Jak zrobić pasek postępu osadzony w formularzu, lub uruchamiany jako modalny formularz ?
<<• idź do str. 2 •>>
 

3.1 Jak przesunąć formularz bez zmiany jego rozmiaru oraz jak zmienić rozmiar formularza bez zmiany jego położenia ?

' należy użyć metody:

    ' DoCmd.MoveSize [w prawo], [w dół], [szerokość], [wysokość]

' w metodzie MoveSize trzeba podać co najmniej jeden argument, jeżeli jakiś argument pozostanie pusty, używane jest bieżące ustawienie, jednostką argumentów jest Twip,


' przykładowe wywołanie:
Private Sub btnTest_Click()
Dim i As Long

' przesuń poziomo
DoCmd.MoveSize 3000
For i = 0 To 1000: DoEvents: Next
' przesuń pionowo
DoCmd.MoveSize , 3000
For i = 0 To 1000: DoEvents: Next
' zmień rozmiar formularza (szerokość)
DoCmd.MoveSize , , 4000
For i = 0 To 1000: DoEvents: Next
' zmień wszystko
DoCmd.MoveSize 1000, 800, 7000, 5000
For i = 0 To 1000: DoEvents: Next

End Sub

 ΔΔΔ 

 

3.2 Dziewięć wizualnych sposobów otwarcia formularza.

w oparciu o:
    Chris St. Valentine, "Access 2.0 - Potęga programowania" wyd. LT&P wyd. 1996 r.



Private Sub zbShowForm(lLeft As Long, lTop As Long, _
lWidth As Long, lHeight As Long, _
Optional bDirect As Long = 0, _
Optional lSpeed As Long = 200)

Dim lW As Long
Dim lH As Long
Dim lX As Long
Dim lY As Long
Dim i As Integer

For i = 1 To lSpeed

lW = lWidth * (i / lSpeed)
lH = lHeight * (i / lSpeed)

Select Case bDirect
Case 1 ' od dolnego prawego
lX = lLeft + lWidth - lW
lY = lTop + lHeight - lH
Case 2 ' od dołu do góry
lX = lLeft
lY = lTop + lHeight - lH
lW = lWidth
lH = lHeight * (i / lSpeed)
Case 3 ' od dolnego lewego
lX = lLeft
lY = lTop + lHeight - lH
Case 4 ' od lewej do prawej
lX = lLeft
lY = lTop
lW = lWidth * (i / lSpeed)
lH = lHeight
Case 5 ' od górnego lewego
lX = lLeft
lY = lTop
Case 6 ' od góry do dołu
lX = lLeft
lY = lTop
lW = lWidth
lH = lHeight * (i / lSpeed)
Case 7 ' od górnego prawego
lX = lLeft + lWidth - lW
lY = lTop
Case 8 ' od prawej do lewej
lX = lLeft + lWidth - lW
lY = lTop
lW = lWidth * (i / lSpeed)
lH = lHeight
Case Else ' centralnie
lW = lWidth * (i / lSpeed)
lH = lHeight * (i / lSpeed)
lX = lLeft + lWidth / 2 - lW / 2
lY = lTop + lHeight / 2 - lH / 2
End Select

' zmieniaj położenie i rozmiar formularza
DoCmd.MoveSize lX, lY, lW, lH
DoEvents
Next

End Sub


' przykładowe wywołanie:
Private Sub btnTest_Click()
' położenie i rozmiar formularza
Const MY_TOP As Long = 1000
Const MY_LEFT As Long = 3000
Const MY_WIDTH As Long = 6900
Const MY_HEIGHT As Long = 4000
' sposób wyświetlania formularza
Const MY_CENTER As Long = 0
Const MY_RIGHTDOWN_TO_LEFTTOP As Long = 1
Const MY_DOWN_TO_TOP As Long = 2
Const MY_LEFTDOWN_TO_RIGHTTOP As Long = 3
Const MY_LEFT_TO_RIGHT As Long = 4
Const MY_LEFTTOP_TO_RIGHTDOWN As Long = 5
Const MY_TOP_TO_DOWN As Long = 6
Const MY_RIGHTTOP_TO_LEFTDOWN As Long = 7
' ilośc przejść - efekt wizualny zależny od szybkośći procesora
Const MY_SPEED As Long = 200

zbShowForm MY_LEFT, MY_TOP, MY_WIDTH, MY_HEIGHT, _
MY_TOP_TO_DOWN, MY_SPEED

End Sub

 ΔΔΔ 

 

3.3 Czy można otworzyć ten sam formularz w nowym oknie ?

Można, pod warunkiem, że wywołamy nową instanację formularza.
W tym celu musimy zadeklarować frmNew As Access.Form jako:
  • zmienną na poziome modułu formularza:

Private frmNew As Access.Form
  • lub jako zmienną Static w procedurze:
Static frmNew As Access.Form
  • w przypadku deklaracji w procedurze:
Dim frmNew As Access.Form
    formularz zostanie otwarty tylko na czas działania procedury.
UWAGA:  formularz musi mieć ustawioną właściwość:
HasModule = Yes

Private frmNew As Access.Form

' przykładowe wywołanie:
Private Sub btnTest_Click()

' utwórz pierwszą instancję formularza
DoCmd.OpenForm "frmMojFormularz"

' utwórz druga instancję formularza
Set frmNew = New Form_frmMojFormularz

With frmNew
.Visible = True
' w celach demonstracyjnych zmieniaj rozmiar formularza
.Caption = "Nowa instancja formularza"
.InsideWidth = .InsideWidth - 1000
.InsideHeight = .InsideHeight - 500
.SetFocus
End With

' i gdzieś w kodzie, by zamknąć nową instancję formularza
' Set frmNew = Nothing

End Sub

 ΔΔΔ 

 

3.4 Jak zmusić Access do korzystania z szablonów formularzy i raportów ?

grupa: pl.comp.bazy-danych.msaccess
wątek: NagŁÓwek, SzczegÓŁy etc
przedstawił: Mariusz Sankowski



<cyt>
  1. Utwórz sobie pusty formularz
  2. Pozmieniaj nazwy sekcji formularza, najlepiej na: Header, Footer, Detail
  3. Przy okazji dostosuj standardowe właściwości formularza i sekcji formularza do logiki Twojej aplikacji (styl obramowania, selektory rekordów, paski przewijania, kolor tła, itp.)
  4. Zapisz formularz jako np. frmTemplate
  5. W menu "Narzędzia" => "Opcje" => "Formularze/Raporty" zmień wpis w polu "Szablon formularza" z "Normalny" na "frmTemplate"
    - i analogicznie dla raportu.

</cyt>

 ΔΔΔ 

 

3.5 Jak sprawdzić, czy wybrane formanty formularza zostały wypełnione ?

' Utwórz następujące przykładowe formanty na formularzu:
' txtImie, txtNazwisko, cboMiasto, txtZaklad.
' Jeżeli wszystkie formanty są wypełnione funkcja zwraca True, w przeciwnym wypadku wyświetlany jest komunikat, a fokus ustawiany jest na pierwszym niewypełnionym formancie (jeżeli to ComboBox to rozwijana jest lista), a funkcja zwraca False,



Private Function zbCheckCtl() As Boolean
Dim vCtl As Variant
Dim sMsg As String
Dim i As Integer
Dim j As Integer

' tablica typu Variant przykładowych formantów i odpowiadających im nazw opisowych
vCtl = Array(Me.txtImie, "Imię:", _
Me.txtNazwisko, "Nazwisko:", _
Me.cboMiasto, "Miasto:", _
Me.txtZaklad, "Nazwa zakładu:")

j = -1
For i = LBound(vCtl) To UBound(vCtl) Step 2
If Nz(vCtl(i), "") = "" Then
    ' zapamiętaj w zmiennej j indeks pierwszego pustego formantu
    If j < 0 Then j = i
    sMsg = sMsg & vbNewLine & " " & vCtl(i + 1)
End If
Next

' sprawdź, długość ciągu znaków
If Len(sMsg) > 0 Then
MsgBox "Wypełnij pole(a): " & sMsg
' ustaw fokus na pierwszym pustym formancie, jeżeli jest aktywny
If vCtl(j).Enabled = False Then Exit Function
vCtl(j).SetFocus
' jeżeli jest to ComboBox to rozwiń listę
If TypeOf vCtl(j) Is Access.ComboBox Then
    vCtl(j).Dropdown
End If
Else
    zbCheckCtl = True
End If

End Function


' przykładowe wywołanie:
Private Sub btnTest_Click()

If zbCheckCtl = True Then
    MsgBox "Wszystkie wypełnione !"
Else
    ' Błąd! Funkcja zbCheckCtl wyświetli komunikat
End If

End Sub

 ΔΔΔ 

 

3.6 Jak pobrać nazwy wbudowanych i niestandardowych pasków poleceń oraz sprawdzić, który z nich jest widoczny ?

Private Sub zbListCbr()
Dim cbr As Object
Dim sName As String * 34
Dim sNameLocal As String * 44
Dim sVisible As String * 12
Dim i As Integer

' przygotuj i drukuj nagłówek tabeli
sName = "|" & Space(11) & "Nazwa:"
sNameLocal = "|" & Space(9) & "Nazwa lokalna:"
sVisible = "| Widoczny:"

Debug.Print String(97, "=")
Debug.Print "| Lp. "; sName; sNameLocal; sVisible & "|"
Debug.Print String(97, "=")

' drukuj właściwą listę
For Each cbr In CommandBars
i = i + 1
sName = "| " & cbr.Name
sNameLocal = "| " & cbr.NameLocal
sVisible = "| " & cbr.Visible
Debug.Print "|" & Format(i, "000"); ". "; sName; _
sNameLocal; sVisible & "|"
Next

Debug.Print String(97, "=")
Debug.Print: Debug.Print
DoCmd.RunCommand acCmdDebugWindow

End Sub



' przykładowe zastosowanie:
grupa: pl.comp.bazy-danych.msaccess
wątek: Menu kontekstowe


 ΔΔΔ 

 

3.7 Jak sprawdzić, która sekcja formularza zawiera formant ?

' Metoda I - przeszukuje kolekcję Controls każdej sekcji formularza szukając formantu sCtlName; zwraca numer jaki ma sekcja formularza w której znajduje się formant, przy niepowodzeniu zwraca -1

Private Function zbGetSectionID_1(sCtlName As String) As Long
Dim ctl As Control
Dim i As Integer

zbGetSectionID_1 = -1
For i = 0 To 2
For Each ctl In Me.Section(i).Controls
If ctl.Name = sCtlName Then
zbGetSectionID_1 = i
Exit For
End If
Next
Next

End Function


' Metoda II - sprawdzana jest każda sekcja formularza, czy znajduje się w niej nasz Obiekt, zwraca numer jaki ma sekcja formularza w której znajduje się formant, przy niepowodzeniu zwraca -1

Private Function zbGetSectionID_2(sCtlName As String) As Long
Dim arrSect(0 To 2) As Long
Dim i As Integer
' stałe Access'a: acHeader = 1; acDetail = 0; acFooter = 2

On Error Resume Next
arrSect(0) = acHeader: arrSect(1) = acDetail: arrSect(2) = acFooter
zbGetSectionID_2 = -1
For i = 0 To 2
IsObject Me.Section(arrSect(i)).Controls(sCtlName)
If Err.Number = 0 Then
zbGetSectionID_2 = arrSect(i)
Exit Function
Else
Err.Clear
End If
Next

End Function


' przykładowe wywołanie:
Private Sub btnTest_Click()
Dim lRet As Long

' lRet = zbGetSectionID_1(Screen.ActiveControl.Name)
lRet = zbGetSectionID_2(Screen.ActiveControl.Name)
If lRet > -1 Then
MsgBox "Sekcja: " & Me.Section(lRet).Name & " (" & lRet & ")"
Else
MsgBox "Niepowodzenie"
End If

End Sub

 ΔΔΔ 

 

3.8 Jak zrobić migającą etykietę na formularzu ?

' utwórz etykietę o nazwie lblTest i skopiuj poniższy kod:


Private Sub Form_Load()
Me.lblTest.ForeColor = vbRed
Me.lblTest.BackColor = vbBlack
Me.TimerInterval = 1000
End Sub


Private Sub Form_Timer()
With Me.lblTest
If .ForeColor = vbRed Then
.ForeColor = vbBlack
.BackColor = vbRed
Else
.ForeColor = vbRed
.BackColor = vbBlack
End If
End With
End Sub

 ΔΔΔ 

 

3.9 Jak zrobić pasek postępu osadzony w formularzu, lub uruchamiany jako modalny formularz ?


 Pasek postępu w formularzu

   Przykład:  • acc03a_09  •  52 KB  •  status: FREE    
Pobrano    razy   

 ΔΔΔ