Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB6] API TrackPopupMenù: se il menù è invisibile non mi appare in runtime.

    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

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  2. #2
    non rispondo proprio al tuo quesito
    però a me la cosa funziona perfettamente se creo il menù tramite le apposite api (CreatePopupMenu e AppendMenu) in maniera che il menu crato sia gia un popup
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  3. #3
    Originariamente inviato da xegallo
    non rispondo proprio al tuo quesito
    però a me la cosa funziona perfettamente se creo il menù tramite le apposite api (CreatePopupMenu e AppendMenu) in maniera che il menu crato sia gia un popup
    usando le API che dici tu, cosa che ho provato e so che funziona, come faccio ad intercettare il click un subItem?

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.