Aplica-se a:
Outlook
Excel
Word
PowerPoint
Download Exemplo: Aqui...
Neste artigo vamos abordar como alterar a Ribbon através de um COM Addin। Quando se altera a Ribbon através de um COM Addin é chamada alteração por "Application Level" porque corre ao nível da Aplicação.
Vou utilizar o Visual Studio 2005 e as Visual Studio Tools for Office (Second Edition) e um Shared Addin Outlook para ilustrar este artigo। Os procedimentos seguintes só são delegados quando se cria uma nova mensagem de mail
1 - Criar o nosso projecto de Addin
Vamos fazer o overide do RequestService para podermos utilizar o nosso Ribbon Support. Vamos retirar os comentários seguintes:
Toda a estrutura da Ribbon é baseada em XML. Quando inserimos um Ribbon Control aparece o ficheiro XML, é ai que vamos criar os nossos itens neste exemplo. Podes passar o XML no código para algo simples, mas sugere-se para Ribbons com muitos controlos passa-los no XML File. Podemos também alterar dinamicamente o XML, irei produzir em breve um artigo de como o fazer. Vamos então inserir o nosso controlo, clicando no PROJECTO - ADD NEW ITEM - RIBBON SUPPORT, dar o nome de Ribbon1
O Nome do XML File vai ser igual ao nome do Ribbon Support. Vamos então abordar o XML e alterar o mesmo para que possamos abordar a estrutura do mesmo. Abre o Ribbon1.vb.
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" _
onLoad="OnLoad">
<ribbon>
<tabs>
<tab id="MyTab"
label="My Tab">
<group id="MyGroup"
label="My Group">
<toggleButton id="toggleButton1"
size="large"
label="My Button"
screentip="My Button Screentip"
onAction="OnToggleButton1"
imageMso="HappyFace" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Existem muitas mais opções, mas vamos ficar apenas pela TAB, GROUP E BUTTON. Se quiseres aprofundar melhor os níveis e suas propriedades faz o download dos "List of Controls IDs" aqui... . Por defeito o Button é criado como toggle, podes alterar para button, vamos deixar como toggle. Copia o XML seguinte, vamos criar 2 Toggles.
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" _
onLoad="OnLoad">
<ribbon>
<tabs>
<tab id="InserirAssinaturas"
label="Ferramentas - Joao Livio">
<group id="MyGroupInserirAssinaturas"
label="Assinaturas">
<toggleButton id="toggleButtonGestaoAssinaturas"
size="large"
label="Gestão Assinaturas"
screentip="Gere Assinaturas Personalizadas"
onAction="toggleButtonGestaoAssinaturas"
imageMso="PropertySheet" />
<toggleButton id="toggleButtonInserirAssinaturas"
size="large"
label="Inserir Assinaturas"
screentip="Insere Assinaturas Personalizadas"
onAction="toggleButtonCriarAssinatura"
imageMso="BevelTextGallery" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Por comparação podes verificar o que mudou em cima, apenas mudei os nomes para delegar-mos depois mais facilmente quando se clica NOVA MENSSAGEM, e inseri outro toggle.
Seguidamente vamos criar e inserir uma Função para passar-mos o ID do nosso Ribbon Support, copia para o final da Classe.
Public Function GetCustomUI(ByVal ribbonID As String) As _
String Implements Office.IRibbonExtensibility.GetCustomUI
Return GetResourceText("OutlookAddInJoaoLivioPK.Ribbon1.xml")
End Function
Vamos copiar o seguinte código para Ribbon1.xml
Imports System
Imports System.Collections.Generic
Imports System.Diagnostics
Imports System.IO
Imports System.Text
Imports System.Reflection
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports Office = Microsoft.Office.Core
' TODO:
' This is an override of the RequestService method in the ThisAddIn class.
' To hook up your custom ribbon uncomment this code.
Partial Public Class ThisAddIn
Private ribbon As Ribbon1
Protected Overrides Function RequestService(ByVal serviceGuid As Guid) As Object
If serviceGuid = GetType(Office.IRibbonExtensibility).GUID Then
If ribbon Is Nothing Then
ribbon = New Ribbon1()
End If
Return ribbon
End If
Return MyBase.RequestService(serviceGuid)
End Function
End Class
<ComVisible(True)> _
Public Class Ribbon1
Implements Office.IRibbonExtensibility
Private ribbon As Office.IRibbonUI
Public Sub New()
End Sub
Public Function GetCustomUI(ByVal ribbonID As String) As String _
Implements Office.IRibbonExtensibility.GetCustomUI
Return GetResourceText("OutlookAddInJoaoLivioPK.Ribbon1.xml")
End Function
#Region "Ribbon Callbacks"
Public Sub OnLoad(ByVal ribbonUI As Office.IRibbonUI)
Me.ribbon = ribbonUI
End Sub
Public Sub toggleButton1(ByVal control As Office.IRibbonControl, _
ByVal isPressed As Boolean)
If isPressed Then
MessageBox.Show("Primido")
Else
MessageBox.Show("Levantou")
End If
End Sub
#End Region
#Region "Helpers"
Private Shared Function GetResourceText(ByVal resourceName As String) _
As String
Dim asm As Assembly = Assembly.GetExecutingAssembly()
Dim resourceNames() As String = asm.GetManifestResourceNames()
For i As Integer = 0 To resourceNames.Length - 1
If String.Compare(resourceName, resourceNames(i), _
StringComparison.OrdinalIgnoreCase) = 0 Then
Using resourceReader As StreamReader = _
New StreamReader(asm.GetManifestResourceStream(resourceNames(i)))
If resourceReader IsNot Nothing Then
Return resourceReader.ReadToEnd()
End If
End Using
End If
Next
Return Nothing
End Function
#End Region
End Class
Subscreve o código completo pelo em cima por forma a delegarmos a Ribbon1 através da Public Sub toggleButton1
Vamos correr o projecto e criar uma nova mensagem de Mail e verifica a Tab "Joao Livio - Ferramentas" a amarelo em baixo, clica na mesma.
A nossa Ribbon1 vai aparecer bem como os nossos Toggles Buttons.
Clica em "Inserir Assinaturas"
Conclusão: tens aqui um bom exemplo do porquê passar a utilizar Framework Projects com interacção com o Office 2007, fica mais fácil e rápido de manipular, sugiro vivamente se ainda não começastes comeces a familiariza-te com a linguagem VB.NET e C#, no entanto podes também utilizar VBA, VB com o Visual Studio 2005, é compactível mas vais escrever muito código para realizar operações simples.
(c) Joao Livio, Agosto 2007
Microsoft MVP Office Systems
http://officept.mvps.org
Sem comentários:
Enviar um comentário