Welcome to X4U
Minimize 

Hello visitor.

This is the personal homepage of Helmut Obertanner.
I'm a computer freak and electronic enthusiast and I live in Munich in Germany - the hometown of the famous Oktoberfest.
Why the name X4U? In my case it's a synonym for everything is possible.
I'm an experienced full time C# developer and doing so since .Net Framework 1.0.
As technical enthusiast I started Office development using .Net technologies.
As I searched answers and found help in the Internet I decided to share my knowledge in newsgroups and forums too. For participation, helping other developers, writing how-to's and articles and doing consulting and trainings I received the Microsoft MVP Award for the 3rd time.

As Outlook C# specialist I founded the website Outlooksharp.de
Beside software development, I'm building electronic devices for customers.
Prototypes with SMD PCBs and complete electronic devices with USB connections are my typical portfolio.
You got an Idea and have no plan how to put it to work - give me a call and I tell you if I can help.
A complete solution starts from defining the requirements, design the schematic and PCB, build a functional prototype, program the firmware, program the windows software, design and build a housing prototype.
Usually I work with very cheap PIC 18F Microcontrollers, these multifunctional devices are programmed in C language. 

I'm located in Germany with satisfied customers around the globe.
Enjoy the content of my site and feel free to give me your feedback.
You're welcome.
X4U Blog
 
Jun10

Written by:Helmut Obertanner
6/10/2010 9:13 PM 

Wie kann man auf einfachstem Wege auf Bilder für Ribbon-Steuerelemente wie <button> oder <togglebutton> aus Projektresourcen laden?
Im ersten Schritt müssen die Bilder dem Projekt als Resource hinzugefügt werden.

Dazu öffnet man die Eigenschaften des Projekts und wechselt auf den Karteireiter "Resourcen", und importiert die gewünschten Bilddateien.
In der Abbildung oben ist der Resourcen-Eigenschaften-Seite von Visual Studio 2010(en) zu sehen.
Achtung: Nach dem Importieren einer Datei hat diese nicht den kompletten Dateinamen als Bezeichnung.
Der Name ist üblicherweise der Dateiname ohne Endung. Aus "questionred.png" wird zum Beispiel "questionred".
Wie wird nun auf diese Bilder per Programmcode zugegriffen?
Im Ribbon.xml muss dazu üblicherweise eine Callback-Methode definiert werden:

<buttonid="buttonMoveToNirwana"getImage ="buttonMoveToNirwana_GetImage" />

 

Im dazugehörigen Sourcecode muss eine öffentliche Methode definiert werden, welche ein stdole.IPictureDisp zurückliefert.

publicIPictureDisp buttonMoveToNirwana_GetImage(IRibbonControl control) {

returnnull;

}

 

Jetzt muss nur noch das .Net Image in ein IpictureDisp convertiert werden.
Der Zugriff auf die importierten Bilddateien ist sehr einfach, da bereits nach dem Import die entsprechende Methode dazu generiert.
Dazu steht eine Eigenschaft Properties.Resources.questionred bereit.

Um das Bild in ein COM-Interface umzuwandeln wird wird eine kleine Hilfsklasse benötigt.
In diesem Beispiel ist diese mit ImageHelper bezeichnet:

using System.Windows.Forms;

using System.Drawing;

using stdole;

 

namespace RibbonExplorer {

internalclassImageHelper : AxHost {

 

private ImageHelper()

: base(null) {

}

 

publicstaticIPictureDisp Convert(Image image) {

return (IPictureDisp)AxHost.GetIPictureDispFromPicture(image);

}

}

 

}

 

Die Verwendung der Klasse gestaltet sich sehr einfach:

publicIPictureDisp buttonMoveToNirwana_GetImage(IRibbonControl control) {

returnImageHelper.Convert(Properties.Resources.questionred);

}

 

Ein Nachteil dieser Verwendung ist, dass die Resourcen fest als Eigenschaften definiert sind. Um hier nochmals eine einfachere/flexiblere Möglichkeit zur Verwendung zu schaffen, wird die ImageHelper-Klasse um folgende Funktion erweitert:

publicstaticIPictureDisp GetImage(string resourceName) {

return Convert((Image)Properties.Resources.ResourceManager.GetObject(resourceName));

}

 

Dadurch lässt sich jetzt auch der Resourcename zum laden der Bilder verwenden. Der Name kann jetzt also auch im Tag eines Controls stehen, oder die RibbonId selbst sein.
Die Verwendung der Klasse kann man unten sehen:

publicIPictureDisp buttonMoveToNirwana_GetImage(IRibbonControl control) {

returnImageHelper.GetImage("questionred");

}

 

Dies ist einfach und flexibel.

Grüße, Helmut

 

Tags:

Your name:
Your email:
(Optional) Email used only to show Gravatar.
Your website:
Title:
Comment:
Security Code
CAPTCHA image
Enter the code shown above in the box below
Add Comment  Cancel 
X4U Blog
 
Home  |  Hardware  |  Software  |  Services  |  Resources  |  Impressum