Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1056to1060
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

UserForm Menu erweitern um Submenu

UserForm Menu erweitern um Submenu
06.03.2009 08:38:45
MikeS
Hallo,
wie kann ich in angehängten Code weitere Sub-Menüs einbauen (evtl. mit Bild!)
Vielen Dank!
Mike
' in Standardmodul
Option Explicit
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" ( _
ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Const WM_COMMAND As Long = &H111
Public glngOldProc As Long

Public Function NewProc(ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_COMMAND Then
If lParam = 0 Then
Select Case wParam
Case Is = 1100
MsgBox "'AA' gewählt"
Case Is = 1200
MsgBox "'AB' gewählt"
Case Is = 2100
MsgBox "'BA' gewählt"
Case Is = 2200
MsgBox "'BB' gewählt"
End Select
End If
End If
NewProc = CallWindowProc(glngOldProc, hWnd, Msg, wParam, lParam)
End Function


' in UserForm
Option Explicit
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function CreatePopupMenu Lib "user32" () As Long
Private Declare Function CreateMenu Lib "user32" () As Long
Private Declare Function DestroyMenu Lib "user32" ( _
ByVal glngMenu As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" ( _
ByVal hWnd As Long) As Long
Private Declare Function SetMenu Lib "user32" ( _
ByVal hWnd As Long, _
ByVal glngMenu As Long) As Long
Private Declare Function InsertMenuItem Lib "user32" Alias "InsertMenuItemA" ( _
ByVal hMenu As Long, _
ByVal un As Long, _
ByVal bool As Long, _
lpcMenuItemInfo As MENUITEMINFO) As Long
Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type
Private Const MF_CHECKED = &H8&
Private Const MF_APPEND = &H100&
Private Const MF_DISABLED = &H2&
Private Const MF_GRAYED = &H1&
Private Const MF_SEPARATOR = &H800&
Private Const MF_STRING = &H0&
Private Const MIIM_STATE As Long = &H1&
Private Const MIIM_ID As Long = &H2&
Private Const MIIM_TYPE = &H10
Private Const MIIM_SUBMENU = &H4
Private Const MIIM_CHECKMARKS = &H8
Private Const GWL_WNDPROC = (-4)
Private mlngUserform As Long
Private mlngMenuParent As Long


Private Sub MakeMenu()
Dim MnuItem As MENUITEMINFO
Dim lngSub As Long
' Mainmenü anlegen
mlngMenuParent = CreateMenu()
With MnuItem
' Länge der Struktur
.cbSize = Len(MnuItem)
' 1. Submenü anlegen
lngSub = CreatePopupMenu()
' 1. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 1000& ' Eindeutige ID
.hSubMenu = lngSub ' Angabe des verbundenen Submenüs
.dwTypeData = "A" ' Menütext
' Menüpunkt ins Mainmenü einfügen
InsertMenuItem mlngMenuParent, 0&, True, MnuItem
' 1. Submenüpunkt, 1. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
'.fState = MF_GRAYED ' Ausgegraut
.wID = 1100& ' Eindeutige ID
.hSubMenu = lngSub ' enthält kein Submenü
.dwTypeData = "AA" ' Menütext
' Menüpunkt ins 1. Submenü einfügen
InsertMenuItem lngSub, 0&, True, MnuItem
' 2. Submenüpunkt, 1. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
'.fState = MF_GRAYED ' Ausgegraut
.wID = 1200& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "AB" ' Menütext
' Menüpunkt ins 1. Submenü einfügen
InsertMenuItem lngSub, 1&, True, MnuItem
' 2. Submenü anlegen
lngSub = CreatePopupMenu()
' 2. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 2000& ' Eindeutige ID
.hSubMenu = lngSub ' Angabe des verbundenen Submenüs
.dwTypeData = "B" ' Menütext
' Menüpunkt ins Mainmenü einfügen
InsertMenuItem mlngMenuParent, 1&, True, MnuItem
' 1. Submenüpunkt, 2. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 2100& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "BA" ' Menütext
' Menüpunkt ins 2. Submenü einfügen
InsertMenuItem lngSub, 0&, True, MnuItem
' 2. Submenüpunkt, 2. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_CHECKMARKS Or MIIM_STATE
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.fState = MF_CHECKED ' Haken gesetzt
.wID = 2200& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "BB" ' Menütext
' Menüpunkt ins 2. Submenü einfügen
InsertMenuItem lngSub, 1&, True, MnuItem
End With
' Menü mit Userform verbinden
SetMenu mlngUserform, mlngMenuParent
DrawMenuBar mlngUserform
' WindowProc umleiten
glngOldProc = SetWindowLong(mlngUserform, GWL_WNDPROC, AddressOf NewProc)
End Sub



Private Sub UserForm_Terminate()
DestroyMenu mlngMenuParent
SetWindowLong mlngUserform, GWL_WNDPROC, glngOldProc
End Sub



Private Sub UserForm_Activate()
mlngUserform = FindWindow(vbNullString, Me.Caption)
MakeMenu
End Sub


9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm Menu erweitern um Submenu
06.03.2009 08:47:08
Oberschlumpf
Hi Mike
Zumindest ich finde, dass es für alle weniger Aufwand wäre, wenn du uns mit genau diesem Code eine Bsp-Datei zeigst. Denn dann muss ein möglicher Antworter deinen Code nur verbessern/anpassen und nicht komplett "nachbauen". (auch copy & paste erfordert mehr Zeit, als ne Datei zu downloaden)
Ciao
Thorsten
AW: UserForm Menu erweitern um Submenu
06.03.2009 08:52:05
MikeS
Hi Thorsten,
ich habe versucht eine *.ZIP oder *.xls - Datei upzuloaden... Leider klappt das nicht!
Angeblich ungültiger Dateiname!?
Ciao Mike
P.S.
06.03.2009 08:53:46
MikeS
Der Nachbau ist in diesem Fall aber denkbar einfach...
Neue Userform + ein Modul einfügen und dann den Code reinkopieren...
Anzeige
kann jemand helfen?
06.03.2009 10:10:03
Oberschlumpf
Hi Mike
Der Nachbau funktionierte zwar, aber leider weiß ich auch keine Lösung. Auch bei google fand ich nix.
Zum Thema Upload und ungültiger Dateiname:
mögliche Gründe können diese sein...
...Datei- und/oder Pfadname enthalten Leer- , Sonderzeichen und/oder Umlaute
...die Verzeichnisstruktur ist zu tief
Diese Info für das nächste mal, wenn du ne Bsp-Datei zeigen willst.
Ciao
Thorsten
AW: kann jemand helfen?
06.03.2009 10:13:19
MikeS
Danke Dir... :-)
AW: kann jemand helfen?
06.03.2009 10:31:40
bst
Morgen auch,
frage vielleicht mal Max, von dem dürfte das ja sein, nicht? ;-)
http://www.office-loesung.de/ftopic134209_0_0_asc.php
M.E. musst Du den Block doch nur kopieren und ein paar Zahlen anpassen, d.h. .wID, .dwTypeData sowie die Parameter bei InsertMenuItem. "CA" liefert dann hier 3100.
cu, Bernd
--
' 3. Submenü anlegen
lngSub = CreatePopupMenu()
' 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 3000& ' Eindeutige ID
.hSubMenu = lngSub ' Angabe des verbundenen Submenüs
.dwTypeData = "C" ' Menütext
' Menüpunkt ins Mainmenü einfügen
InsertMenuItem mlngMenuParent, 2&, True, MnuItem

