« 通過記録 | メイン | TJS2からCOMを使う »

2005年04月12日

吉里吉里2/KAG3ムービー拡張日誌:: Flashはレイヤーに描ける?

    

FlashのプラグインはC++Builderで書かれており、TShockwaveFlash を使っている。
TShockwaveFlash にメモリへ描画する能力があれば、簡単に実装できるはず。
で、TShockwaveFlash について調べたところ、Delphi + Flash / Using TShockwaveFlash にメソッドやプロパティの一覧があった。
読んでみると、どうやらTShockwaveFlashを使ってメモリに描画するのは無理っぽい。

OLE/COM オブジェクトの Shockwave Flash Object は、IEなどへ描画できるため、フルコントロールだと思われる。
oleviewで見てみると、IViewObject インターフェイスを実装しているのが確認できる。
IViewObject には、IViewObject::Drawメソッドがあり、この引数の中には描画対象のデバイスコンテキストと参照用のデバイスコンテキストがある。
描画対象のデバイスコンテキストがあるのなら、デバイスコンテキストに適当なビットマップをセットして渡したら、描画できそうだ。
後は、フレーム更新時の描画タイミングがわかれば、実装は出来そう。
で、それはIConnectionPointContainer か IAdviseSink を使えば出来そうだ。
まあ、実際に出来るかどうかはわからないが、レイヤーへの描画にも対応出来そうではある。

IOleInPlaceObjectWindowless が使えれば、利用者側で作ったウィンドウに対して描画させることが出来るようだが、oleview で見たところでは、そのインターフェイスは確認できなかった。

とりあえず、実装出来そうなのはいいけれど、ここまで調べてから面倒臭くなった。
最近、Flashに興味が沸いてきたのだが、ちゃんとしたFlashムービーはまだ作っていないので、やるならそっちの方が先だろうな。
Flashムービーを作ってみて、吉里吉里のレイヤーにも描けるようにしたいと思ったらやるかも。
今のところそんなにやる気は沸かないのだが。



投稿者 Takenori : 2005年04月12日 23:41



コメント

こんにちは。
レイヤへのFlashの描画は結構要望が多いのですが、
以前やろうとして放置したままになってしまっています。

http://kikyou.info/diary/?200312#i14_1

もう昔の事で記憶が薄いのですが、IOleInPlaceSiteWindowless はオブジェクト作成時の
プロパティバッグ(?) のプロパティによって
出てくるインターフェースのようです。


投稿者 W.Dee : 2005年04月13日 10:44

W.Deeさん、こんにちは。
なるほど、やはり IOleInPlaceSiteWindowless を使うのですね。
でも、やっぱり手続きは煩雑…

投稿者 Takenori : 2005年04月13日 19:30


comments powered by Disqus
Total : Today : Yesterday : なかのひと