Newsgroup: it.comp.lang.visual-basic
Titolo: Popup menu

Ho notato che un form modale non puo' visualizzare un popup menu.
E' un comportamento che si puo' cambiare?
grazie in anticipo,
tragick

Beh puoi cambiarlo non mostrandolo modale con vbmodal come parametro al
metodo show .. ma usando l'api setforegroundwindow a cui passi l'handle
della form... poi fai il meno popup

 E' un comportamento che si puo' cambiare?
I popup funzionano tranquillamente anche con le form modali; il tuo problema
e' altrove... quasi sicuramente hai visualizzato questa finestra partendo
dall'evento Click di un'altro popup, sbaglio?
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown


Sei un veggente, assolutamente non sbagli!!!
Non sapevo di questo comportamento... adesso che devo fare?
ciao,
tragick
P.S.: cmq visualizzando il form in maniera non modale il popup menu
compare.

 Non sapevo di questo comportamento... adesso che devo fare?
E' un classico... ti riporto il passo di guida (metodo PopUpMenu) che
descrive la cosa, nota in particolare la frase finale
"When you display a pop-up menu, the code following the call to the
PopupMenu method isn't executed until the user either chooses a command from
the menu (in which case the code for that command's Click event is executed
before the code following the PopupMenu statement) or cancels the menu. In
addition, only one pop-up menu can be displayed at a time; therefore, calls
to this method are ignored if a pop-up menu is already displayed or if a
pull-down menu is open."
Ora, dato che quando mostri una finestra modal il codice della routine
chiamante si blocca, quando usi proprio l'evento Click di un Popup per
aprire una form del genere a tutti gli effetti il popup rimane "vivo" fino a
che l'evento non si esaurisce... ecco che se dalla finestra provi una
ulteriore chiamata a PopUpMenu questo fallisce per quanto scritto sopra.
Se rendessi il click del menu' asincrono, in modo che l'apertura della form
non blocchi il codice, ecco che non avresti il problema; una soluzione , per
quanto non particolarmente elegante, e' quella di usare un timer in questo
modo:
'tmrPopup e' un controllo Timer con Interval abbastanza breve, diciamo 30ms
Sub Form_Load()
'sempre disabilitato, di default
tmrPopup.Enabled = False
End Sub
Sub mnPopUno_Click()
tmrPopup.Tag = "Uno"
tmrPopup.Enabled = True
End Sub
Sub mnPopDue_Click()
tmrPopup.Tag = "Due"
tmrPopup.Enabled = True
End Sub
Sub tmrPopup_Timer()
With tmrPopup
    'lo disabilitiamo subito, non ci serve una serie di eventi...
    .Enabled = False
    Select Case .Tag
    Case "Uno"
        Form1.Show vbModal
    Case "Due"
        Form2.Show vbModal
    Case "Qualcosa"
        'qualcos'altro.. e cosi' via
    End Select
End With
End Sub
dovrebbe essere abbastanza chiaro, dato che il timer viene attivato in modo
asincrono gli eventi click dei menu' rientrano subito e quindi non bloccano
l'eventuale sequenza di Popup sulle successive form


un'altra soluzione e' come ti ho detto prima di visualizzare la form non
modale... e di renderla quella obbligatoria di primo piano tramite l'api che
ti ho detto... cosi il codice va avanti dopo lo show e il primo popup si
chiude....


Alla luce di questa spiegazione e visto che debbo mantenere per forza
l'apertura del form modale, vado subito ad implementare la soluzione
basata sul timer che mi hai proposto.
grazie!
tragick

 ha scritto nel messaggio

Purtroppo, per come ho strutturato il programma, ho bisogno di
presentare il form in maniera modale.
In ogni caso, ti ringrazio perche' la conoscenza dell'api
setforegroundwindow probabilmente mi tornera' utile molto presto.
tragick

setforegroundwindow probabilmente mi tornera' utile molto presto.
Molto più di quanto pensi... non so perché, ma io cerco di evitare le
TimerProc più che posso... Timer... Tic Tac Tic Tac... CPU, CPU,
CPU!!!!.... brrrrrr...
Ciao,
Moreno
-- 
sirri at morenosoft dot com
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------


Ci vado a dare un'occhiata subito, grazie
tragick

 E' un comportamento che si puo' cambiare?
Personalmente ho risolto così:
Ho fatto una Sub che si occupa dell'esposizione del popUpMenu.
L'evento Click delle attività/elementi del PopUpMenu che possono essere
richiamate da form modali, si limita a mettere in una variabile qualcosa che
identifichi univocamente la scelta effettuata e poi subito Exit Sub.
In tal modo il PopUpMenu si chiude e quindi il suo "stato modale" viene
cancellato.
Il chiamante (nel mio caso la Sub menzionata all'inizio), subito dopo
l'istruzione di esposizione del PopUpMenu, verifica il contenuto di quella
variabile e ne esegue le istruzioni relative.