' 1. Submenüpunkt, 3. Hauptmenü
.fMask = MIIM_TYPE Or MIIM_ID
.fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
.wID = 3100& ' Eindeutige ID
.hSubMenu = 0 ' enthält kein Submenü
.dwTypeData = "CA" ' Menütext
' Menüpunkt ins 3. Submenü einfügen
InsertMenuItem lngSub, 0&, True, MnuItem


Anzeige
AW: kann jemand helfen?
06.03.2009 11:54:22
MikeS
Hi Bernd,
danke für Deine Antwort. Mit einem 3.Hauptmenü, so wie Du es zeigst, habe ich keine Probleme.
Ich möchte aber noch ein Sub-Menü AAA unter AA anlegen... z.B. A... AA... AAA
MfG Mike
P.S. Wie kann ich Nepumuk kontaktieren, ohne mich dort zu registrieren?
AW: kann jemand helfen?
06.03.2009 12:13:16
bst
Hi Mike,
Max schreibt auch hier.
HTH, Bernd
--
Private Sub MakeMenu()
    Dim MnuItem As MENUITEMINFO
    Dim lngSub As Long, lngSubSub As Long
    
    ' Mainmenü anlegen
    mlngMenuParent = CreateMenu()
    
    With MnuItem
        ' Länge der Struktur
        .cbSize = Len(MnuItem)
        
        ' 1. Submenü anlegen
        lngSub = CreatePopupMenu()
        
        ' 1. Hauptmenü
        .fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
        .fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
        .wID = 1000& ' Eindeutige ID
        .hSubMenu = lngSub ' Angabe des verbundenen Submenüs
        .dwTypeData = "A" ' Menütext
        ' Menüpunkt ins Mainmenü einfügen
        InsertMenuItem mlngMenuParent, 0&, True, MnuItem
        
        ' 1. Submenüpunkt, 1. Hauptmenü
        .fMask = MIIM_TYPE Or MIIM_ID Or MIIM_STATE
        .fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
        '.fState = MF_GRAYED ' Ausgegraut
        .wID = 1100& ' Eindeutige ID
        .hSubMenu = lngSub ' enthält kein Submenü
        .dwTypeData = "AA" ' Menütext
        ' Menüpunkt ins 1. Submenü einfügen
        InsertMenuItem lngSub, 0&, True, MnuItem
        
        ' 2. Submenüpunkt, 1. Hauptmenü
        .fMask = MIIM_TYPE Or MIIM_ID Or MIIM_STATE
        .fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
        '.fState = MF_GRAYED ' Ausgegraut
        .wID = 1200& ' Eindeutige ID
        .hSubMenu = 0 ' enthält kein Submenü
        .dwTypeData = "AB" ' Menütext
        ' Menüpunkt ins 1. Submenü einfügen
        InsertMenuItem lngSub, 1&, True, MnuItem
        
        ' 2. Submenü anlegen
        lngSub = CreatePopupMenu()
        
        ' 2. Hauptmenü
        .fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
        .fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
        .wID = 2000& ' Eindeutige ID
        .hSubMenu = lngSub ' Angabe des verbundenen Submenüs
        .dwTypeData = "B" ' Menütext
        ' Menüpunkt ins Mainmenü einfügen
        InsertMenuItem mlngMenuParent, 1&, True, MnuItem
        
        ' SubSubMenü anlegen
        lngSubSub = CreatePopupMenu()
        
        ' 1. Submenüpunkt, 2. Hauptmenü
        .fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
        .fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
        .wID = 2100& ' Eindeutige ID
        .hSubMenu = lngSubSub ' enthält weiteres Submenü
        .dwTypeData = "BA" ' Menütext
        ' Menüpunkt ins 2. Submenü einfügen
        InsertMenuItem lngSub, 0&, True, MnuItem
        
        ' 1. SubSubmenüpunkt, 1. Submenüpunkt, 2. Hauptmenü
        .fMask = MIIM_TYPE Or MIIM_ID
        .fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
        .wID = 2110& ' Eindeutige ID
        .hSubMenu = 0 ' enthält weiteres Submenü
        .dwTypeData = "BAA" ' Menütext
        ' Menüpunkt ins 2. Submenü einfügen
        InsertMenuItem lngSubSub, 0&, True, MnuItem
        
        ' 2. Submenüpunkt, 2. Hauptmenü
        .fMask = MIIM_TYPE Or MIIM_ID Or MIIM_CHECKMARKS Or MIIM_STATE
        .fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
        .fState = MF_CHECKED ' Haken gesetzt
        .wID = 2200& ' Eindeutige ID
        .hSubMenu = 0 ' enthält kein Submenü
        .dwTypeData = "BB" ' Menütext
        ' Menüpunkt ins 2. Submenü einfügen
        InsertMenuItem lngSub, 1&, True, MnuItem
        
        ' 3. Submenü anlegen
        lngSub = CreatePopupMenu()
        ' 3. Hauptmenü
        .fMask = MIIM_TYPE Or MIIM_ID Or MIIM_SUBMENU
        .fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
        .wID = 3000& ' Eindeutige ID
        .hSubMenu = lngSub ' Angabe des verbundenen Submenüs
        .dwTypeData = "C" ' Menütext
        ' Menüpunkt ins Mainmenü einfügen
        InsertMenuItem mlngMenuParent, 2&, True, MnuItem
        
        ' 1. Submenüpunkt, 3. Hauptmenü
        .fMask = MIIM_TYPE Or MIIM_ID
        .fType = MF_STRING ' Text als Menüpunkt ( ev. Bitmap)
        .wID = 3100& ' Eindeutige ID
        .hSubMenu = 0 ' enthält kein Submenü
        .dwTypeData = "CA" ' Menütext
        ' Menüpunkt ins 3. Submenü einfügen
        InsertMenuItem lngSub, 0&, True, MnuItem
    End With
    
    ' Menü mit Userform verbinden
    SetMenu mlngUserform, mlngMenuParent
    DrawMenuBar mlngUserform
    
    ' WindowProc umleiten
    glngOldProc = SetWindowLong(mlngUserform, GWL_WNDPROC, AddressOf NewProc)
End Sub


Anzeige
AW: kann jemand helfen?
06.03.2009 12:28:15
MikeS
Hi Bernd,
vielen Dank! es läuft perfekt und so hatte ich es mir vorgestellt :-)
Ciao Mike

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige