19/11/07 15:24
GrG
Adesso cerkerò di spiegarti con un esempio kosa è un context menu...
hai presente quando klikki con il tasto destro del mouse su un file?
Naturalmente ti appare un menu, quello è si kiama il context menu..
spero di essere stato kiaro...
hai presente quando klikki con il tasto destro del mouse su un file?
Naturalmente ti appare un menu, quello è si kiama il context menu..
spero di essere stato kiaro...
aaa
19/11/07 15:36
antometal
innanzi tutto crei il menù lo metti deselezioni il visible
poi nel mouseup o mousedown della form metti
if button = vbrightbutton then Popup nomemenu
poi nel mouseup o mousedown della form metti
if button = vbrightbutton then Popup nomemenu
aaa
19/11/07 15:47
GrG
scusa, nn mi sn spiegato bene...
non voglio imitare il context menu ma voglio ke il mio programma vi si inserisca fra i vari elementi...
non voglio imitare il context menu ma voglio ke il mio programma vi si inserisca fra i vari elementi...
aaa
21/11/07 14:35
gius
Prova questo
__________________________________________________
Gius nuovo moderatore della sezione visual basic
in un modulo bas Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public 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 Public Const WM_SYSCOMMAND = &H112 ‘Messaggio ricevuto dalla finestra Public Const MF_SEPARATOR = &H800& ‘Linea che divide le voci di menu Public Const MF_STRING = &H0& ‘Specifica che la voce di menu è una stringa Public Const GWL_WNDPROC = (-4) ‘Indice per creare una sotto classe con SetWindowLong Public VecchiaProc As Long ‘Indirizzo Window Procedure di Default Public Const IDM_MenuApri As Long = 1010 ‘Identificatore voce di menu Apri Public Const IDM_MenuChiudi As Long = 1020 ‘Identificatore voce di menu chiudi Public Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" _ (ByVal hMenu As Long, _ ByVal wFlags As Long, _ ByVal wIDNewItem As Long, _ ByVal lpNewItem As String) As Long Public Declare Function GetSystemMenu Lib "user32" _ (ByVal hwnd As Long, _ ByVal bRevert As Long) As Long Public Function SubMenuForm(param As Form) Dim IDSysMenu As Long, ValRet As Long IDSysMenu = GetSystemMenu(param.hwnd, 0&) ValRet = AppendMenu(IDSysMenu, MF_SEPARATOR, _ 0&, vbNullString) ValRet = AppendMenu(IDSysMenu, MF_STRING, _ IDM_MenuApri, "Apri pippino.exe") ValRet = AppendMenu(IDSysMenu, MF_STRING, _ VecchiaProc = SetWindowLong(param.hwnd, _ GWL_WNDPROC, AddressOf GestMenuForm) End Function Public Function GestMenuForm(ByVal hwnd As Long, _ ByVal iMsg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long If iMsg = WM_SYSCOMMAND Then Select Case wParam Case IDM_MenuApri Apriprog Exit Function End Select End If GestMenuForm = CallWindowProc(VecchiaProc, _ hwnd, iMsg, wParam, lParam) End Function Public Sub Apriprog() Shell App.Patch & "/pippino.exe" End Sub
__________________________________________________
Gius nuovo moderatore della sezione visual basic
aaa
21/11/07 16:47
GrG
Mi spiace ma il codice nn funge...
cioè manko me lo fà compilare, poi ci sn degli errori...
Ma ti funziona?
cmq nn capisco molto bene il pezzo:
[...]
ValRet = AppendMenu(IDSysMenu, MF_STRING, _
VecchiaProc = SetWindowLong(param.hwnd, ...
[...]
ValRet = AppendMenu(IDSysMenu, MF_STRING, _
rimane incompleto, cosa ci devo mette dopo?
cioè manko me lo fà compilare, poi ci sn degli errori...
Ma ti funziona?
cmq nn capisco molto bene il pezzo:
[...]
ValRet = AppendMenu(IDSysMenu, MF_STRING, _
VecchiaProc = SetWindowLong(param.hwnd, ...
[...]
ValRet = AppendMenu(IDSysMenu, MF_STRING, _
rimane incompleto, cosa ci devo mette dopo?
aaa
21/11/07 20:45
gius
Postato originariamente da gius:
Prova questo
__________________________________________________
Gius nuovo moderatore della sezione visual basic
Prova questo
in un modulo bas Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public 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 Public Const WM_SYSCOMMAND = &H112 ‘Messaggio ricevuto dalla finestra Public Const MF_SEPARATOR = &H800& ‘Linea che divide le voci di menu Public Const MF_STRING = &H0& ‘Specifica che la voce di menu è una stringa Public Const GWL_WNDPROC = (-4) ‘Indice per creare una sotto classe con SetWindowLong Public VecchiaProc As Long ‘Indirizzo Window Procedure di Default Public Const IDM_MenuApri As Long = 1010 ‘Identificatore voce di menu Apri Public Const IDM_MenuChiudi As Long = 1020 ‘Identificatore voce di menu chiudi Public Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" _ (ByVal hMenu As Long, _ ByVal wFlags As Long, _ ByVal wIDNewItem As Long, _ ByVal lpNewItem As String) As Long Public Declare Function GetSystemMenu Lib "user32" _ (ByVal hwnd As Long, _ ByVal bRevert As Long) As Long Public Function SubMenuForm(param As Form) Dim IDSysMenu As Long, ValRet As Long IDSysMenu = GetSystemMenu(param.hwnd, 0&) ValRet = AppendMenu(IDSysMenu, MF_SEPARATOR, _ 0&, vbNullString) ValRet = AppendMenu(IDSysMenu, MF_STRING, _ IDM_MenuApri, "Apri pippino.exe") [b]ValRet = AppendMenu(IDSysMenu, MF_STRING, _ VecchiaProc = SetWindowLong(param.hwnd, _ GWL_WNDPROC, AddressOf GestMenuForm)[/b] End Function Public Function GestMenuForm(ByVal hwnd As Long, _ ByVal iMsg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long If iMsg = WM_SYSCOMMAND Then Select Case wParam Case IDM_MenuApri Apriprog Exit Function End Select End If GestMenuForm = CallWindowProc(VecchiaProc, _ hwnd, iMsg, wParam, lParam) End Function Public Sub Apriprog() Shell App.Patch & "/pippino.exe" End Sub
__________________________________________________
Gius nuovo moderatore della sezione visual basic
Guarda bene prima di postare
Per gli errori dimmi quali sono e vediamo se li posso corregere
aaa