Autore Topic: [Risolto] Menù popup  (Letto 1221 volte)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
[Risolto] Menù popup
« il: 18 Settembre 2017, 21:13:39 »
Buonasera a tutti,
ho una Form con una ListView con alcuni elementi visualizzati,
cliccando con il tasto destro del mouse su un qualsiasi elemento della lista
visualizzo un menù popup da dove seleziono le azioni da compiere, e fin qui
tutto funziona regolarmente. Quello che non riesco ad ottenere e evitare che
se premo il tasto tasto destro del mouse in un qualsiasi punto della ListView
dove ovviamente non ci sono dati visualizzati il menù popup compare ugualmente.
C'è qualche modo per evitare che questo accada?
Ho provato in tutti i modi ma non ho trovato una soluzione.
« Ultima modifica: 23 Settembre 2017, 22:16:43 da tornu »
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Menù popup
« Risposta #1 il: 18 Settembre 2017, 21:51:42 »
...in grandi linee:

Codice: [Seleziona]
Public Sub Form_Open()

  With ListView1
    .Add("chiave0", "aaaaa")
    .Add("chiave1", "bbbbb")
    .Add("chiave2", "ccccc")
  End With

End


Public Sub ListView1_MouseUp()

  If Mouse.Right Then
    If ListView1.FindAt(Mouse.X, Mouse.Y) Then Return
    Print ListView1.Current.Text
  Endif

End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Menù popup
« Risposta #2 il: 18 Settembre 2017, 22:28:14 »
Non vedo come questo possa aiutare Tornu col menu popup.
Io mi arrendo e vado a dormire, domani è un altro giorno...

 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Menù popup
« Risposta #3 il: 18 Settembre 2017, 23:35:33 »
Non vedo come questo possa aiutare Tornu col menu popup.

Cerco di spiegarmi meglio:

Codice: [Seleziona]
Public Sub Form_Open()

  With ListView1
    .Add("chiave0", "aaaaa")
    .Add("chiave1", "bbbbb")
    .Add("chiave2", "ccccc")
  End With

End


Public Sub ListView1_MouseUp()

  Dim menu1, submenu1, submenu2 As Menu
  Dim j, k, b As Byte

   If Mouse.Right Then
     If ListView1.FindAt(Mouse.X, Mouse.Y) Then Return
    ' Crea innanzitutto il Menu principale:
       menu1 = New Menu(Me)

' Poi crea quattro sotto-Menu:
       For j = 1 To 4
         submenu1 = New Menu(menu1)
' Mostra il testo per ciascuno dei quattro sotto-Menu:
         submenu1.Text = "submenu1_" & CStr(j)
         
' Poi crea tre sotto-Menu per ciascun precedente sotto-Menu:
         For k = 1 To 3
           submenu2 = New Menu(submenu1)
           b += 1
' Mostra il testo per ciascuno dei tre sotto-Menu:
           submenu2.Text = "submenu2_" & CStr(b)
' Assegna all'azione, quando si cliccherà su uno dei secondi sotto-Menu,
' il testo del secondo sotto-Menu medesimo:
           submenu2.Action = submenu2.Text
         Next
       Next

' Mostra quindi le finestre di ciascun Menu:
       menu1.Popup

   Endif

End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Menù popup
« Risposta #4 il: 19 Settembre 2017, 09:36:40 »
Non vedo come questo possa aiutare Tornu col menu popup.

Cerco di spiegarmi meglio:


Ora ho capito  :ok:
Il punto è che io davo per scontato che Tornu usasse un menu "preconfezionato" e ...
Comunque sia ho scoperto FindAt che non conoscevo... e se l'avevo già incontrato... scordato me lo ero!  ;D

 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:Menù popup
« Risposta #5 il: 19 Settembre 2017, 21:12:34 »
Il punto è che io davo per scontato che Tornu usasse un menu "preconfezionato" e ...
Comunque sia ho scoperto FindAt che non conoscevo... e se l'avevo già incontrato... scordato me lo ero!  ;D

 :ciao: :ciao:
Hai intuito correttamente, io il menù popup l'ho creato con l'Editor Menù e non da codice.
Ora dopo la tua osservazione mi viene un dubbio, prima di provare ad adattare il suggerimento
di vuott al mio progetto le indicazioni sono valide comunque o devo cambiare strada ?
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Menù popup
« Risposta #6 il: 19 Settembre 2017, 21:47:25 »
Il punto è che io davo per scontato che Tornu usasse un menu "preconfezionato" e ...
Comunque sia ho scoperto FindAt che non conoscevo... e se l'avevo già incontrato... scordato me lo ero!  ;D

 :ciao: :ciao:
Hai intuito correttamente, io il menù popup l'ho creato con l'Editor Menù e non da codice.
Ora dopo la tua osservazione mi viene un dubbio, prima di provare ad adattare il suggerimento
di vuott al mio progetto le indicazioni sono valide comunque o devo cambiare strada ?

