2012/08/03

プレゼン補助ツールを考えてみた その2

前回 プレゼン補助ツールを考えてみた のつづき。

「PowerPointのスライドショーに、プログレスバーを表示する」ための実装方法を考えてゆきます。




.

表示

さて、スライドショーの上にどうやってプログレスバーを表示させればよいでしょう。

最初に思いついたのは愚かにもIEでした。PowerPointの上にIEを表示させその中にプログレスバーを表示すればよいかと。
で、IEがインストールされていないWindowsは稀であり、IEも外側から操作するのも簡単でしょう。

だがしかし。IEのウィンドウのタイトルバーやツールバーをどうやって消せばよいのでしょうか・・・。
無理じゃね?誰だよIEとか言い出したの。

そうか、HTAを使えばいけるのかな?っていうアイデアも思いついたんですが、OSまたはIEのセキュリティ設定、ブラウザのバージョンによってその挙動が変わりそうです。


っとここで思考が止まってしまったんですね。で、そのままだんだん忘れていってしまいました。
え?早くね?




時は流れて・・・・・


最近になって、また思い出してもう一回がんばろうと思ったのです。
今回は先にロジックの部分を考えました。


進捗の把握

まず、プログレスバーは2本必要です。

時間の進捗をあらわすバーはリアルタイムに長さを変える必要があります。できれば秒単位で。
進捗は、開始時刻と現在時刻と目標時間で長さが決まります。
定期的に処理を走らすか、一定のスピードで動けばいいだけなので、これは簡単そうです。

対して、ページの進捗をあらわすバーはページ切替時に長さを変える必要があります。
さらに進捗は、PowerPointのトータルページ数とスライドショーの現在ページを拾う必要があります。
となるとどうもPowerPointのアプリケーションのオブジェクトを覗かなきゃなりません。

検索してみると、やはりCOMオブジェクトからのアクセスができそうです。
http://msdn.microsoft.com/en-us/library/bb265987.aspx

掘ってみるとSlideShowViewオブジェクトにCurrentShowPositionっていうプロパティがあります。
http://msdn.microsoft.com/en-us/library/bb265342(v=office.12).aspx
よし、これで現在のページ数は取れそうです。

方針1
ページの進捗はCOMオブジェクトからアクセスして把握する。




あらためて 表示

さて課題の表示の部分です。
もちろんIEは最初から捨てます。さようならIE。死ねIE。

で、ふと考えたのですが、そもそもPowerPointのスライドショーの上に別のアプリケーションのなにかを表示させるのは現実的なのか?
他のアプリケーションじゃないとしたらPowerPointの機能でバーが表示できればいいんじゃないの?
ほら、オートシェイプ的なあれで細長い矩形をつくればいいでしょ。

COMオブジェクトからそのくらいのことはできるんじゃないの?
・・ほら、ShapesオブジェクトとやらにAddShapeっていうそれらしきものあるじゃない。
http://msdn.microsoft.com/en-us/library/bb230703(v=office.12).aspx

あれ?俺なんで悩んでたんだろう。最初にIEとか言い出したのがまずかったんじゃない?
やっぱIEは死ねb(ry (言いがかり)

方針2
プログレスバーの表示はCOMオブジェクトからアクセスしてshapeを作る。



言語

さて何語で話せばよいでしょうか。
COMオブジェクトとか言ってますが、全部PowerPointの中なので、PowerPointのVBAを使うっていうことも可能です。
ただ、ロジックの部分はPPTファイルやPowerPointアプリケーションの外側に置いておきたいと思うのです。
その部分でVBAはナシにしました。

じゃぁ次はPowerShell。
「powershell + powerpoint」で検索してみると、いくつかそれっぽい記事がでてくるのでできそうです。
やっぱコレでしょ!
XPだとデフォルトでは動かない? いいのいいのあんなレガシーは。
どうしてもっていうならPowerShellインストールさせればいいよ。

ってシコシコ書き始めたんです。


最低限の機能まで作って上記のアイデアが実現可能であることは確認しました。
スライドショー開始後にシェイプの大きさを変えたりして表示に反映されるか自信がなかったんですが、普通に変わってくれました。
課題はたくさん出ましたが、無視できるレベルまで減らすことができそうです。


じゃぁ、もうちょっと安全設計にしつつ機能を充実させようかなってところで続かなくなりました。
やはり簡単にClassが書けないのはつらい。あと、外部ファイル化するのもちょっと面倒。
機能を増やすたびにどんどん無駄が増えていったのです。

うーん、じゃぁ.NET覚えて独自クラス作ってPowerShellから使うか・・・・いや、だったらPowerShellじゃなくてアプリ作れば・・・・
まぁそれも解ではありますが、そうなると今度はいつ完成するかわかりません。
じゃぁ、少し後退するけどVBScriptでお茶を濁そうか。

前回書きませんでしたが、目標として「今年中に一通り完成させること」を考えていたので、これから言語を学習するのはナシにしたかったのです。
ということで全部VBScriptで書き直しました。

方針3
言語はライトにVBScript。コンパイル不要で強制オープンソース。


次回はロジックの設計の部分

0 件のコメント:

コメントを投稿