Páginas

terça-feira, 8 de maio de 2012


Menus em Userforms sem o uso de API’s
Parte 2

Agora chegou a hora de definirmos os itens de cada Menu, definindo qual a ação de cada um,  se ele terá ou não Sub-Menu, definindo também a região do Sub-Menu, e outras configurações:

Alterne para a Planilha “Plan1”.
Desenvolva a seguinte estrutura. Não é necessário fazer nenhuma formatação.
Na Coluna A, temos os itens dos nossos 2 menus(Arquivo e Diversos), adicionado no UserForm. 
Na Coluna B(Ação), definimos um número exclusivo para cada item de menu, que indicará sua ação. 
Na Coluna C(Seta), Informamos que, apenas para as Ações 6 e 7 acionaremos um sub-menu. Se quiséssemos, todos poderiam ter sub-menus. Este símbolo corresponde à combinação da tecla Alt pressionada + 272. 
Na Coluna D(SubMenu), Informamos em qual região da planilha está os itens do SubMenu(Colocar a seta na coluna C). 
A Coluna E(Height), serve para definir qual será a altura(Height) do controle Listbox(Menu), cujo valor não se consegue definir precisamente através de cálculos.

Agora, sem muitas explicações, vamos definir a região dos 2 sub-menus indicados nas Ações 6 e 7:

A Coluna H(Ação), é formada aqui pelo número da Ação que a chama [6], concatenada com um indicador exclusivo que será a ação à disparar quando acionado.


Salve novamente seu projeto.

Volte para o ambiente de programação do Visual Basic.

Quando passamos o mouse sobre um menu, ele realça. O Subprocedimento abaixo recebe um parâmetro que será a Tag do menu no qual o mouse está atualmente posicionado e empregará o efeito ao mesmo.
 

Este bloco de código será chamado de dentro do procedimento MouseMove dos objetos menuArquivo e menuDiversos:

Se você pressionar F5 neste instante, já poderá ver o efeito ao mover o mouse sobre os menus.

Porém, quando clicamos sobre um menu, é então exibido os itens daquele menu, e se movermos o mouse sobre outro menu, os itens deste deverá também ser exibidos sem necessidade de clicarmos novamente. Certo?
É o que faremos agora. Crie então um Subprocedimento com o nome PosicaoMenu que receberá 2 parâmetros: Posição(integer) e Intervalo(string), com as instruções conforme abaixo:


A rotina acima será chamada de dentro do SubProcedimento moveMouse (2ª linha) dos objetos menuArquivo e menuDiversos. Logo, a Sub ficará desta forma:

Como temos no Menu “Diversos” 2 itens que possuem também sub-menus, vamos então criar outra rotina para controlar este sub-menu. O código desta rotina é quase igual à da rotina “PosicaoMenu”, o que nos faz a chamarmos de “PosicaoSubMenu”:

Salve seu projeto.

Um comentário:

  1. Excelente modelo Marcos. Eu fiz o passo a passo e ainda tenho que verificar alguns detalhezinhos. Mas o modelo cumpre o que promente. Eu gostei muito desta possibilidade porque não sou chegado a API's. Está de parabéns!
    Abraços

    ResponderExcluir