Delphi (や .NET 系) のアプリケーション内に置かれた ShockwaveFlash OCX との通信方法などをまとめておく。こういった技術は、Flash プロジェクタでは賄えないような、ちょっとしたデスクトップアプリケーションを作るには良いかも知れない。
基本は文字列の送受信
Delphi と Flash 間の通信は文字列の送受信によって行われる。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 に持たせた。