Buongiorno ragazzi
Ho un form in cui oltre a vari oggetti è contenuta una toolbar. Questa toolbar ha un bottone cliccando il quale appare un PopupMenù.
L'apertura di questo PopupMenù l'ho gestita tramite API, perchè avevo la necessità di farlo apparire in un punto preciso.
La creazione del menù la eseguo direttamente sull'oggetto Menù.
Il problema mi si pone nel momento in cui rendo invisibile tale menù in progettazione; infatti quando clicco sulla toolbar il sistema non trova il riferimento al menù (invisibile) e quindi non me lo fa comparire.
Vorrei sapere come è possibile superare questo problema e fare come fa esattamente la funzione PopupMenù di VB, che fa apparire un menù anche se invisibile.
Di seguito vi riporto il codice che ho utilizzato:
codice:
Const TPM_LEFTALIGN = &H0&
Private Declare Function TrackPopupMenu Lib "user32" ( _
ByVal hMenu As Long, _
ByVal wFlags As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nReserved As Long, _
ByVal hWnd As Long, _
ByVal lprc As Any) As Long
Private Declare Function GetMenu Lib "user32" ( _
ByVal hWnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" ( _
ByVal hMenu As Long, _
ByVal nPos As Long) As Long
Dim hMenu As Long
Dim hMnuSub As Long
' Crea il menù dinamicamente con le voci trovate sul database
Public Sub CreaMenuCategorie()
' Scarica il menù
ScaricaMenu
Dim intMenu As Integer
Dim miaSQL As String
Dim rsRs As New ADODB.Recordset
miaSQL = "Exec sp_RicercaCategoriePerAnno " & CLng(strAnno)
rsRs.Open miaSQL, miaConn, 1, 3
If rsRs.RecordCount > 0 Then
intMenu = 0
rsRs.MoveFirst
Do Until rsRs.EOF
' carica una nuova voce se l'Index è > 0
If intMenu > 0 Then Load mElenco(intMenu)
With mElenco(intMenu) ' imposta le proprietà
.Caption = Trim(rsRs("Categoria"))
.Tag = rsRs("IDCategoria")
.Visible = True
End With
intMenu = intMenu + 1
rsRs.MoveNext
Loop
End If
rsRs.Close
Set rsRs = Nothing
End Sub
Private Sub ScaricaMenu()
'cancella l'elenco delle categorie dal menù
Dim i As Integer
For i = mElenco.UBound To 1 Step -1
Unload mElenco(i)
Next i
End Sub
' Toolbar che visualizza il menù
Private Sub tbFreccia_ButtonClick(ByVal Button As MSComctlLib.Button)
Dim lngX As Long
Dim lngY As Long
lngX = fraCategorie.Left
lngY = fraCategorie.Top
hMenu = GetMenu(Me.hWnd)
hMnuSub = GetSubMenu(hMenu, 0)
' Fa apparire il menù popup
TrackPopupMenu hMnuSub, TPM_LEFTALIGN, lngX, lngY, 0, Me.hWnd, 0&
End Sub
' SubItem del menù popup
Private Sub mElenco_Click(Index As Integer)
MsgBox mElenco(Index).Caption
End Sub
Grazie a tutti