Adding a button to existing ribbon

T

Tom

Hi all,

I would like to add a button to a ribbon on the new message window. I would
like to add this button as the first button on the message ribbon.
Everything I have read says you can only add a button group to the ribbon.

Furthermore is there an example of adding a new group to a new message
window?

Any suggestions would be greatly appreciated.

Thanks,
Tom-
 
K

Ken Slovak - [MVP - Outlook]

Other than using <startFromScratch> and designing a complete ribbon
replacement, the best you can do is to add a new group to an existing ribbon
tab. You can't just insert a button within an MS defined group.

Lots of ribbon samples at the Office Development center at MSDN, have you
checked out any of those addin samples?
 
T

Tom

Thanks Ken,

The only examples I have seen do not do anything with the new message
window. I am kind of confused on how to implement ribbon group just for
those windows.

Thanks,
Tom -
 
K

Ken Slovak - [MVP - Outlook]

The idea is to handle the GetCustomUI callback. It fires only the first time
an item type is opened in that Outlook session and passes you a string
ribbonID argument, which is the type of item being opened.

This is a C# example of handling that callback for new mail items:

public string GetCustomUI(string ribbonID)
{
//RibbonID indicates type of Inspector that is about to be
displayed,
// valid RibbonID values are as follows:
//Microsoft.Outlook.Mail.Read
//Microsoft.Outlook.Mail.Compose
//Microsoft.Outlook.MeetingRequest.Read
//Microsoft.Outlook.MeetingRequest.Send
//Microsoft.Outlook.Appointment
//Microsoft.Outlook.Contact
//Microsoft.Outlook.Journal
//Microsoft.Outlook.Task
//Microsoft.Outlook.DistributionList
//Microsoft.Outlook.Report
//Microsoft.Outlook.Resend
//Microsoft.Outlook.Response.Read
//Microsoft.Outlook.Response.Compose
//Microsoft.Outlook.Response.CounterPropose
//Microsoft.Outlook.RSS
//Microsoft.Outlook.Post.Read
//Microsoft.Outlook.Post.Compose
//Microsoft.Outlook.Sharing.Read
//Microsoft.Outlook.Sharing.Compose

//In this sample only new mail Inspector is handled for a
button.

switch (ribbonID)
{
case "Microsoft.Outlook.Mail.Compose":
// Return the RibbonX markup stored as a resource in the
project
return Resources.CustomRibbon;
default:
{
return String.Empty;
}
}
}


I'm not sure what version of VS you're using or if you're using a shared
addin or a VSTO addin, but you can download the Outlook 2007 templates I
have on my Web site (for VS 2005 for both shared and VSTO addins).

Those have simple XML for adding 2 groups to a custom tab in a new email
message. Each group gets 3 buttons. The templates are in C# and VB.NET (and
VB6). They're at http://www.slovaktech.com/outlook_2007_templates.htm.

For reference you should also download the schemas for Office 2007, you need
those for the correct names for the ribbon UI and to locate a group within
an existing tab or in the Office button groups.

