Est-il possible de créer un menu de façon dynamique en VB6 ? Si oui, comment ?
Bonsoir,
La réponse est ... bien sûr et même ... Quand on a le gout des choses héroïques, on peut même partir d'un Form vierge et construire les différents éléments " à la main " par le code ...
HB
Dans le message mn.4c787d634342d457.36669@ee.fr,
Bernardo <b@ee.fr> a écrit :
Bonjour,
Est-il possible de créer un menu de façon dynamique en VB6 ?
Si oui, comment ?
Bonsoir,
La réponse est ... bien sûr
et même ...
Quand on a le gout des choses héroïques,
on peut même partir d'un Form vierge
et construire les différents éléments
" à la main "
par le code ...
Est-il possible de créer un menu de façon dynamique en VB6 ? Si oui, comment ?
Bonsoir,
La réponse est ... bien sûr et même ... Quand on a le gout des choses héroïques, on peut même partir d'un Form vierge et construire les différents éléments " à la main " par le code ...
HB
Bernardo
> Dans le message , Bernardo a écrit :
Bonjour,
Est-il possible de créer un menu de façon dynamique en VB6 ? Si oui, comment ?
Bonsoir,
La réponse est ... bien sûr et même ... Quand on a le gout des choses héroïques, on peut même partir d'un Form vierge et construire les différents éléments " à la main " par le code ...
HB
Et comment STP ?
> Dans le message mn.4c787d634342d457.36669@ee.fr,
Bernardo <b@ee.fr> a écrit :
Bonjour,
Est-il possible de créer un menu de façon dynamique en VB6 ?
Si oui, comment ?
Bonsoir,
La réponse est ... bien sûr
et même ...
Quand on a le gout des choses héroïques,
on peut même partir d'un Form vierge
et construire les différents éléments
" à la main "
par le code ...
Est-il possible de créer un menu de façon dynamique en VB6 ? Si oui, comment ?
Bonsoir,
La réponse est ... bien sûr et même ... Quand on a le gout des choses héroïques, on peut même partir d'un Form vierge et construire les différents éléments " à la main " par le code ...
HB
Et comment STP ?
Alain CROS
Bonjour,
1 menu dans une Msgbox.
Private Declare Function CreateMenu& _ Lib "user32" _ ()
Private Declare Function SetWindowsHookEx& _ Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&)
Private Declare Function GetCurrentThreadId& _ Lib "kernel32" _ ()
Private Declare Function UnhookWindowsHookEx& _ Lib "user32" _ (ByVal hHook&)
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 LeHook&, OldWinProc&, Lemsg$
Sub main() Const WH_CBT& = &H5 LeHook = SetWindowsHookEx(WH_CBT, AddressOf HookMsgb, 0&, GetCurrentThreadId) Lemsg = "Utilisation de CreateMenu" MsgBox "" End Sub
Private Function HookMsgb&(ByVal lMsg&, ByVal wParam&, ByRef lParam&) Const HCBT_ACTIVATE& = 5&, MF_STRING& = &H0, GWL_WNDPROC& = -4&, _ MIIM_TYPE& = &H10, MIIM_ID& = &H2, SW_HIDE& = 0& Dim MnuItem As MENUITEMINFO, hMenu& If lMsg = HCBT_ACTIVATE Then UnhookWindowsHookEx LeHook ShowWindow GetDlgItem(wParam, 1&), SW_HIDE MoveWindow wParam, 100&, 100&, 400&, 300&, True hMenu = CreateMenu() With MnuItem .cbSize = Len(MnuItem) .fMask = MIIM_TYPE Or MIIM_ID .fType = MF_STRING .wID = 110& .dwTypeData = "Menu A" InsertMenuItem hMenu, 0&, True, MnuItem .wID = 111& .dwTypeData = "Menu B" InsertMenuItem hMenu, 1&, True, MnuItem .wID = 112& .dwTypeData = "Quitter" InsertMenuItem hMenu, 2&, True, MnuItem End With SetMenu wParam, hMenu OldWinProc = SetWindowLong(wParam, GWL_WNDPROC, AddressOf MsgbProc) End If HookMsgb = False End Function
Private Function MsgbProc&(ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&) Const GWL_WNDPROC& = -4&, WM_CLOSE& = &H10, WM_COMMAND& = &H111 Select Case Msg Case Is = WM_COMMAND If lParam = 0& Then Select Case wParam Case Is = 110& MsgBox "Vous avez choisi le Menu A", vbInformation, Lemsg Case Is = 111& MsgBox "Vous avez choisi le Menu B", vbInformation, Lemsg Case Is = 112& PostMessage hWnd, WM_CLOSE, 0&, 0& End Select End If Case Is = WM_CLOSE SetWindowLong hWnd, GWL_WNDPROC, OldWinProc End Select MsgbProc = CallWindowProc(OldWinProc, hWnd, Msg, wParam, lParam) End Function
Alain CROS
"Bernardo" a écrit dans le message de news: | > Dans le message , | > Bernardo a écrit : | >> Bonjour, | >> | >> Est-il possible de créer un menu de façon dynamique en VB6 ? | >> Si oui, comment ? | > | > Bonsoir, | > | > La réponse est ... bien sûr | > et même ... | > Quand on a le gout des choses héroïques, | > on peut même partir d'un Form vierge | > et construire les différents éléments | > " à la main " | > par le code ... | > | > HB | | Et comment STP ? | |
Bonjour,
1 menu dans une Msgbox.
Private Declare Function CreateMenu& _
Lib "user32" _
()
Private Declare Function SetWindowsHookEx& _
Lib "user32" Alias "SetWindowsHookExA" _
(ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&)
Private Declare Function GetCurrentThreadId& _
Lib "kernel32" _
()
Private Declare Function UnhookWindowsHookEx& _
Lib "user32" _
(ByVal hHook&)
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 LeHook&, OldWinProc&, Lemsg$
Sub main()
Const WH_CBT& = &H5
LeHook = SetWindowsHookEx(WH_CBT, AddressOf HookMsgb, 0&, GetCurrentThreadId)
Lemsg = "Utilisation de CreateMenu"
MsgBox ""
End Sub
Private Function HookMsgb&(ByVal lMsg&, ByVal wParam&, ByRef lParam&)
Const HCBT_ACTIVATE& = 5&, MF_STRING& = &H0, GWL_WNDPROC& = -4&, _
MIIM_TYPE& = &H10, MIIM_ID& = &H2, SW_HIDE& = 0&
Dim MnuItem As MENUITEMINFO, hMenu&
If lMsg = HCBT_ACTIVATE Then
UnhookWindowsHookEx LeHook
ShowWindow GetDlgItem(wParam, 1&), SW_HIDE
MoveWindow wParam, 100&, 100&, 400&, 300&, True
hMenu = CreateMenu()
With MnuItem
.cbSize = Len(MnuItem)
.fMask = MIIM_TYPE Or MIIM_ID
.fType = MF_STRING
.wID = 110&
.dwTypeData = "Menu A"
InsertMenuItem hMenu, 0&, True, MnuItem
.wID = 111&
.dwTypeData = "Menu B"
InsertMenuItem hMenu, 1&, True, MnuItem
.wID = 112&
.dwTypeData = "Quitter"
InsertMenuItem hMenu, 2&, True, MnuItem
End With
SetMenu wParam, hMenu
OldWinProc = SetWindowLong(wParam, GWL_WNDPROC, AddressOf MsgbProc)
End If
HookMsgb = False
End Function
Private Function MsgbProc&(ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&)
Const GWL_WNDPROC& = -4&, WM_CLOSE& = &H10, WM_COMMAND& = &H111
Select Case Msg
Case Is = WM_COMMAND
If lParam = 0& Then
Select Case wParam
Case Is = 110&
MsgBox "Vous avez choisi le Menu A", vbInformation, Lemsg
Case Is = 111&
MsgBox "Vous avez choisi le Menu B", vbInformation, Lemsg
Case Is = 112&
PostMessage hWnd, WM_CLOSE, 0&, 0&
End Select
End If
Case Is = WM_CLOSE
SetWindowLong hWnd, GWL_WNDPROC, OldWinProc
End Select
MsgbProc = CallWindowProc(OldWinProc, hWnd, Msg, wParam, lParam)
End Function
Alain CROS
"Bernardo" <b@ee.fr> a écrit dans le message de news: mn.52e67d633cf4a037.36669@ee.fr...
| > Dans le message mn.4c787d634342d457.36669@ee.fr,
| > Bernardo <b@ee.fr> a écrit :
| >> Bonjour,
| >>
| >> Est-il possible de créer un menu de façon dynamique en VB6 ?
| >> Si oui, comment ?
| >
| > Bonsoir,
| >
| > La réponse est ... bien sûr
| > et même ...
| > Quand on a le gout des choses héroïques,
| > on peut même partir d'un Form vierge
| > et construire les différents éléments
| > " à la main "
| > par le code ...
| >
| > HB
|
| Et comment STP ?
|
|
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 LeHook&, OldWinProc&, Lemsg$
Sub main() Const WH_CBT& = &H5 LeHook = SetWindowsHookEx(WH_CBT, AddressOf HookMsgb, 0&, GetCurrentThreadId) Lemsg = "Utilisation de CreateMenu" MsgBox "" End Sub
Private Function HookMsgb&(ByVal lMsg&, ByVal wParam&, ByRef lParam&) Const HCBT_ACTIVATE& = 5&, MF_STRING& = &H0, GWL_WNDPROC& = -4&, _ MIIM_TYPE& = &H10, MIIM_ID& = &H2, SW_HIDE& = 0& Dim MnuItem As MENUITEMINFO, hMenu& If lMsg = HCBT_ACTIVATE Then UnhookWindowsHookEx LeHook ShowWindow GetDlgItem(wParam, 1&), SW_HIDE MoveWindow wParam, 100&, 100&, 400&, 300&, True hMenu = CreateMenu() With MnuItem .cbSize = Len(MnuItem) .fMask = MIIM_TYPE Or MIIM_ID .fType = MF_STRING .wID = 110& .dwTypeData = "Menu A" InsertMenuItem hMenu, 0&, True, MnuItem .wID = 111& .dwTypeData = "Menu B" InsertMenuItem hMenu, 1&, True, MnuItem .wID = 112& .dwTypeData = "Quitter" InsertMenuItem hMenu, 2&, True, MnuItem End With SetMenu wParam, hMenu OldWinProc = SetWindowLong(wParam, GWL_WNDPROC, AddressOf MsgbProc) End If HookMsgb = False End Function
Private Function MsgbProc&(ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&) Const GWL_WNDPROC& = -4&, WM_CLOSE& = &H10, WM_COMMAND& = &H111 Select Case Msg Case Is = WM_COMMAND If lParam = 0& Then Select Case wParam Case Is = 110& MsgBox "Vous avez choisi le Menu A", vbInformation, Lemsg Case Is = 111& MsgBox "Vous avez choisi le Menu B", vbInformation, Lemsg Case Is = 112& PostMessage hWnd, WM_CLOSE, 0&, 0& End Select End If Case Is = WM_CLOSE SetWindowLong hWnd, GWL_WNDPROC, OldWinProc End Select MsgbProc = CallWindowProc(OldWinProc, hWnd, Msg, wParam, lParam) End Function
Alain CROS
"Bernardo" a écrit dans le message de news: | > Dans le message , | > Bernardo a écrit : | >> Bonjour, | >> | >> Est-il possible de créer un menu de façon dynamique en VB6 ? | >> Si oui, comment ? | > | > Bonsoir, | > | > La réponse est ... bien sûr | > et même ... | > Quand on a le gout des choses héroïques, | > on peut même partir d'un Form vierge | > et construire les différents éléments | > " à la main " | > par le code ... | > | > HB | | Et comment STP ? | |