19/05/2023: A causa di un errore sono stati cancellati, insieme ad account creati da bot, alcuni account legittimi. Si prega di leggere qui: https://www.gambas-it.org/smf/index.php?topic=9733.0
'---' Load of list of the last projects opened'PUBLIC SUB SetMenuRecent() DIM aRecentList AS String[] = pgApplication.Config.Get("RecentList") 'prelevo l'array della lista delle voci DIM hMenu AS Menu DIM sItem, sName, sFile AS String DIM nId AS Integer DIM oProject AS pgProject DIM bOk AS Boolean WITH pgApplication.MainWindow .mnuOpenRecent.Children.Clear() 'pulisco tutte le voci del menu Recent IF (aRecentList.Count = 0) THEN 'se è vuoto lo nascondo .mnuOpenRecent.Visible = FALSE ELSE IF (IsNull(aRecentList[0])) THEN 'se non ci sono voci nella lista nascondo il menu .mnuOpenRecent.Visible = FALSE ELSE nId = 0 FOR EACH sItem IN aRecentList 'loop tra le voci della lista IF (IsNull(sItem)) THEN CONTINUE 'verifico se la voce non è per caso vuota sFile = Split(sItem, "|")[0] 'ogni elemento di ArecentList contiene: nome del file (path compresa) e nome visualizzato nel menu (nome progetto) sName = Split(sItem, "|")[1] 'le due voci sono nella stessa stringa e separate dal carattere |, per cui tocca separarle bOk = TRUE 'nascondo la voce se il progetto è già stato aperto FOR EACH oProject IN pgApplication.Projects IF (sFile = oProject.Filename) THEN bOk = FALSE BREAK END IF NEXT IF (NOT bOk) THEN CONTINUE 'progetto già aperto, passo alla voce successiva 'create upper menu item for clear list IF (nId = 0) THEN 'se è il primo item che inserisco, creo un paio di menu per cose particolari hMenu = NEW Menu(.mnuOpenRecent) WITH hMenu 'menu per l'azzeramento della lista .Name = "mnuClearRecent" .Picture = pgUtil.LoadIcon("cancel.png") .Caption = ("&Clear History") END WITH Object.Attach(hMenu, pgApplication.EventManager, "Event") 'aggancio gli eventi all'event manager hMenu = NEW Menu(.mnuOpenRecent) 'menu per l'ordinamento delle voci WITH hMenu .Name = "mnuOrderRecent" .Caption = ("&Order by Path") END WITH Object.Attach(hMenu, pgApplication.EventManager, "Event") hMenu = NEW Menu(.mnuOpenRecent) WITH hMenu 'aggiungo un separatore per le vere voci di menu .Name = "mnuSepRecent" END WITH END IF .mnuOpenRecent.Visible = TRUE 'rendo il menu Recent visibile 'create new menu item hMenu = NEW Menu(.mnuOpenRecent) 'creo un nuovo sotto menu di Recent WITH hMenu .Tag = sFile 'in Tag ci salvo il nome e la path del file, così sò dove prenderli per usarli .Name = "mnuRecent" & Str(nId) 'identifico il menu con id che posso capire durante le operazioni 'se la path contiene la directory utente, la sostituisco con una tilde per farlo capire e accorciare la stringa IF (Left(sFile, Len(User.Home)) = User.Home AND Mid(sFile, Len(User.Home) + 1, 1) = "/") THEN .Caption = sName & " (" & Chr(126) & Mid(sFile, Len(User.Home) + 1) & ")" ELSE .Caption = sName & " (" & sFile & ")" END IF END WITH Object.Attach(hMenu, pgApplication.EventManager, "Event") ' aggancio il nuovo menu al gestore eventi centrale INC nId NEXT END IF END WITH CATCH pgApplication.HaltError(pgApplication.GetError(), TRUE) 'in caso di errore graveEND
Forse non ho capito bene io, ma usare l'editor del menu? Si attiva in automatico al click è l'11 icona, quella con la matitina, a destra c'è quella per disattivare la griglia. mi sembra di averne pure parlato in "il resto del pinguino"
PRIVATE mnu AS MenuPUBLIC SUB Form_Open()DIM But AS MenuDIM But1 AS MenuDIM But2 AS MenuDIM But3 AS Menu mnu = NEW Menu(ME, TRUE) But = NEW Menu(mnu) AS "But" But.Caption = "But" But1 = NEW Menu(mnu) AS "But1" But1.Caption = "But1" But2 = NEW Menu(mnu) AS "But2" But2.Caption = "But2" But3 = NEW Menu(mnu) AS "But3" But3.Caption = "But3"ENDPUBLIC SUB Form_MouseDown() IF Mouse.Button = 2 THEN mnu.Popup()ENDPUBLIC SUB But_Click() Message.Info("But") ENDPUBLIC SUB But1_Click() Message.Info("But1") ENDPUBLIC SUB But2_Click() Message.Info("But2") ENDPUBLIC SUB But3_Click() Message.Info("But3") END