ShockwaveFlash OCX を使う

Delphi (や .NET 系) のアプリケーション内に置かれた ShockwaveFlash OCX との通信方法などをまとめておく。こういった技術は、Flash プロジェクタでは賄えないような、ちょっとしたデスクトップアプリケーションを作るには良いかも知れない。

基本は文字列の送受信

DelphiFlash 間の通信は文字列の送受信によって行われる。XML を使えば幅広く対応できそうだ。

Delphi から Flash へのメッセージング

Delphi から Flash へのメッセージングには、TShockwaveFlash のメソッド SetVariable を使用する。SetVariable は Flash 側のオブジェクトのプロパティを書き換える。

//Delphi
ShockwaveFlash.SetVariable('prop', 'newValue');

Flash は、変数の書き換えが行われたことを検知するため、prop を watch する。watch することで、prop が書き換えられた際に callback 関数が実行されるようになる。例えば、SetVariable と callback 関数の組み合わせを以下のようにすれば、Delphi から Flash の任意のメソッドを呼ぶこともできる。

//Delphi
ShockwaveFlash.SetVariable('callFunction', 'hoge');
//Flash
this.watch("callFunction", this.callFunction);
function callFunction(null, null, functionName:Object):Void {
this[functionName]();//hoge() が実行される
}

Flash から Delphi へのメッセージング

Flash から Delphi にメッセージを送るには fscommand を使用する。Delphi 側で OnFSCommand イベントが発生するが、コマンド名によって処理を振り分けなければならない。以下は、メッセージダイアログを表示する例である。

//Flash
fscommand("showMessage", "hoge");
//Delphi
procedure TForm1.ShockwaveFlashFSCommand(Sender: TObject; const command, args: WideString);
begin
if (command = 'showMessage') then
begin
ShowMessage(args);//hoge が表示される
end;
end;

デモアプリケーション

ドローアプリケーションのデモを作成した。キャンバスを Flash で実装し、画像データの保存を Delphi で行う。クリアボタンも Delphi に持たせた。

デモをダウンロード (Windows/zip/182KB)

参考サイト