menu.zip 29.60 kB
dodane: 9 lipca 2010
przez: admin ściągnięć: 2921 | Nowa wersja makra demonstrującego tworzenie menu podręcznego (pod prawym klawiszem myszy).
Tym razem kod makra jest umieszczony w osobnym module klasy, dzięki któremu możliwe jest łatwe wykorzystanie kodu we własnym projekcie.
Poniżej pełny opis.
Klasa clsMenu umożliwia programistom VBA tworzenie w prosty sposób podręcznego menu (pod prawym klawiszem myszy)
bardzo przydatnego do wygodnej obsługi aplikacji VBA.
Jak zastosować we własnym projekcie.
Moduł clsMenu należy wstawić do drzewa projektu.
Możliwości:
1. Tworzenie menu podręcznego (pod prawym klawiszem myszy) a także podmenu o dowolnym poziomie zagłębienia,
2. Wyświetlanie ikon obok pozycji menu,
3. Wyświetlanie "haczka" przy pozycji menu - opcja "checked",
4. Jeżeli podano uchwyty do obrazków opcja checked zamiast standardowego "haczka" wyświetla ikony,
5. Wyświetlanie przy pozycji menu przycisków "radio button",
6. Wyświetlanie pozycji jako domyślnej - pisanej pogrubionej czcionką,
7. Blokowanie pozycji menu - użytkownik nie ma możliwości wybrania tak oznaczonej pozycji.
Ograniczenia:
1. Rozmiar wyświetlanych obrazków przy przy pozycjach menu wynosi 13x13 pikseli,
2. Brak możliwości wyświetlania kombinacji klawiszy skrótów (np. CTRL+C).
Użycie:
1. Dodanie pozycji menu i podmenu
W dowolnym module należy zadeklarować zmienną obiektową, reprezentującą menu oraz wszystkie podmenu.
Dim oMenu As New clsMenu
Dim oSubMenu As New clsMenu
a potem należy dodać pozycje menu wg poniższego wzorca:
oMenu(albo oSubMenu).AddMenuItem(
strMenu As String, _ # tekst menu, podanie znaku - wyświetla separator
[lngValue] As Long = -1, _ # wartość, jaką zwraca menu po wybraniu danej pozycji, jeśli nie jest podana
dodanie każdej następnej pozycji menu zwiększa tę wartość o 1 począwszy od zera.
[bDisabled] As Boolean = False, _ # pozycja menu jest zablokowana po podaniu wartości TRUE
[bChecked] As Boolean = False, _ # pozycja menu jest zaznaczona po podaniu wartości TRUE
[bRadio] As Boolean = False, _ # pozycja menu będzie zaznaczona kółkiem po podaniu wartości TRUE, jeśli bChecked jest równe TRUE
[bDefault] As Boolean = False, _ # pozycja menu będzie pogrubiona (domyślna)
[lUnChecked] As Long = 0, _ # uchwyt do ikony przy pozycji menu, jeśli pozycja menu nie jest zaznaczona (domyślnie)
[lChecked] As Long = 0, _ # uchwyt do ikony przy pozycji menu, jeśli pozycja menu jest zaznaczona
[cSubMenu] As clsMenu = Nothing) # podmenu
jeżeli dane menu ma posiadać podmenu należy jego elementy dodać przed dodawaniem elementów menu głównego, a pozycję menu, w której ma się pojawiać podmenu trzeba podać jako argument cSubMenu.
2. Wyświetlenie menu
lngID = oMenu.ShowMenu(lngHwnd)
gdzie lngHwnd to uchwyt do okna formularza, na którym ma się pojawić menu.
Wartość lngHwnd można określić następująco:
Dim lngHwnd As Long
lngHwnd = FindWindow(vbNullString, Me.Caption)
funkcję FindWindow należy na samym górze modułu zadeklarować następująco:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
lngID to wartość zwracana przez metodę .ShowMenu po wybraniu pozycji menu. Wartość ta jest określona przez lngValue przy dodawaniu pozycji do menu.
Na podstawie tej wartości można wywoływać odpowiednie procedury projektu.
----------------------------------------------------------------------------------------------
Twórca niniejszego oprogramowania, Andrzej Szarek, administrator serwisu VBA.Mania nie odpowiada ewentualne straty powstałe w wyniku jego użycia. |