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:
Grazie a tutticodice: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![]()



Rispondi quotando