Welcome to MSDN Blogs Sign in | Join | Help

the 2007 Microsoft Office system でカスタムスマートアート (Custom SmartArt) を作成する

こんにちは。

今日は、MSDN Magazine のおもしろい記事をご紹介します。

the 2007 Microsoft Office system になって、クライアントがテンプレート指向のユーザインタフェースになり、自分なりにレイアウトしてみたいと少しがっかりされている方も居るかもしれません。テーブルのフォーマットなど、簡単なものについては Office 上でカスタムで作成できるようになっていますが、新しく導入されたスマートアート (SmartArt) もこんなふうにカスタムに作成できるという記事が MSDN Magazine に紹介されています。(↓)

◆ Create Custom SmartArt Graphics For Use In The 2007 Office System
http://msdn.microsoft.com/msdnmag/issues/07/02/SmartArt/default.aspx

文字数が膨大ですので、プログラマの方向けに少しヘルプを記載しておきます。(スマートアートは、ご存知の通り、実に動きの細かい機能ですので、本格的に作ってみたい方は是非上記の記事を参照してください。)

まずは、上記のサイトからサンプルコードを落として、解凍してみましょう。この中に、MSDNExample.glox というファイルがありますので、これをユーザフォルダの下の Application Data\Microsoft\Templates\SmartArt Graphics にコピーして、PowerPoint などを立ち上げてスマートアートを挿入してみてください。(システムドライブが C の場合は、C:\Documents and Settings\[ユーザID]\Application Data\Microsoft\Templates\SmartArt Graphics です。)
スマートアートのダイアログの、[その他] というフォルダに、MSDN Magazine 自作のスマートアートが表示されていると思います。(尚、上記のドキュメントに記載されていますが、レジストリキーを変更しても参照できます。)

この glox ファイルですが、zip ファイルになっていますので、構造とコードをみたいプログラマの方は、拡張子を zip に変更して、解凍してみると良いでしょう。

開発方法ですが、基本は、Open XML を使って、XML により記述します。レイアウトのアルゴリズムなども既存に使えるものが用意されていて、概ね XML の属性などを使って指定していきます。
概念としては、レイアウトの構成を設計して、その構成を XML の構造に落として肉付けしていきます。このサンプルの場合は、まず横に一直線に並んでいて、その中で、図の「コンポーネント」(箱)の本体と、「スペース」(空白)が並び、さらに図のコンポーネント(箱)の中が、「角の丸い四角形」で囲んで、「親のテキスト」、「白の間のスペース」、「子のテキスト」という構成になっているので、上記の記事の Figure 4 に書かれているような構成になります。

あとは、それぞれのノードの属性などを細かく設定して動作を定義していきます。alg 属性では、どのようなアルゴリズムで配置するか、shape の type 属性では、どのような shape を配置するか、といった具合に指定します。使える属性などは上記文書、さらに上記に記載されていない属性については、下記に記載されていますので、どのような指定が可能か確認してみると良いでしょう。

http://msdn.microsoft.com/msdnmag/issues/07/02/SmartArt/default.aspx?loc=&fig=true#fig3

例えば、MSDNExample.glox の拡張子を zip に変更して、diagrams\layout1.xml を Visual Studio で開いて、36行目を以下の通り変更すると、

【修正前】
<alg type="lin" />

【修正後】
<alg type="cycle" />

トップレベルで、横一列に並んでいたものが、循環上に並ぶようになります。(尚、再度 zip に戻して配置しなおしてください。zip の中の構成が変わってしまうとエラーになるので要注意です。)

Published Monday, March 26, 2007 1:31 PM by tsmatsuz
Filed under:

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

No Comments

Leave a Comment

(required) 
required 
(required) 

  
Enter Code Here: Required
 
Page view tracker