Newsgroup: it.comp.lang.visual-basic
Titolo: [Popupmenu - VB6 SP5]

In un form utilizzo la funzione popupmenu per agevolare l'utente nelle
3 operazioni di Aggiunta-Modifica-Eliminazione di un record, nel caso
della modifica e dell'aggiunta, il controllo passa ad un nuovo form a
scelta obbligatoria dove utilizzo di nuovo la funzione popupmenu che
punta ad un menu esistente su questo secondo form, che purtroppo non
si apre.
Ho letto che la funzione popupmenu permette di aprire solo un menu per
volta e che un menu viene chiuso, in base alle impostazioni che si
passano alla funzione, in base al tasto del mouse cliccato.
' - Codice nel form1
Private Sub msfgintestatario_MouseDown(Button As Integer, Shift As
Integer, x As Single, y As Single)
   If Button = vbRightButton Then
      PopupMenu mnuGestione
   End If
End Sub
' - Codice nel form2 che non mi apre il menu
Private Sub msfganagrafica_MouseDown(Button As Integer, Shift As
Integer, x As Single, y As Single)
   If Button = vbRightButton Then
      PopupMenu mnuGestione1
   End If
End Sub
Ho provato anche con:
 
  PopupMenu mnuGestione, 2
ma niente.
Qualcuno ha già incontrato e risolto questo quesito?


Non vorrei dire una boiata, prendi questo con le molle.
Il problema è che l'apertura di un form modale blocca l'esecuzione del
codice nel form chiamante, fino a quando il form chiamato (il 2) non viene
chiuso.
Quindi se tu apri form2 in modale dall'evento click del menu del form1, il
menu risulterà aperto fino a quando l'esecuzione del codice non sarà
terminata (cioè fino a quando non uscirai da form2).
Quindi essendo il menu del form1 occupato, perchè l'esecuzione del suo
codice non è terminata finchè il form chiamato in modale non è chiuso, Vb
non ti permette di aprirne un'altro.
Ho fatto un po' di casino, ma è più semplice di quanto possa sembrare.
soluzioni rapide che al momento mi vengono in mente
modo 1 - brutto -
non apri il form2 in modale
modo2 - più bello - io l'ho usato in situazioni analoghe
Esiste una api che ti permette di rendere un form sempre in primo piano,
vagamente se fosse in modale, senza però bloccare l'esecuzione del codice
nel form chiamante.
apè che la vo a recuperare
Private Declare Sub SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal
hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal Cx As Long,
ByVal cy As Long, ByVal wFlags As Long)
Private Sub Form_Load()
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, &H3
End Sub
la sfiga è che il form sotto continuerà a risponbdere alle sollecitazioni
dell'utente, puoi ovviare con un booleano che setti a true quando la seconda
form è aperta.e testi in tutti gli eventi
Ciao

passano alla funzione, in base al tasto del mouse cliccato.
Sul newsgroup la soluzione che era stata trovata consisteva in uno
"sporco" trucco:
1. il menu popup che deve aprire il primo form in realta' attiva un
timer di durata molto breve;
2. il menu si chiude;
3. al tick del timer viene disabilitato lo stesso ed aperto il form;
4. sul form aperto ora e' utilizzabile il menu pop up.
-- 
ciao, hal

 4. sul form aperto ora e' utilizzabile il menu pop up.
grande genialata, con chi devo complimentarmi?

grande genialata, con chi devo complimentarmi?
Mi pare di averla letta da un vecchio post di Luca Dormio, non so se a
sua volta l'abbia "rivenduta" pure lui ;-)
-- 
ciao, hal

 sua volta l'abbia "rivenduta" pure lui ;-)
Vi ringrazio per le soluzioni che mi avete proposto, io nel frattempo
ho studiato un altro pò ed ho trovato questa, ditemi cosa ne pensate:
1) Ho creato la funzione ShowMenu che apre il menu popup desiderato
tramite chiamate alle api di windows
Private Function ShowMenu()
   Dim retvalue As Long, hmnu As Long, hmnuSub As Long, pRect As RECT
   Dim pPoinApi As POINTAPI
   GetCursorPos pPoinApi ' - Rileva le coordinate del mouse
   hmnu = GetMenu(Me.hwnd) ' - Ottengo l'handle del menu principale
   hmnuSub = GetSubMenu(hmnu, 1) ' - Ottengo quello del menu popup che
mi interessa
   retvalue = TrackPopupMenu(hmnuSub, TPM_LEFTALIGN, pPoinApi.x,
pPoinApi.y, 0, Me.hwnd, pRect) ' - Apro il menu popup che funziona
perfettamente anche nel form modale
End Function
Le costanti, gli udt e le funzioni che vi servono per implementare la
funzione
ShowMenu.
Public Const TPM_LEFTALIGN = &H0&
Public Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Public Type POINTAPI
     x As Long
     y As Long
End Type
Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As
Long
Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long,
_
   ByVal nPos As Long) As Long
Public 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, _
   lprc As RECT) As Long
Saluti da Piero.

 ha scritto nel messaggio
news:c05ff6af.03050...@posting.google.com...

Non l'ho provata, ma se funziona complimenti davvero.
--
David Ruscelli
Oh... My dog!