
A maioria dos programadores j tem seu sistema de menus, mas pra quem 
no tem ou est querendo alguma alternativa, vou compartilhar o meu, 
que acho interessante pela facilidade na hora de organizar e montar um
grande sistema, e tambm quando  preciso reorganizar o menu, tirar 
opcao de um lado e passar pra outro, e tal,  muito fcil e prtico para 
o programador.

Instrues do sistema de menus em arquivo texto .MNU
Funo XMENU
----------------------------------------------------

Cada menu  um menu individual montado em um arquivo texto .MNU
com a seguinte sintaxe:

[opcoes]
Inclui
Altera
Exclui
Outras Operacoes

[opcoes on/off]
.t.
.t.
usuario=[JOSE]
.t.

[funcoes]
incluicli()
alteracli()
excluicliente()
outrasop.mnu

[instrucoes]
Inclui um Cliente Novo no Cadastro
Altera os Dados de um Cliente no Cadastro
Exclui um Cliente do Cadastro
Outras Operacoes diversas relativas ao Cadastro de Clientes


Ou seja, o arquivo MNU deve conter 4 secoes entre colchetes: (sem acentuacao na
identificacao das secoes):

[opcoes]        : Opcoes do menu

[opcoes on/off] : Expressoes logicas, que tornarao as opcoes ON ou OFF

[funcoes]       : Strings de retorno, ou se a opcao tiver um
                : sub-menu, o nome completo do arquivo MNU correspondente.

[instrucoes]    : Instrucoes da opcao

Os dados das secoes devem ser escritos 1 por linha, sem aspas, logo apos
a identificacao da secao. Ao terminar uma secao deixe uma linha em branco
antes de iniciar a proxima.

O numero de linhas de cada seo deve ser o mesmo, ou ocorrer erro.

Note que a opo "Exclui" s estar habilitada se o usuario for JOSE.
Se a variavel usuario nao existir, ocorrer erro.

Na seo FUNCOES coloque a string para retorno quando a opcao for selecionada.
Em tese, voce pode colocar qualquer valor, como por exemplo, 1, 2, 3, 4, etc,
e tratar o retorno no seu prg da maneira que quiser, porem, o mais prtico
 sempre usar o nome de uma funo como valor de retorno e executar o retorno
com macro substituio, como no prg de exemplo, assim dispensa tratamentos
geralmente trabalhosos, com IF/ELSEIF ou DO CASE.

Se um outro arquivo .MNU for o valor de retorno, ao invs de retornar,
XMENU executa o novo menu como um sub-menu, e assim por diante, como na opo 4
desta instruo (veja acima).

O meu padro de todos os meus sistemas,  uma linha de Status no alto da tela,
e 2 linhas de instrues no fundo da tela. E esse sistema de menus usa o espao 
padrao de instrucoes para exibir a instrucao de cada opo. Modifiquem  vontade.

A minha funo BOX para desenhar quadros na tela, e o esquema de cores, tambm 
so bem particulares, e podem ser substitudos. O esquema de cores est definido
na funo AMBIENTE().

Como nunca gostei muito de HotKeys, no me dei ao trablaho de pr letras automaticas 
para selecionar opes do menu. Quem gostar pode tentar fazer a modificao.

A sintaxe da funo XMENU:

Parametro 1 : Nome completo de um arquivo de menu (com extensao .MNU)

Parametro 2 : String contendo um caminho a ser percorrido automaticamente
              de menu em menu, antes que o usuario possa definir sua opcao.
              Informe aqui o caminho percorrido na ultima execuo, e 
              XMENU iniciar no mesmo ponto onde o usurio fez sua ultima
              escolha. A vriavel XM_CAMINHO contm essa string.
              Um caminho  formado por uma variavel caractere contendo 2 bytes 
              referentes a opcao do menu + seta a direita (chr(4)) + 2 bytes + seta,
              e assim por diante...
              Se ao percorrer o caminho for encontrada opcao desligada ou nao
              correspondente a submneu, o caminho ser encerrado, e o controle
              passa para a escolha do usuario.
              Se nao quiser informar um caminho, um valor vazio [] deve ser informado.

Param 3 e 4 : Linha e coluna do canto sup esq do quadro (opcional).
              Se L e C nao forem informados posiciona o menu no canto
              inferior esquerdo da tela, tipo menu Iniciar do Windows.

              O primeiro menu pode ser movido e posicionado onde quiser,
              com CTRL SETAS.

              Opcionalmente, ao inves de L e C, pode-se informar um
              parametro caractere contendo o nome de um arquivo PMN
              (posicao do menu) onde XMENU buscara' a posicao do menu.
              (informar nome completo, com a extensao).
              Sintaxe do arquivo: 2 linhas de texto:
              LIN=nrdalinha
              COL=nrdacoluna
              Nesse caso, se a posicao do menu inicial for mudada com
              Ctrl Setas, XMENU atualizara' o arquivo.

Clique em MENUTEST.EXE e veja o exemplo compilado em Harbour 3.0

Apenas para efeito de teste a opo OUTROS do menu principal chama novamente o 
prprio menu principal, apenas para visualizao do efeito cascata do sistema.

Ocorre erro aps o dcimo sub-menu, se no me engano, pois  o limite.

Se quiser, o usurio pode posicionar o primeiro menu com CTRL SETAS, e informando
o arquivo .PMN (posio do menu) na chamada da funo, a nova posio fica definitiva.

Qualquer dvida, estou a disposio.

Eduardo Pinho
xcaed@yahoo.com.br