Questo menu popup lo devi creare da codice e non preconfezionarlo altrimenti credo che non possa funzionare, almeno io non ci sono riuscito  :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:Menù popup
« Risposta #7 il: 23 Settembre 2017, 22:10:20 »
Mi sono arreso, con il menù popup creato con l'Editor Menu non sono riuscito ad avere il controllo che mi serviva.
Con il codice suggeritomi da vuott ho ottenuto ciò che mi serviva, ora il menu popup viene visualizzato solo
se clicco con il tasto destro sui dati visualizzati nella TableView e non in qualsiasi parte della stessa.
Solo alcune indicazioni aggiuntive (vedi commenti sulle righe) se qualcuno dovesse utilizzare questo codice:
Codice: [Seleziona]
Public Sub Form_Open()

  With ListView1
    .Add("chiave0", "aaaaa")
    .Add("chiave1", "bbbbb")
    .Add("chiave2", "ccccc")
  End With

End


Public Sub ListView1_MouseUp()

  Dim menu1, submenu1, submenu2 As Menu
  Dim j, k, b As Byte

   If Mouse.Right Then
     If ListView1.FindAt(Mouse.X, Mouse.Y) Then Return
    ' Crea innanzitutto il Menu principale:
       menu1 = New Menu(Me, False)  'La variabile booleana in questo caso non è indispensabile

' Poi crea quattro sotto-Menu:
       For j = 1 To 4
         submenu1 = New Menu(menu1) As "submenu1"  'Senza non viene sollevato l'evento submenu1_click()
' Mostra il testo per ciascuno dei quattro sotto-Menu:
         submenu1.Text = "submenu1_" & CStr(j)
         
' Poi crea tre sotto-Menu per ciascun precedente sotto-Menu:
         For k = 1 To 3
           submenu2 = New Menu(submenu1)
           b += 1
' Mostra il testo per ciascuno dei tre sotto-Menu:
           submenu2.Text = "submenu2_" & CStr(b)
' Assegna all'azione, quando si cliccherà su uno dei secondi sotto-Menu,
' il testo del secondo sotto-Menu medesimo:
           submenu2.Action = submenu2.Text
         Next
       Next

' Mostra quindi le finestre di ciascun Menu:
       menu1.Popup

   Endif

End
« Ultima modifica: 23 Settembre 2017, 22:14:28 da tornu »
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Menù popup
« Risposta #8 il: 24 Settembre 2017, 01:16:17 »
Mi sono arreso, con il menù popup creato con l'Editor Menu non sono riuscito ad avere il controllo che mi serviva.



Presupponendo che il Menu Popup per l'oggetto ListView sia stato creato con l'Editor-Menu dell'IDE con le modalità descritte in questa pagina:
http://www.gambas-it.org/wiki/index.php?title=Creare_Menu_popup_utilizzando_l%E2%80%99editor_di_menu
suggerirei allora il seguente codice:

Codice: [Seleziona]
Public Sub Form_Open()

  With ListView1
    .Add("chiave0", "aaaaa")
    .Add("chiave1", "bbbbb")
    .Add("chiave2", "ccccc")
  End With
 
End

Public Sub ListView1_MouseDown()

  ListView1.PopupMenu = Null
  If ListView1.FindAt(Mouse.X, Mouse.Y) Then Return
  ListView1.PopupMenu = "mnuPopup"
 
End


Public Sub Action_Activate(sKey As String) As Boolean

 Select Case sKey
   Case "popup-taglia"
     PopupTaglia()
   Case "popup-copia"
     PopupCopia()
   Case "popup-incolla"
     PopupIncolla()
 End Select
 
End

Private Sub PopupTaglia()
 
 Clipboard.Current = 0

   Clipboard.Copy(ListView1.Current.Text)
   ListView1.Current.Text = Null

 
End

Private Sub PopupCopia()

 Clipboard.Current = 0
 If ListView1.Current.Text Then Clipboard.Copy(ListView1.Current.Text)
 
End

Private Sub PopupIncolla()

 Clipboard.Current = 0
 ListView1.Current.Text = Clipboard.Paste()
 
End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Menù popup
« Risposta #9 il: 24 Settembre 2017, 11:59:58 »
Presupponendo che il Menu Popup per l'oggetto ListView sia ...

Quindi si può usare FindAt anche con un menu "preconfezionato", ottimo.  :ok:
Bene a sapersi, però mi chiedo: Una volta che mi hai fatto conoscere FindAt perché non ci ho pensato?
Mi vergogno molto  :-[

 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:Menù popup
« Risposta #10 il: 24 Settembre 2017, 21:05:46 »
Presupponendo che il Menu Popup per l'oggetto ListView sia stato creato con l'Editor-Menu dell'IDE con le modalità descritte in questa pagina:
http://www.gambas-it.org/wiki/index.php?title=Creare_Menu_popup_utilizzando_l%E2%80%99editor_di_menu
suggerirei allora il seguente codice:
...

Che dire vuott.... grazie grazie grazie
« Ultima modifica: 24 Settembre 2017, 21:06:34 da tornu »
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)