Menu bar dinamico RESOLVIDO

Discussão em 'Progress 4GL' iniciado por rafaelM, Junho 12, 2013.

  1. rafaelM

    rafaelM Sem Pontuação

    Estou necessitando fazer um menu dinâmico, para uma tela de login, que gere os menus de acordo com as permissões do usuário (quais programas ele pode acessar etc).
    Se alguém tiver um exemplo...
    Desde já agradeço.
  2. rafaelM

    rafaelM Sem Pontuação

    Para quem estiver necessitando do mesmo, encontrei o seguinte material no kb da progress:
    http://knowledgebase.progress.com/artic ... cle/P11541
    Achei prático e claro o exemplo.
    o fonte mais legível:
    Código:
    CURRENT-WINDOW:WIDTH-PIXELS = 800 .
    DEFINE VARIABLE hMenu AS WIDGET-HANDLE NO-UNDO.
    DEFINE VARIABLE hSubMenu AS WIDGET-HANDLE NO-UNDO.
    DEFINE VARIABLE hMenuItem AS WIDGET-HANDLE NO-UNDO.
    DEFINE VARIABLE cSubMenues AS CHARACTER INITIAL "File,Edit" NO-UNDO.
    DEFINE VARIABLE cMenuItem1 AS CHARACTER INITIAL "New,Open,Close,Save,Exit" NO-UNDO.
    DEFINE VARIABLE cMenuItem2 AS CHARACTER INITIAL "Undo,Copy,Cut,Paste" NO-UNDO.
    DEFINE VARIABLE iAuxlr1 AS INTEGER NO-UNDO.
    DEFINE VARIABLE iAuxlr2 AS INTEGER NO-UNDO.
    DEFINE VARIABLE iItems AS INTEGER NO-UNDO.
    DEFINE VARIABLE cItems AS CHARACTER NO-UNDO.
    
    
    CREATE MENU hMenu.
    DO iAuxlr1 = 1 TO NUM-ENTRIES(cSubMenues): 
        CREATE SUB-MENU hSubMenu 
            ASSIGN PARENT = hMenu 
                   NAME = ENTRY(iAuxlr1, cSubMenues) 
                   LABEL = ENTRY(iAuxlr1, cSubMenues). 
        
        CASE hSubMenu:NAME: 
            WHEN "File" THEN ASSIGN iItems = NUM-ENTRIES(cMenuItem1) cItems = cMenuItem1. 
            WHEN "Edit" THEN ASSIGN iItems = NUM-ENTRIES(cMenuItem2) cItems = cMenuItem2. 
         END. /*CASE hSubMenu:NAME:*/ 
         
         DO iAuxlr2 = 1 TO iItems: 
             CREATE MENU-ITEM hMenuItem 
                 ASSIGN PARENT = hSubMenu NAME = hSubMenu:NAME + ENTRY(iAuxlr2, cItems) 
                 LABEL = ENTRY(iAuxlr2, cItems)/* This IS WHERE the ACCELERATOR KEYS are DEFINED */ 
                 ACCELERATOR = SUBSTRING(ENTRY(iAuxlr2, cItems),2,1)/*This version just declares the 2nd letter AS the ACCELERATOR. You may remove the above LINE IF you DO NOT want TO USE ACCELERATORS. */ 
                 TRIGGERS: 
                    ON CHOOSE PERSISTENT RUN MenuItemChoose IN THIS-PROCEDURE (INPUT hMenuItem:NAME). 
                 END TRIGGERS. /*Example of how to disable a Menu-Item*/ 
                 
                 IF hMenuItem:NAME = "EditUndo" THEN 
                     ASSIGN hMenuItem:SENSITIVE = FALSE. 
         END. /*DO iAuxlr2 = 1 TO iItems:*/
    END. /*DO iAuxlr1 = 1 TO NUM-ENTRIES(cSubMenues):*/
    
    ASSIGN CURRENT-WINDOW:MENUBAR = hMenu:HANDLE.
    DEFINE FRAME F1 WITH SIZE 132 BY 18 THREE-D NO-LABELS.
    ENABLE ALL WITH FRAME F1.
        WAIT-FOR CLOSE OF CURRENT-WINDOW.
    PROCEDURE MenuItemChoose.
        DEFINE INPUT PARAMETER cMenuItemName AS CHARACTER NO-UNDO. 
        MESSAGE "Item Selected:" SKIP(1) "'" + cMenuItemName + "'" VIEW-AS ALERT-BOX INFORMATION. 
    
        IF cMenuItemName = 'FileExit' THEN QUIT.
    
    END PROCEDURE.
    
    
    
    

Compartilhe esta Página