Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/07/2008, 12:34
Avatar de David
David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 20 años
Puntos: 839
De acuerdo Respuesta: Cabecera Listview

Antes que nada. Bienvenido al foro, parboli.

Gracias a este código descubrí que podemos interceptar los mensajes del sistema enviados a una ventana: http://www.recursosvisualbasic.com.a...de-ventana.htm

Así que en este caso lo único que necesitamos es adaptarlo al encabezado del ListView para que recibamos el mensaje de click con el botón derecho.

Coloca este código en un módulo:
Código PHP:
Option Explicit
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As LongByVal hwnd As LongByVal msg As LongByVal wParam As LonglParam As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As LongByVal nIndex As LongByVal dwNewLong As Long) As Long
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As LongByVal nIDEvent As LongByVal uElapse As LongByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As LongByVal nIDEvent As Long) As Long
Private Const GWL_WNDPROC = (-4)
Private Const 
WM_RBUTTONDOWN = &H204
Private TrueWindowProc As Long
Private TimerEvent As Long
Public Function WindowProc(ByVal hwnd As LongByVal msg As LongByVal wParam As LonglParam As Long) As Long
If msg WM_RBUTTONDOWN Then
    TimerEvent 
SetTimer(000AddressOf RClickEvent)
End If
WindowProc CallWindowProc(TrueWindowProchwndmsgwParamlParam)
End Function
Public 
Sub ChangeWindowProc(ByVal hwnd As Long)
TrueWindowProc SetWindowLong(hwndGWL_WNDPROCAddressOf WindowProc)
End Sub
Public Sub RClickEvent()
KillTimer 0TimerEvent
'Aquí debes programar lo que quieres que se realice al hacer click con el botón derecho'
'Por ejemplo en este caso mostramos un menú contextual del Form1 con el nombre MainMenu'
Form1.PopupMenu Form1.MainMenu
End Sub 
En tu ventana coloca este código:
Código PHP:
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongByVal hWnd2 As LongByVal lpsz1 As StringByVal lpsz2 As String) As Long
Private Sub Form_Load()
Dim lhWnd As Long
'Obtenemos el hwnd del encabezado del ListView'
lhWnd FindWindowEx(ListView1.hwnd0"SysHeader32"vbNullString)
'Cambiamos el procedimiento para interceptar los mensajes'
ChangeWindowProc lhWnd
End Sub 
Espero que te sirva. Saludos
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.