David Hernandez
David Hernandez

Reputation: 11

Outlook AddIn Zoom.Percentage

Im trying to translate this VBA code from an Outlook AddIn to C#

Private Sub objInspector_Activate() Handles objInspector.Activate
        Dim wdDoc As Microsoft.Office.Interop.Word.Document = objInspector.WordEditor
        wdDoc.Windows(1).Panes(1).View.Zoom.Percentage = lngZoom
End Sub

But I can't get access to the Panes.View.Zoom.Percentage property

The main idea is that when the user opens an email, he will get a custom zoom level.

What I got at the moment is:

void Inspector_Activate()          
 {             
// this bool is true
// bool iswordMail = objInspector.IsWordMail();

//I get the word document

Document word = objInspector.WordEditor as Microsoft.Office.Interop.Word.Document;

word.Application.ActiveDocument.ActiveWindow.View.Zoom.Percentage = 150;
// at this point i'm getting an exception
// I've also tried with 
// word.ActiveWindow.ActivePane.View.Zoom.Percentage = 150; getting the same exception                      
}

The exception is :

An exception of type 'System.Runtime.InteropServices.COMException' occurred in OutlookAddInTest.dll but was not handled in user code

Additional information: This object model command is not available in e-mail.

I'm quite new in C# and Office addins, any advise?

Upvotes: 1

Views: 773

Answers (4)

Dmitry Streblechenko
Dmitry Streblechenko

Reputation: 66255

Use word.Windows.Item(1).View.Zoom.Percentage = 150 (where word comes from Inspector.WordEditor)

Upvotes: 1

Wade Hatler
Wade Hatler

Reputation: 1835

I've been wanting this forever, and then I stumbled on a nice project in the MSDN Gallery Outlook 2010: Developing an Inspector Wrapper. It has a set of wrappers for all the Outlook objects, so you get a true event for every item of interest. Not sure if it's the most efficient thing ever, but it seems to work.

I have trouble with my eyesight so want black everything, and zoom everything. I seem to be able to do that by overriding the Activate() method. It's all pretty new so we'll see if it survives long term.

    protected virtual void Activate() {
        var activeDocument = Inspector.WordEditor as Document;
        if (activeDocument == null)
            return;

        var mailZoom = GetSetting("MailZoom", 125);
        if (mailZoom != 0)
            activeDocument.Windows[1].View.Zoom.Percentage = mailZoom;

        if (GetSetting("MailBlack", true)) {
            activeDocument.Background.Fill.ForeColor.RGB = 0;
            activeDocument.Background.Fill.Visible = msoTrue;
            activeDocument.Saved = true;
        }
    }

In this example, GetSetting is just a function that returns a setting from an INI file. you can use constants or some other storage method.

There might be a better way to get the white on black text, but this seems pretty good.

Upvotes: 0

David Hernandez
David Hernandez

Reputation: 11

Thanks to Eugene Astafiev for his help. The square brackets did the trick

VBA

Private Sub objInspector_Activate() Handles objInspector.Activate
        Dim wdDoc As Microsoft.Office.Interop.Word.Document = objInspector.WordEditor
        wdDoc.Windows(1).Panes(1).View.Zoom.Percentage = 150
End Sub

C#

private void Inspector_Activate()
        {
            Document wdDoc = objInspector.WordEditor;
            wdDoc.Windows[1].Panes[1].View.Zoom.Percentage = 150;  
        }

Upvotes: 0

Eugene Astafiev
Eugene Astafiev

Reputation: 49405

word.Application.ActiveDocument.ActiveWindow.View.Zoom.Percentage = 150;

What property exactly fires the exception?

Anyway, there is no need to call the Application and ActiveDocument properties in the code. The WordEditor property of the Inspector class returns an instance of the Document class (not Word Application instance).

Upvotes: 0

Related Questions