アプリケーションの参照

activex

ActiveX対応アプリケーションをLANSAフォームから起動するためには、アプリケーションの参照をフォームに追加する必要があります。一番簡単なのは、ActiveXコンポーネントをフォームまでドラッグする、という方法です。これにより、コンポーネントを定義するDEFINE_COMステートメントが生成されます。

次のステートメントは「Word Application」コンポーネントを参照するもので、#VA_WORDコンポーネントをドラッグしてフォーム上で放すと生成されます。

DEFINE_COM CLASS(#VA_WORD.Application) NAME(#VA_WORD)

 

フォームを実行したとき、このDEFINE_COMステートメントに到達すると、「Word Application」(のインスタンス)が起動されます。すでにWordが実行中でも、それとは別に起動されます。

実際に試してみる場合は、アプリケーション名を次のように「#WordApp」と変更しておくとわかりやすいでしょう。

DEFINE_COM CLASS(#VA_WORD.Application) NAME(#WordApp)

 

参照を生成するタイミングの制御

この例では、LANSAフォームを実行してもその時点では「Word Application」が起動されません。Wordをいつ起動するか制御するため、動的参照としてコンポーネントを定義しておき、ボタンのClickイベントに対応してこの参照を割り当てるようにしてみましょう。

動的にコンポーネントを定義するため、次のように、ReferenceプロパティをDEFINE_COMステートメントに追加します。

DEFINE_COM CLASS(#VA_WORD.Application) NAME(#WordApp) REFERENCE(*DYNAMIC)

 

これを実行した時点では、Wordの参照は生成されません。Wordの開始ボタンを押したときWordが起動されるようにするため、SET_REFコマンドを使って、ボタンのClickイベントにWordの参照を割り当てます。

EVTROUTINE HANDLING(#STARTBTN.Click)

   SET_REF COM(#WordApp) TO(*CREATE_AS #VA_WORD.application)

ENDROUTINE

 

参照が存在することの確認

Wordの起動前にプロパティ、メソッド、イベントを使おうとするとエラーになります。したがって、初期状態ではフォーム上のボタン類を無効にしておき、Wordが起動してから有効にするよう制御しなければなりません。IF_REFステートメントは、Wordの参照が生成済みであるか否かを確認するために使います。Wordの開始ボタンのClickイベントに、次のコードを追加してください。

EVTROUTINE HANDLING(#STARTBTN.Click)

  SET_REF COM(#WordApp) TO(*CREATE_AS #VA_WORD.application)

  

  if_ref com(#wordapp) is_not(*null)

    set com(#ShowHideBtn #gpbx_1 #rdbn_1 #rdbn_2 #rdbn_3 #Addbtn #InsBtn #SaveBtn #CloseBtn #PrintBtn) enabled(true)

  endif

ENDROUTINE