IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Bataille avec le ruban d'Outlook


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 022
    Par défaut Bataille avec le ruban d'Outlook
    Bonjour,

    Je travaille actuellement sur un Add-in dans Outlook qui concerne uniquement les messages électronique.

    Grâce à IRibbonExtensibility j'arrive à créer un ruban facilement avec du XML.
    Mon problème réside dans le fait que je n'arrive pas à limiter l'apparition du ruban aux seuls éléments qui concernent les messages éléctroniques.

    Pour le moment j'ai réussi à afficher le ruban dans les fenêtres de composition et de lecture du message et à le masquer sur quelques écrans.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    String IRibbonExtensibility.GetCustomUI(String ribbonID)
            {
                String XmlRibbonDefinition = "NormalUI.xml";
                if (ribbonID.StartsWith("Microsoft.Outlook"))
                {
                    XmlRibbonDefinition = "OutlookExplorerUI.xml";
                    if (ribbonID.StartsWith"Microsoft.Outlook.Mail") XmlRibbonDefinition = "OutlookMailUI.xml";
     
                    if ((ribbonID.StartsWith("Microsoft.Outlook.MeetingRequest"))
                        || (ribbonID == "Microsoft.Outlook.Appointment") || (ribbonID == "Microsoft.Outlook.Contact")
                        || (ribbonID == "Microsoft.Outlook.Journal") || (ribbonID == "Microsoft.Outlook.Task")
                         || (ribbonID == "Microsoft.Outlook.DistributionList") || (ribbonID == "Microsoft.Outlook.Task")
                        || (ribbonID == "Microsoft.Outlook.Report") || (ribbonID == "Microsoft.Outlook.Resend")
                        || (ribbonID.StartsWith("Microsoft.Outlook.Response")) || (ribbonID == "Microsoft.Outlook.RSS")
                        || (ribbonID.StartsWith("Microsoft.Outlook.Post")) || (ribbonID.StartsWith("Microsoft.Outlook.Sharing")))
                    {
                        XmlRibbonDefinition = String.Empty;
                    }
                }
     
                if (XmlRibbonDefinition != String.Empty)
                {
                    Assembly executingAssembly = Assembly.GetExecutingAssembly();
                    foreach (String assemblyName in executingAssembly.GetManifestResourceNames())
                    {
                        if (assemblyName.EndsWith(XmlRibbonDefinition))
                        {
                            TextReader xmlReader = new StreamReader(executingAssembly.GetManifestResourceStream(assemblyName));
                            String xmlRibbon = xmlReader.ReadToEnd();
                            xmlReader.Close();
                            return xmlRibbon;
                        }
                    }
                }
                return String.Empty;
            }

    Si je me fie à tout ce que j'ai pu trouver jusqu'à maintenant, le ruban correspondant la liste des messages correspond à "Microsoft.Outlook.Explorer". Sauf que le ruban des modules "Contacts", "Calendrier" et "Tâches" y sont également rattachés.
    J'ai donc essayé d'ajouter un attribut "getVisible" dans le XML et d'y associer une méthode de ma class "Connect" mais je ne sais pas comment savoir dans quel module je me trouve.

    Le but final est d'afficher mon onglet uniquement si je suis dans le module "Courrier".

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 022
    Par défaut
    J'ai finalement trouvé !!!!

    Pour ceux qui un jour risquent de tomber dans la même galère. La solution repose sur un attribut dans le XML et un brin de bidouille.

    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">

    Il convient ensuite de déclarer un IRibbonUI, de l'assigner dans la fameuse méthode OnLoad et de déclencher le Invalidate de cet objet. C'est là qu'un intervient la bidouille, il faut capter l'évenement de changement (pas facile à trouver) de module et redessiner à cet instant précis.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
              private IRibbonUI cegidRibbon;
    		public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref Array custom)
    		{
    			applicationObject = application;
    			addInInstance = addInInst;
     
                if (applicationObject is OUTLOOK.Application)
                {
                    OUTLOOK.Explorer currentExplorer = ((OUTLOOK.Application)applicationObject).ActiveExplorer();
                    if (currentExplorer != null)
                        currentExplorer.BeforeFolderSwitch += new OUTLOOK.ExplorerEvents_10_BeforeFolderSwitchEventHandler(BeforeFolderSwitch);
                }
    		}            }
    		}
            public void OnLoad(IRibbonUI ribbon)
            {
                cegidRibbon = ribbon;
            }
     
            void BeforeFolderSwitch(Object NewlySelectedFolderAsObject, ref Boolean Cancel)
            {
                if (cegidRibbon != null) cegidRibbon.Invalidate(); 
            }
     
            public Boolean GetOutlookExplorerVisible(IRibbonControl control)
            {
                if ((applicationObject is OUTLOOK.Application))
                {
                    OUTLOOK.Explorer currentExplorer = ((OUTLOOK.Application)applicationObject).ActiveExplorer();
                    String inBoxFolderName = ((OUTLOOK.Application)applicationObject).Session.GetDefaultFolder(OUTLOOK.OlDefaultFolders.olFolderInbox).Name;
                    if (currentExplorer.CurrentFolder.Name == inBoxFolderName)
                    {
                        return true;
                    }
                }
                return false;
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bataille avec \ref et \pageref
    Par Pharmacos dans le forum Mise en forme
    Réponses: 3
    Dernier message: 02/06/2009, 19h55
  2. Envoyer mail avec piece jointe par outlook
    Par skunkies dans le forum Windows Forms
    Réponses: 6
    Dernier message: 18/11/2008, 02h09
  3. E-mail de l'expéditeur avec le composant serveur Outlook
    Par DavFau dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 19/01/2008, 11h09
  4. problème avec ma signature sur outlook
    Par IDE dans le forum Outlook
    Réponses: 8
    Dernier message: 31/05/2007, 15h05
  5. Probleme avec les regles dans OUTLOOK 2007
    Par JUSTIN Loïc dans le forum Outlook
    Réponses: 2
    Dernier message: 13/09/2006, 20h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo