Visual Basic 6 - Criando Menus com o Visual Basic


O Visual Basic disponibiliza uma excelente ferramenta para projeto de menus: o "Menu Design Window", ou Janela de Projeto de Menus ( Menu Editor) , que pode ser acessada com Ctrl-E ou por meio do botão direito do mouse. 

Projetar um menu em VB não é mais difícil do que trabalhar com outros controles.

Entretanto, alguns cuidados são necessários para evitar conflitos entre itens de menu.

A Janela de Projeto de Menus é mostrada na Figura 10 a seguir.

 

Figura 10 - A Janela de Projeto de Menus  

As propriedades de itens de menus são as seguintes:

Estas propriedades podem ser alteradas em tempo de execução ou de projeto. É, ainda, possível anexar teclas de atalho a cada item de menu.

A maneira mais fácil de trabalhar com menus é construir "Arrays de Menus", ou seja, os diferentes sub-itens de um mesmo menu serão diferenciados apenas por um índice, tendo o mesmo nome.

 A tabela 7 abaixo exemplifica esta construção para o caso de um menu chamado "Arquivo".

  Tabela 7  

Legenda

Nome

Índice

Arquivo

mnuArquivo

-

--- Abrir

mnuArquivoItem

0

--- Salvar

mnuArquivoItem

1

--- -

mnuArquivoItem

2

--- Sair

mnuArquivoItem

3

 

O item principal do menu não tem índice. Os sub-itens são diferenciados por índices, tendo o mesmo nome e sendo "indentados" em relação ao item principal.

O Visual Basic admite até cinco sub-itens, mas este limite raramente é usado.

 A indentação dois itens é feita por meio das setas da Janela de Projeto de Menus. A barra de separação é criada com um hífen ( - ) e não admite código associado. O índice, entretanto, é obrigatório.

Podemos usar menus para implementar uma versão aperfeiçoada do nosso bloco de notas.

Em vez de usarmos botões de comando, usaremos itens de menus para realizar as operações.

Inicie um novo projeto, pressione Ctrl-E para entrar na Janela de Projeto de Menus e adicione os itens de menu conforme a tabela abaixo.  

Tabela 8  

Legenda Nome Índice Tecla de Atalho
Arquivo mnuArquivo - -
--- Abrir mnuArquivoItem 0 Ctrl + F12
--- Salvar mnuArquivoItem 1 Shitf + F12
--- - mnuArquivoItem 2 -
--- Sair mnuArquivoItem 3 Ctrl + Z
Editar mnuEditar - -
--- Cortar mnuEditarItem 0 Ctrl + X
--- Colar mnuEditarItem 1 Ctrl + V
--- Apagar mnuEditarItem 2 Ctrl + P
Fontes mnuFontes - -
--- Courier mnuFontesItem 0 -
--- Helvética mnuFontesItem 1 -
--- Roman mnuFontesItem 2 -
--- Modern mnuFontesItem 3 -
--- Script mnuFontesItem 4 -
--- Symbol mnuFontesItem 5 -
--- System mnuFontesItem 6 -
--- Terminal mnuFontesItem 7 -

  Após terminar o menu, mude a legenda do formulário para "Editor". O resultado final deve ser semelhante ao da Figura 11.  

Figura 11 - Um Editor de Textos

Figura 11 - Um editor de textos baseado em menus  

O menu Editar contém basicamente o mesmo código que, antes, estava nos botões do bloco de notas.

Quando um menu é construído a partir de arrays, a maneira mais fácil de escrever o código é usando o comando "Select ...Case".

Para iniciar a programação, insira uma caixa de texto do formulário, renomeando-a para txtEditor e abra a janela de código do menu mnuEditarItem, escrevendo as seguintes linhas: 

Private Sub mnuEditarItem_Click(index As Integer)
    Select Case index
        Case 0 'Cortar
            CortaTexto = txtEditor.SelText
            txtEditor.SelText = ""
            txtEditor.SetFocus
        Case 1 'Colar
            txtEditor.SelText = CortaTexto
        Case 2 'Apagar
            txtEditor.Text = ""
            txtEditor.SetFocus
    End Select
End Sub

Note que o núcleo do código é idêntico ao utilizado no Bloco de Notas.

A utilização do comando Select ... Case certamente facilita as coisas e funciona da seguinte maneira: quando um item do menu mnuEditar é selecionado, o evento clique passa o parâmetro Index, que corresponde ao item selecionado. 

A estrutura de decisão Select ... Case verifica o valor de Index e executa imediatamente o bloco de comandos associado, pulando a seguir para a linha End Select.

O comando Select ... Case não verifica todos os possíveis valores de Index, sendo muito mais rápido do que uma estrutura correspondente construída com comandos If ... Then ... Else.

O código do menu Fontes pode ser implementado rapidamente. A diferença é que estaremos usando a propriedade Checked dos menus, para identificar qual a fonte atualmente selecionada.

Private Sub mnuFontesItem_Click(index As Integer)
    Select Case index
        Case 0
            txtEditor.FontName = "Courier"
        Case 1
            txtEditor.FontName = "Helv"
        Case 2
            txtEditor.FontName = "Roman"
        Case 3
            txtEditor.FontName = "Modern"
        Case 4
            txtEditor.FontName = "Script"
        Case 5
            txtEditor.FontName = "Symbol"
        Case 6
            txtEditor.FontName = "System"
        Case 7
            txtEditor.FontName = "Terminal"
    End Select
    For Contador = 0 To 7
        mnuFontesItem(Contador).Checked = False
    Next loop_index
    mnuFontesItem(Contador).Checked = True
End Sub

Inicialmente, o comando Select ... Case é usado para atribuir à propriedade "FontName" da caixa de textos a fonte escolhida pelo usuário.

Depois, um pequeno laço For ... Next remove as marcas de verificação de todos os sete itens de menu (porque não sabemos qual delas está ativa).

Finalmente, colocamos uma marca de verificação no item de menu escolhido atualmente. 

Está não é a única maneira de trabalhar com marcas de verificação e alguém poderia argumentar que não é a mais rápida (por causa do laço For .. Next).

Na verdade poderíamos memorizar o item escolhido anteriormente, fazendo uso de uma variável do tipo Integer, e então remover a barra de verificação somente deste item. Esta pequena modificação fica como lição de casa.

Os comandos para o menu mnuArquivoItem são mais complicados e exigem que trabalhemos com arquivos e janelas de diálogo.

Vamos ficando por aqui...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti