Forum - Visual Basic 6
- context menu
Pagine: [ 1 2 3 4 ]
|
GrG (Member )
Guru^2
Messaggi: 3430
Iscritto: 21/08/2007
Ciao!
Come posso fare in modo ke, se premuto un pulsante, il mio programma si aggiunga al context menu??
gius (Ex-Member)
Expert
Messaggi: 294
Iscritto: 20/06/2007
context cosa?!
GrG (Member )
Guru^2
Messaggi: 3430
Iscritto: 21/08/2007
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 ...
antometal (Member )
Guru
Messaggi: 691
Iscritto: 12/09/2007
innanzi tutto crei il menù lo metti deselezioni il visible
poi nel mouseup o mousedown della form metti
if button = vbrightbutton then Popup nomemenu
GrG (Member )
Guru^2
Messaggi: 3430
Iscritto: 21/08/2007
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...
gius (Ex-Member)
Expert
Messaggi: 294
Iscritto: 20/06/2007
Prova questo
Codice sorgente - presumibilmente VB.NET
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
GrG (Member )
Guru^2
Messaggi: 3430
Iscritto: 21/08/2007
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?
gius (Ex-Member)
Expert
Messaggi: 294
Iscritto: 20/06/2007
Postato originariamente da gius :
Prova questo
Codice sorgente - presumibilmente VB.NET
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
Guarda bene prima di postare
Per gli errori dimmi quali sono e vediamo se li posso corregere
P4p3r0g4 (Member )
Guru
Messaggi: 1319
Iscritto: 29/12/2006
beh io non ho letto il codice ma ho già visto che nella penultima riga c'è "app.patch", che a meno che non abbiano inserito un nuovo method, credo che non esista.
magari app.path
E COMUNQUE VANNO LE VIRGOLETTE PERCHE' ALTRIMENTI AL PRIMO SPAZIO LO SHELL VA TUTTO A ...
hai provato il codice prima di postarlo?