Oppure

Loading
18/11/07 20:35
GrG
Ciao!
Come posso fare in modo ke, se premuto un pulsante, il mio programma si aggiunga al context menu??
aaa
19/11/07 13:22
gius
context cosa?!:-|:-|
aaa
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:asd:...
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
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...
aaa
21/11/07 14:35
gius
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")
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



:D:D:D
__________________________________________________

Gius nuovo moderatore della sezione visual basic:D:D:D
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?
aaa
21/11/07 20:45
gius
Postato originariamente da gius:

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



:D:D:D
__________________________________________________

Gius nuovo moderatore della sezione visual basic:D:D:D


Guarda bene prima di postare:ot:

Per gli errori dimmi quali sono e vediamo se li posso corregere
aaa