Utilizando o evento WindowSelectionChange para mostrar um popup de opções
- Última atualização em 17 Fevereiro 2012
- Acessos: 13249
O exemplo anterior é bastante simples e não há segredo algum. Vejamos agora como elevar o exemplo ao próximo nível. Suponha que ao invés de simplesmente selecionar e modificar diretamente, nós desejamos mostrar um menu popup, como proceder?
Assim como no exemplo anterior, precisaremos de uma classe. Porém, precisaremos também de um módulo comum no projeto.
Vamos iniciar pelo ThisDocument onde inseriremos o código de praxe mais um código para remoção do menu:
Option Explicit
' Dimensiona o objeto
Dim appWrd As New clsEventos
Private Sub Document_Close()
On Error Resume Next
' Remove o menu popup quando o documento é fechado
' O nome "POPUPNOME" é uma variável global declarada no módulo
Application.CommandBars(POPUPNOME).Delete
End Sub
Private Sub Document_Open()
' Inicializa a classe
Set appWrd.appWord = Application
' Chama a rotina de criação do menu
Call Menus
End Sub
Nosso próximo passo requer a criação da rotina que montará o menu e efetuará as mudanças no texto (neste caso alternar entre negrito e itálico). Adicione o seu módulo onde as seguintes rotinas devem ser entradas:
Option Explicit
' Nome do menu. O nome é uma string constante (Const)
' pública a qual pode ser utilizada em qualquer parte
' do projeto
Public Const POPUPNOME As String = "MEU POPUP"
Sub menus()
' Declaração da barra de comando a ser utilizada como
' o menu popup
Dim cmdbar As CommandBar
' Declaração do botão que será utilizado no popup
Dim btn As CommandBarButton
' Remove o menu popup caso ele existe. Se não existir
' então haverá um erro, por isso é utilizado "On Error Resume Next"
On Error Resume Next
Application.CommandBars(POPUPNOME).Delete
' Cria o popup
Set cmdbar = Application.CommandBars.Add(Name:= _
POPUPNOME, Position:=msoBarPopup)
' Cria os botões que aparecerão após a seleção
' do texto na janela ativa
Set btn = cmdbar.Controls.Add(Type:=msoControlButton)
With btn
' Rótulo do botao
.Caption = "Negrito"
' ID do ícone do botao (113 refere-se ao "N" de negrito
.FaceId = 113
' Estilo do botao
.Style = msoButtonIconAndCaption
' Quando clicado, o botao deve acionar a rotina "Negrito"
.OnAction = "Negrito"
End With
' Veja explicacoes acima
Set btn = cmdbar.Controls.Add(Type:=msoControlButton)
With btn
.Caption = "Itálico"
.FaceId = 114
.Style = msoButtonIconAndCaption
.OnAction = "Itálico"
End With
End Sub
Sub Negrito()
' Alterna entre negrito e normal
ActiveWindow.Selection.Font.Bold = Not ActiveWindow.Selection.Font.Bold
End Sub
Sub Itálico()
' Alterna entre itálico e normal
ActiveWindow.Selection.Font.Italic = Not ActiveWindow.Selection.Font.Italic
End Sub
Finalmente, precisamos adicionar a classe a qual utilizaremos para controlar o evento de seleção. Esta é, na verdade, a parte mais simples do código, pois tudo que desejamos é saber quando algo foi selecionado.
Aqui, iremos ativar o menu popup quando a seleção for maior do que 1:
Option Explicit
Public WithEvents appWord As Word.Application
Private Sub appWord_WindowSelectionChange(ByVal Sel As Selection) ' Se a seleção for maior do que 1, então If Len(Sel) > 1 Then ' Mostrar o popup Application.CommandBars(POPUPNOME).ShowPopup End If End Sub
Como este evento é válido para todos os documentos abertos, o menu popup será acionado sempre que o número de caracteres da seleção for maior do que 1. Clique aqui para ler as partes anteriores deste curso!