Categoria:
(Texto de acordo com a documentação original do Clipper.)
A função MENUMODAL() ativa a barra superior de um menu (top bar).
Descrição:
MENUMODAL() é uma função de interface de usuário que implementa o sistema de menu suspenso em CA-Clipper.
Faz parte da arquitectura aberta do sistema GET do CA-Clipper. MENUMODAL() é similar ao comando READ na medida em que espera que o usuário execute uma ação. No entanto, a função MENUMODAL() só responderá a ações do menu.
Para implementar um objeto de menu ao mesmo tempo que outros objetos, utilize a função READMODAL() que tem um dos seus argumentos como objeto TopBarMenu.
Quando o utilizador escolhe um item do menu, o controle é passado para o bloco de códigos associado a esse item específico do menu. Os blocos de códigos são definidos utilizando a classe MenuItem.
Os itens do menu podem ser selecionados usando o teclado ou o mouse.
Para selecionar um item de menu com o mouse, basta selecionar o item TopBarMenu com o mouse e então escolher o item de menu PopUp apropriado.
Nota: A função MENUMODAL() irá pegar um evento do menu do usuário e então terminará. Para evitar isto, o seguinte pode ser usado, e o mesmo permitirá que o programa aceite continuamente os eventos do menu:
DO WHILE (MENUMODAL(o_menu,...) <> ExitMenu) ENDDO
Sintaxe:
MENUMODAL( oTopBar, nSelection , nMsgRow, nMsgLeft, nMsgRight, cMsgColor ) --> MenuID
Argumentos:
oTopBar é um objeto TopBarMenu criado a partir da classe TopBarMenu.
nSelection é o item TopBarMenu selecionado por default.
nMsgRow o número da linha onde aparecerão as mensagens de item de menu.
nMsgLeft especifica a margem esquerda para as mensagens dos itens do menu.
nMsgRight especifica a margem direita para as mensagens dos itens do menu.
cMsgColor define a cadeia de cores para as mensagens do item de menu.É composto por um único par de primeiro plano/fundo.
Retorno:
MENUMODAL() devolve a ID do menu do item de menu escolhido. As IDs dos menus são atribuídas utilizando a classe MenuItem.
A tabela a seguir lista as teclas ativas que podem ser usadas durante o MENUMODAL():
Tecla ---- Ação
Seta esquerda, Ctrl+S: Move para o próximo item TopBarMenu à esquerda. Se não houver mais itens à esquerda, o item mais à direita do TopBarMenu será selecionado.
Seta direita, Ctrl+D: Move para o próximo item TopBarMenu à direita. Se não houver mais itens à direita, o item mais à esquerda do TopBarMenu será selecionado.
Seta para cima, Ctrl+E: Ir para o item anterior do menu PopUp. Se não houver mais itens acima do item atual, o item do menu na parte inferior será selecionado.
Seta para baixo, Ctrl+X: Move para o próximo item do menu PopUp. Se não houver mais itens abaixo do item atual, o item do menu no topo será selecionado.
Exemplos:
Veja o arquivo de exemplo Menu.prg no diretório \CLIP53\SOURCE\SAMPLE. O exemplo demonstra a combinação dos objetos TopBarMenu, PopUpMenu e MenuItem para criar um menu com uma série de opções disponíveis. Veja "Introdução ao Sistema de Menus" no Guia de Programação e Utilitários para mais informações sobre o uso desta função.
Arquivos:
Biblioteca: CLIPPER.LIB, arquivo fonte: SOURCE\SYS\MENUSYS.PRG
Um exemplo básico (com algumas melhorias Harbour):
/* Exemplo de menu usando menumodal e menusys1 (menusys original modificado para eventos do mouse Major Anilto - 17Abr2020 */ #include "button.ch" #include "inkey.ch" #include "box.ch" /* Para usar acentuações, mouse, etc */ #include "hbgtinfo.ch" //acrescentado no harbour REQUEST HB_LANG_PT //acrescentado no harbour - português REQUEST HB_CODEPAGE_PTISO //acrescentado no harbour - codepage REQUEST HB_GT_WVT_DEFAULT Function Main() LOCAL oInfo LOCAL Retorno := 0 LOCAL sai := "N" PUBLIC Coluna := 80 PUBLIC Linha := 40 /* Para usar acentuações, etc.) */ HB_LANGSELECT('PT') HB_CDPSELECT('PTISO') HB_GtInfo( HB_GTI_MAXIMIZED, .F. ) HB_GtInfo( HB_GTI_FONTNAME, "Courier Prime" ) HB_GtInfo( HB_GTI_WINTITLE, "Teste de menu" ) /* Configurações do ambiente */ SET( _SET_EVENTMASK, INKEY_ALL ) MSETCURSOR(.T.) set cursor off set score off setmode(Linha,Coluna) Cls /* Isto permite mudar toda a paleta de cores */ PALETA() /* Chamada para criar um objeto de menu */ oInfo:=CriaMenu() /* Loop para execução do menu */ WHILE Retorno == 0 Retorno := MENUMODAL(oInfo,1,Linha-1,0,Coluna-1,"W+/b") /* Aqui chama alguma função para tratar a saída do sistema */ ENDDO Return ( NIL ) /* Criação da estrutura do menu */ Function CriaMenu() // Usando a função MenuModal() LOCAL oTopBar, oPopUp, oPopUp1, oPopUp2 LOCAL COR := "w/bg,W+/rb,gr+/bg,gr+/rb,w/N,w/B" LOCAL COR1 := "w+/b,W+/rb,gr+/g,gr+/rb,w/N,w/B" /* Cria a barra de menus na linha 1, a partir da coluna 1 até a coluna Coluna-2) */ oTopBar := TopBar( 1,0, Coluna - 1) /* linha, coluna tamanho */ oTopBar:ColorSpec :=cor1 /* especifica as cores */ /* Coloca os elementos do menu */ oTopBar:AddItem( MenuItem ( "Pedido",{ || Pedido()},,"Novo pedido") ) oTopBar:AddItem( MenuItem ( "Cadastro",{ || Cadastro()},, "Cadastro de clientes") ) oTopBar:AddItem( MenuItem ( "Fornecedores",{ || Forn()},,"Cadastro de fornecedores") ) oTopBar:AddItem( MenuItem ( "Estoque",{ || Estoque()},, "Controle de estoque") ) oTopBar:AddItem( MenuItem ( "Utilitários",{ || Util()},,"POPUP") ) Return ( oTopBar) /* Funções chamadas pelos itens do menu */ Function Pedido() Alert("Novos pedidos") Return Function Cadastro() Alert("Cadastramento de clientes") Return Function Forn() Alert("Cadastramento de fornecedores") Return Function Estoque() Alert("Controle de estoque") Return Function Util() Alert("Utilitários do sistema") Return /* Função que muda a paleta de cores */ Function paleta() local aPal := { 0x000000, ; //0 N 0xd27619, ; //1 B 0x004d00, ; //2 G 0xc1ac00, ; //3 BG 0x1c1cb7, ; //4 R 0xdaa89f, ; //5 RB 0xc8ccd7, ; //6 GR 0x222222, ; //7 N+ 0x888888, ; //8 W 0xfab481, ; //9 B+ 0x84c781, ; //10 G+ 0xf2ebb2, ; //11 BG+ 0x7373e5, ; //12 R+ 0xdb9db3, ; //13 RB+ 0x58eeff, ; //14 GR+ 0xffffff } //15 W+ aPal1 := HB_GtInfo( HB_GTI_PALETTE, aPal) Return NIL
Comentários
Sobre as variáveis oPopUp, oPopUp1, oPopUp2
Comentário:
As variáveis oPopUp, oPopUp1, oPopUp2 presentes no código menu3.prg não estão sendo utilizadas. Serão usadas quando forem definidos menus PopUp. Eu havia testado previamente este programa com popups, mas achei melhor apresentar inicialmente somente a barra de topo.
Sub-menu
Comentário:
Poderia me dar pelo menos uma linha em código que cria um sub-menu para uma das opções do oTopBar?
Páginas