As I mentioned, they're pretty basic (from my book). The XML itself looks
like this (from the VSTO C# sample):

<?xml version="1.0" encoding="utf-8" ?>
<customUI xmlns = "http://schemas.microsoft.com/office/2006/01/customui"
onLoad = "Ribbon_OnLoad" >
<ribbon>
<tabs>
<tab id="VSTO_CSAddinTab" label="VSTO_CS Addin" visible="true"
insertAfterMso="TabNewMailMessage" >
<group id="VSTO_GroupCSSettings" label="Settings for this E-mail"
visible="true">
<toggleButton id="VSTO_CS1" size="normal" label="HTML"
onAction="CSToggle" getPressed="CSPressed" getImage="CS_GetImage" />
<toggleButton id="VSTO_CS2" size="normal" label="Plain Text"
onAction="CSToggle" getPressed="CSPressed" getSupertip="CS_GetSuperTip"
getImage="CS_GetImage" />
<toggleButton id="VSTO_CS3" size="normal" label="Rich Text"
getSupertip="CS_GetSuperTip" onAction="CSToggle" getPressed="CSPressed"
getImage="CS_GetImage" />
</group>
<group id="VSTO_GroupCSActions" label="Actions for this E-mail"
visible="true">
<button id="VSTO_CS4" size="normal" label="Insert..."
getSupertip="CS_GetSuperTip" onAction="CS_Action" getImage="CS_GetImage" />
<button id="VSTO_CS5" size="normal" label=" " />
<button id="VSTO_CS6" size="normal" label="Configure..."
onAction="CS_Action" getSupertip="CS_GetSuperTip" getImage="CS_GetImage" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
 
T

Tom

Hi Ken,

Thanks - I think I got it!!! Now I have to figure out how I can use the same
set of source code for Outlook 2002 and above.

We develop all our add-ins using ATL/C++.

We use alot of Extended MAPI functionality and have a requirement of no
..NET.

Thanks,
Tom -
 
K

Ken Slovak - [MVP - Outlook]

ATL/C++ I can't help with at all.

I sometimes use an unsupported method of working with the ribbon when
compiling for Outlook 2000 or 2002 (or 2003) addins that uses an
XLIRibbonExtensibility.tlb as a ribbon reference. I implement that interface
in my addin code and that lets me handle ribbon callbacks, etc. without
having to reference the Office 2007 libraries.

Another method is to use a PIA-less approach, which is outlined by Andrew
Whitechapel of the VSTO team on his blog. See
http://blogs.msdn.com/andreww/archi...e-add-in-for-multiple-versions-of-office.aspx
 
K

khoi nguyen

hi Tom. i searched by google and i know that you have the same problem to me. i'm writing addin for outlook. i don't know how to add a new group( have some controls ) into an existing ribbon( mailcompose ribbon ). can you send me your code to reference please?? thanks for your help



Tom wrote:

Adding a button to existing ribbon
24-Feb-09

Hi all

I would like to add a button to a ribbon on the new message window. I would
like to add this button as the first button on the message ribbon.
Everything I have read says you can only add a button group to the ribbon

Furthermore is there an example of adding a new group to a new message
window

Any suggestions would be greatly appreciated

Thanks
Tom-

Previous Posts In This Thread:

Adding a button to existing ribbon
Hi all

I would like to add a button to a ribbon on the new message window. I would
like to add this button as the first button on the message ribbon.
Everything I have read says you can only add a button group to the ribbon

Furthermore is there an example of adding a new group to a new message
window

Any suggestions would be greatly appreciated

Thanks
Tom-

Other than using <startFromScratch> and designing a complete ribbon
Other than using <startFromScratch> and designing a complete ribbon
replacement, the best you can do is to add a new group to an existing ribbon
tab. You can't just insert a button within an MS defined group

Lots of ribbon samples at the Office Development center at MSDN, have you
checked out any of those addin samples

--
Ken Slova
[MVP - Outlook
http://www.slovaktech.co
Author: Professional Programming Outlook 2007
Reminder Manager, Extended Reminders, Attachment Options
http://www.slovaktech.com/products.ht


Thanks Ken,The only examples I have seen do not do anything with the new
Thanks Ken

The only examples I have seen do not do anything with the new messag
window. I am kind of confused on how to implement ribbon group just fo
those windows

Thanks
Tom -

The idea is to handle the GetCustomUI callback.
The idea is to handle the GetCustomUI callback. It fires only the first time
an item type is opened in that Outlook session and passes you a string
ribbonID argument, which is the type of item being opened

This is a C# example of handling that callback for new mail items

public string GetCustomUI(string ribbonID

//RibbonID indicates type of Inspector that is about to be
displayed
// valid RibbonID values are as follows
//Microsoft.Outlook.Mail.Rea
//Microsoft.Outlook.Mail.Compos
//Microsoft.Outlook.MeetingRequest.Rea
//Microsoft.Outlook.MeetingRequest.Sen
//Microsoft.Outlook.Appointmen
//Microsoft.Outlook.Contac
//Microsoft.Outlook.Journa
//Microsoft.Outlook.Tas
//Microsoft.Outlook.DistributionLis
//Microsoft.Outlook.Repor
//Microsoft.Outlook.Resen
//Microsoft.Outlook.Response.Rea
//Microsoft.Outlook.Response.Compos
//Microsoft.Outlook.Response.CounterPropos
//Microsoft.Outlook.RS
//Microsoft.Outlook.Post.Rea
//Microsoft.Outlook.Post.Compos
//Microsoft.Outlook.Sharing.Rea
//Microsoft.Outlook.Sharing.Compos

//In this sample only new mail Inspector is handled for a
button

switch (ribbonID

case "Microsoft.Outlook.Mail.Compose"
// Return the RibbonX markup stored as a resource in the
projec
return Resources.CustomRibbon
default:
{
return String.Empty;
}
}
}


I'm not sure what version of VS you're using or if you're using a shared
addin or a VSTO addin, but you can download the Outlook 2007 templates I
have on my Web site (for VS 2005 for both shared and VSTO addins).

Those have simple XML for adding 2 groups to a custom tab in a new email
message. Each group gets 3 buttons. The templates are in C# and VB.NET (and
VB6). They're at http://www.slovaktech.com/outlook_2007_templates.htm.

For reference you should also download the schemas for Office 2007, you need
those for the correct names for the ribbon UI and to locate a group within
an existing tab or in the Office button groups.

As I mentioned, they're pretty basic (from my book). The XML itself looks
like this (from the VSTO C# sample):

<?xml version="1.0" encoding="utf-8" ?>
<customUI xmlns = "http://schemas.microsoft.com/office/2006/01/customui"
onLoad = "Ribbon_OnLoad" >
<ribbon>
<tabs>
<tab id="VSTO_CSAddinTab" label="VSTO_CS Addin" visible="true"
insertAfterMso="TabNewMailMessage" >
<group id="VSTO_GroupCSSettings" label="Settings for this E-mail"
visible="true">
<toggleButton id="VSTO_CS1" size="normal" label="HTML"
onAction="CSToggle" getPressed="CSPressed" getImage="CS_GetImage" />
<toggleButton id="VSTO_CS2" size="normal" label="Plain Text"
onAction="CSToggle" getPressed="CSPressed" getSupertip="CS_GetSuperTip"
getImage="CS_GetImage" />
<toggleButton id="VSTO_CS3" size="normal" label="Rich Text"
getSupertip="CS_GetSuperTip" onAction="CSToggle" getPressed="CSPressed"
getImage="CS_GetImage" />
</group>
<group id="VSTO_GroupCSActions" label="Actions for this E-mail"
visible="true">
<button id="VSTO_CS4" size="normal" label="Insert..."
getSupertip="CS_GetSuperTip" onAction="CS_Action" getImage="CS_GetImage" />
<button id="VSTO_CS5" size="normal" label=" " />
<button id="VSTO_CS6" size="normal" label="Configure..."
onAction="CS_Action" getSupertip="CS_GetSuperTip" getImage="CS_GetImage" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>





Hi Ken,Thanks - I think I got it!!!
Hi Ken,

Thanks - I think I got it!!! Now I have to figure out how I can use the same
set of source code for Outlook 2002 and above.

We develop all our add-ins using ATL/C++.

We use alot of Extended MAPI functionality and have a requirement of no
..NET.

Thanks,
Tom -


ATL/C++ I can't help with at all.
ATL/C++ I can't help with at all.

I sometimes use an unsupported method of working with the ribbon when
compiling for Outlook 2000 or 2002 (or 2003) addins that uses an
XLIRibbonExtensibility.tlb as a ribbon reference. I implement that interface
in my addin code and that lets me handle ribbon callbacks, etc. without
having to reference the Office 2007 libraries.

Another method is to use a PIA-less approach, which is outlined by Andrew
Whitechapel of the VSTO team on his blog. See
http://blogs.msdn.com/andreww/archi...e-add-in-for-multiple-versions-of-office.aspx






Submitted via EggHeadCafe - Software Developer Portal of Choice
Break the Roles in SharePoint Lists
http://www.eggheadcafe.com/tutorial...7-42f2d9110d79/break-the-roles-in-sharep.aspx
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top