| 2024/09/19(Thu) 09:10:17 編集(投稿者)
ジェダイの桐さん
> 〇 &sendMacro = "メソッド呼び出し ハンドル = <ハンドル>, 戻り値 = <変数名>, <コマンドボタン>.実行()" > 手続き実行 HDLCOMprcMacroSend( &hdl, &sendMacro, &done ) > 〇 は、INF_Frameworkの[HDLCOM]機能を利用しています。[HDLCOM]機能は相手のフォームの[タイマー]を経由して実行するので、 > 自分自身以外のフォームとの結合度が弱くなります。 > プログラムの流れは自身のフォームのプログラムの流れが終わってから、 > フォーム毎に別々に発生するので、プログラムの流れを追うこと簡単です。つまり、デバッグし易いアプローチです。
[HDLCOM]機能は相手のフォームの[タイマー]を経由してコマンドを[コマンド]コマンドで実行します。
以下は参考例です。
transaction_A.wfx
オブジェクト名: cmdTest 標題 : cmdTest
機能名 機能パラメータリスト 1 表示 2 手続き実行 cmdTestClick 3 なし 4 なし
↑上の transaction_A.wfx の[コマンドボタン:cmdTest]を実行した
┌when :transaction_A.wfx hdl= 2>cmdTestClick( )を実行開始しました │ │ :if ( &found .and &status ) : 1 │ :if ( &isObject ) : 1 │ │ 以下の[HDLCOMprcMacroSend]のトレース出力は INF_Framework が自動的に出力します │┌when 手続き"HDLCOMprcMacroSend(3,"メソッド呼び出し @cmd閉じる.実行()",)"を実行開始しました ││ ││ :transaction_A.wfx hdl= 2>HDLCOMprcMacroSend( ) --> ハンドル番号:3 のフォームの局所変数:&HDLCOMmOnMacro に 1 を代入しました ││ :transaction_A.wfx hdl= 2>HDLCOMprcMacroSend( ) --> ハンドル番号:3 のフォームの局所変数:&HDLCOMmReceiveMacro に メソッド呼び出し @cmd閉じる.実行() を代入しました ││ :transaction_A.wfx hdl= 2>HDLCOMprcMacroSend( ) 自身のフォームの局所変数:&HDLCOMmSendMacro に メソッド呼び出し @cmd閉じる.実行() を代入しました ││ :transaction_A.wfx hdl= 2>HDLCOMprcMacroSend( ) --> ハンドル番号:3 のフォームの[タイマー2]イベントを予約しました(インターバルは0.1秒) ││ │└end │ │ :&hdl : 3 &sendMacro : メソッド呼び出し @cmd閉じる.実行() &done : 1 │ └end
↓ ↓ transaction_B.wfx の時限式タイマーによって、transaction_B.wfx のワークスペースの[コマンドボタン:cmd閉じる]を実行した ↓
┌when 手続き"フォーム::タイマー2( )"を実行開始しました ※ これは、transaction_B.wfx の実行結果です │ │┌when 手続き"INFprcEventTimerSecondaryRun( )"を実行開始しました ││ ││┌when 手続き"INFprcTimerSecondaryOFF( )"を実行開始しました ││└end ││ │└end │┌when 手続き"フォーム::フォーム終了( )"を実行開始しました ※INF_Framework は[フォーム終了]イベントを使用します ││ │└end │ └end
■ transaction_A.wfx の手続き
手続き定義開始 cmdTestClick( ) 変数宣言 自動,文字列{ &icon, &title = "cmdTestClick( )", &msg } 変数宣言 自動,文字列{ &targetFileName } 変数宣言 自動,文字列{ &sendMacro } 変数宣言 自動,文字列{ &objectName } 変数宣言 自動,整数 { &hdl } 変数宣言 自動,整数 { &found, &status, &multi, &mode } 変数宣言 自動,整数 { &isObject } 変数宣言 自動,整数 { &done }
変数宣言 自動,文字列{ &traceMsg = #cond( #変数( "INFmTraceFormPathAdd" ), &INFmMyWfmPath ) + &INFmMyWfmName + " hdl=" + #last( " " + #str( &hwindow ), 2 ) + ">" + &title } 変数宣言 自動,整数 { &traceON = #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "ALL" ) .or #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "APP" ) }
&traceON = 1 条件 ( &traceON ) トレース出力 &traceMsg + "を実行開始しました"
&targetFileName = #一括パス名 + "transaction_B.wfx" 手続き実行 HDLLNCprcHdlSeek( &targetFileName, &found, &status, &multi, &mode )
条件 ( &traceON ) トレース出力 "if ", _( &found .and &status ) if ( &found .and &status ) /* フォームのウィンドウが見つかった */
&hdl = &found &objectName = "cmd閉じる" メソッド呼び出し ハンドル = &hdl, @フォーム.オブジェクト検査( &objectName, &isObject ) **値 説明 ** 1 存在する ** 0 存在しない
条件 ( &traceON ) トレース出力 "if ", _( &isObject ) if ( &isObject )
&sendMacro = "メソッド呼び出し @cmd閉じる.実行()" 手続き実行 HDLCOMprcMacroSend( &hdl, &sendMacro, &done ) 条件 ( &traceON ) トレース出力 _&hdl, " ", _&sendMacro, " ", _&done end
end
条件 ( &traceON ) トレース出力 &traceMsg + "を実行終了しました" 手続き定義終了
|