Page History
[ |../../index.htm#lansa/l4wdev07_0155.htm]
現在地:Anchor
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
EVTROUTINE HANDLING(#STARTBTN.Click)
...
SET_REF COM(#WordApp)
...
TO(*CREATE_
...
AS #VA_WORD.application)
ENDROUTINE
...
参照が存在することの確認
Wordの起動前にプロパティ、メソッド、イベントを使おうとするとエラーになります。したがって、初期状態ではフォーム上のボタン類を無効にしておき、Wordが起動してから有効にするよう制御しなければなりません。IF_REFステートメントは、Wordの参照が生成済みであるか否かを確認するために使います。Wordの開始ボタンのClickイベントに、次のコードを追加してください。 EVTROUTINE HANDLING
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