Uma questão que devemos responder é: onde devemos colocar nosso menu? Via de regra, nós criamos menus para facilitar o trabalho e acesso do usuário a certos comandos, automações ou funções que criamos. Portanto, não adianta criar um menu do tipo msoControlPopup nos cantos pois o acesso ao menu ficará “estranho”. Geralmente barras de comando são colocadas no topo utilizando-se o msoBarTop. Um outro método bastante utilizado é criar um menu personalizado na barra de comando contendo os menus do Access.
Nesta parte faremos exatamente isso. Estaremos posicionando o nosso menu em diferentes pontos de nossa área de trabalho.
No primeiro exemplo, repetiremos o código desenvolvido anteriormente para adicionar alguns extras. A primeira coisa que desejamos fazer é posicionar a nossa barra de comando. No momento, a barra está para flutuante e iremos colocá-la no lado esquerdo:
Sub criandoMenus()
'Somente as partes novas serão repetidas. O resto será suprimido
Set cmdBar = CommandBars.Add(Name:="Criando Menus", _
Position:=msoBarLeft) 'Fixa a barra do lado esquerdo
'Protege a barra contra movimentos e redimensionamento
cmdBar.Protection = msoBarNoMove + msoBarNoResize
cmdBar.Visible = True 'Exibi a barra de comando cmdBar
End Sub |
O código acima introduz mais uma versatilidade das barras de comando. Muitas vezes não queremos que o usuário fique movimentando as barras de comando, pois isso pode prejudicar o layout geral do aplicativo que desenvolvemos. A maneira como isso é feita é demonstrada acima.
O posicionamento é na lateral esquerda e é fixo. O usuário não pode movimentar ou modificar o tamanho da barra de comando. Outras formas de proteção incluem:
- msoBarNoChangeDock (não permite acoplar a barra de comando aos cantos do aplicativo)
- msoBarNoChangeVisible (não permite esconder a barra de comando)
- msoBarNoCustomize (não permite que o usuário personalize a barra)
- msoBarNoHorizontalDock (permite acoplar somente na vertical, isto é, nas laterais esquerda e direita do aplicativo)
- msoBarNoMove (não permite a movimentação da barra)
- msoBarNoProtection (a barra não possui proteção alguma)
- msoBarNoResize (não permite o redimensionamento da barra)
- msoBarNoVerticalDock permite acoplar somente na horizontal, isto é, na parte superior ou inferior do aplicativo. Veja msoBarNoHorizontalDock)
Neste caso específico, estamos lidando com o posicionamento de nossa barra de comando. E o posicionamento de nosso menu? Como podemos posicionar o nosso menu no Access?
Geralmente, quando criamos menus queremos adicioná-los ao menu principal do Access. Porém, é importante saber onde ele será posicionado. Por exemplo, se desejamos posicionar nosso menu antes do menu “Arquivo”, como procedemos? Os menus são indexados o que facilita o nosso trabalho. Como o menu Arquivo é o primeiro, a sua posição é 1. A numeração continua assim até o último menu da barra de comando padrão.
ara posicionar nosso menu no topo, modificaremos o nosso código e dimensão dos objetos ligeiramente:
Sub criandoMenus()
Dim cmdBar As CommandBarPopup
Dim mnu As CommandBarPopup
Dim btn As CommandBarButton
End Sub
|
Como estamos interessados em adicionar um controle tipo menu ao menu principal do Access, precisamos redimensioná-lo para CommandBarPopup. Novamente, precisamos instruir o Access de forma que ele saiba o que fazer com os objetos:
Sub criandoMenus()
On Error Resume Next 'Continua a execução mesmo que haja um erro
'Deleta o menu anterior se ele existir
CommandBars(4).Controls("Criando Menus").Delete
'Position defini a posição onde o menu será inserido
'Neste caso ele é inserido antes do menu "Arquivo"
Set cmdBar = CommandBars(4).Controls.Add(Type:=msoControlPopup, _
before:=1)
cmdBar.Caption = "Criando Menus"
Set btn = cmdBar.Controls.Add(Type:=msoControlButton)
With btn
.Caption = "Botão 1"
.FaceId = 326
End With
Set mnu = cmdBar.Controls.Add(Type:=msoControlPopup)
mnu.Caption = "menu 1" 'Define o nome a ser exibido no menu
Set btn = mnu.Controls.Add(Type:=msoControlButton)
With btn
.Caption = "Botão 2"
.FaceId = 926
End With
End Sub |
O resultado:

Figura 5-1
Além de podemos adicionar os menus em qualquer posição do menu padrão do Access, podemos também inserir botões nos próprios menus do Access.
or exemplo, vamos supor que desejamos acrescentar um botão no menu Arquivo antes do botão Novo (o primeiro botão no menu Arquivo). Neste caso, precisamos saber qual o ID do menu em questão. No caso do menu Arquivo o ID é 30002.
Sub criandoMenus()
Dim mnu As CommandBarPopup
On Error Resume Next
Set mnu = CommandBars(4).FindControl(ID:=30002)
Set btn = mnu.Controls.Add(Type:=msoControlButton, Before:=1)
With btn
.Caption = "MEU BOTAO"
.FaceId = 984
End With
End Sub |

Figura 5-2
Um botão é inserido no menu Arquivo antes do botão Novo. A instrução Before (Antes de) indica onde o botão será inserido. Não existe a opção After (Depois de), pois por analogia tudo que for antes não pode ser depois. Em outras palavras, se nosso botão está antes de algum botão ou ele é o primeiro de tudo ou ele está posicionado depois de algum outro botão e, portanto, antes de algum outro. Quando não definimos, o Access sempre joga o botão no final da lista.
Com o menu criado, precisamos adicionar eventos aos botões. Observe que somente os botões recebem eventos. Barras de comando e menus do tipo popup não executam comandos.
Mais adiante mostrarei como listar tais IDs.
|