7



DoubleClick(ダブルクリック)

   
INF_Framework は ONnoji さん作成のフリーのライブラリです。
フォームに便利な機能を追加してくれます。
ここでは INF_Framework が適用されたフォーム の便利機能を、
簡単に利用できるように解説していきたいと思っています。
最新のライブラリ は次の通りです。
※ INF_Framework_第3.3版_改訂版(MkII) 基本セット for 桐9-2012 / 桐9s / 桐10 / 桐10s / 桐sSL
※ INF_Framework_第3.3版_改訂版(MkII) サンプル集 for 桐9-2012 / 桐9s / 桐10 / 桐10s / 桐sSL
ライブラリは 所定のサイト からダウンロードしてください。
※ 桐10 / 桐10s / 桐sSL で使用するには、ファイルのコンバートが必要です。 
更新日:2022年11月22日

DoubleClick(ダブルクリック)は、すべてのINF_Framework 共通の機能です。 (注)
 
(注)モダンINF_Framework、クラシックINF_Framework、NULL INF_Framework
※ MkII を含みます。またオブジェクトの種類や設定によっては機能しません。
ブルクリックを使用するには マウスクリックイベントハンドラ(プロシージャ )を作成します。
 
プロシージャ には
INFprcDoubleClickEval ( 処理対象のオブジェクト名:通常は &this でOK ,” 実行する内容 ” ) と記述します。
ある意味、これだけです (^^♪
※ テクニカルマニュアルとして 桐の釣魚大全 → フォームアプリケーション教書 第1部 の マウス左クリック、ダブルクリック を参照してください。

【基本設定】
名札メイン で 行挿入 と 行訂正 を禁止します。

名札 メイン
 変数宣言 局所, 文字列 { &mFormObjectName }
 
 &mFormObjectName = #半角( "フォーム" )
 条件 ( #変数( "INFmKnjForm" ) ) &mFormObjectName = #全角( &mFormObjectName )
 オブジェクト操作 &mFormObjectName{ 行挿入 = 0, 行訂正 = 0 }

桐9 のフォーム(.wfm)を桐コンバータで桐10sのフォーム(.wfx)へ変換した場合、
フォームのオブジェクト名は半角カタカナのままです。
一方、桐10sで新規に作成したフォーム(.wfx)ではフォームのオブジェクト名は全角カタカナになります。
 
ここではどちらの場合でも対応できるように INF_Framework の機能を使って全角、半角を切り替えています。
&mFormObjectName の値は、全角もしくは半角の ”フォーム” になります。

INF_Framework の#変数( "INFmKnjForm" ) が返す値は次の通りです。
・桐9 のフォーム(.wfm)を桐コンバータで桐10sのフォーム(.wfx)へ変換した場合には 未定義値
・桐10sで新規に作成したフォーム(.wfx)場合には 1(イチ)


<< 設定例 (サンプル集) >>

1.
” ふりがな”  が 入力されている部分をクリックすると 、”確認” が表示されるようにしてみます。
 

1‐1.
txtField_2 の マウス左クリック プロシージャ を作成します(”確認コマンド” を実行する例です)。
 








 
手続き定義開始 txtField_2::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
 手続き実行 INFprcDoubleClickEval( &this, "確認" )
手続き定義終了

 

1‐2.
項目[ふりがな]で ”くにきだ どっぽ” を ダブルクリックすると、確認用のメッセージボックス が表示されます。
 



2.
年齢で絞り込んでみましょう( 項目値は "数値" )。
 

2‐1.
txtField_5 の マウス左クリック プロシージャ を作成します(”コマンド” を実行する例です)。
 

※項目値が “数値” なので、#文字列( [年齢] ) と変換してから "絞り込み" を実行します。




手続き定義開始 txtField_5::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) }   /* &WQ の値は半角二重引用符 ( " ) となります。 */
 変数宣言 自動,文字列{ &STRbak }
 
 &STRbak = &STR
 &STR = #文字列([年齢])
 手続き実行 INFprcDoubleClickEval( &this, "絞り込み [年齢]_&STR" )  /* "実行する内容"に 自動変数は使用できません */
 &STR = &STRbak
手続き定義終了


2‐2.
項目[年齢]で ”58” を ダブルクリックすると以下のように絞り込まれます。
 



3.
[名前] をダブルクリックして お名前で絞り込んでみます。
 

3‐1.
txtField_1 の マウス左クリック プロシージャ を作成します。
3‐1‐1.
コマンドを実行する例
 




手続き定義開始 txtField_1::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) }   /* &WQ の値は半角二重引用符 ( " ) となります。 */
 変数宣言 自動,文字列{ &STRbak }
  
 &STRbak = &STR
 &STR = &WQ + [名前] + &WQ
 手続き実行 INFprcDoubleClickEval( &this, "絞り込み [名前]_&STR" )  /* "実行する内容"に 自動変数は使用できません  */
 &STR = &STRbak
手続き定義終了


3‐1‐2.
一般手続き を実行する例
 




手続き定義開始 txtField_1::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) }   /* &WQ の値は半角二重引用符 ( " ) となります。 */
 変数宣言 自動,文字列{ &STRbak }
 変数宣言 自動,文字列{ &項目名 = "名前" }
 
 &STRbak = &STR
 &STR = &項目名 + "," + #項目属性( #項目番号( &項目名 ), 0 )
 手続き実行 INFprcDoubleClickEval( &this, "手続き実行 prc絞り込み( &STR )" )  /* "実行する内容"に 自動変数は使用できません */
 &STR = &STRbak
手続き定義終了
 
手続き定義開始 prc絞り込み( 文字列 &項目名と項目値 )
 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) }   /* &WQ の値は半角二重引用符 ( " ) となります。 */
 変数宣言 自動,文字列{ &項目名 , &項目値 }
 
 &項目名 = #対応文字列 ( &項目名と項目値 , 1 ) 
 &項目値 = #対応文字列 ( &項目名と項目値 , 2 ) 
 
 &項目値 = &WQ + &項目値 + &WQ
 絞り込み &項目名 _ &項目値
手続き定義終了


3‐2.
項目[名前] ”田村 俊子” をダブルクリックすると次のように絞りんだ結果が表示されます。
 




4.
”一般手続き” を実行して ”項目値” が ”数値と文字列の両方” で利用できるようにしてみます。
 

4‐1.
名札 メイン に 変数 &m項目名 , &m項目値 , &mControl を追加しておきます。
 

名札    メイン
 変数宣言 局所, 文字列 { &mFormObjectName }
 
  &mFormObjectName = #半角( "フォーム" ) }
 条件 ( #変数( "INFmKnjForm" ) ) &mFormObjectName = #全角( &mFormObjectName )
 オブジェクト操作 &mFormObjectName{ 行挿入 = 0, 行訂正 = 0 } 
 
 変数宣言 局所,文字列{ &m項目名 , &m項目値 }
 変数宣言 局所,整数 { &mControl }


4‐2.
項目値が 文字列 の場合と、数値の場合の条件を &mControl に代入して 一般手続きのプロシージャに渡します。
4‐2‐1.
項目値が文字列の場合 のプロシージャ (ここの例では 項目[名前] にセットします)。
 

手続き定義開始 txtField_1::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) }   /* &WQ の値は半角二重引用符 ( " ) となります。 */
 変数宣言 自動,文字列{ &macro }
 &mControl = 1       /* 数値:0 , 文字列:1 */
 &m項目名 = "名前"
 &m項目値 = #項目属性( #項目番号( &m項目名 ), 0 )
 &macro = "手続き実行 prc絞り込み( &m項目名 , &m項目値 , &mControl )"   /* "実行する内容"に 自動変数は使用できません */
 手続き実行 INFprcDoubleClickEval( &this, &macro )
手続き定義終了

4‐2‐2.
項目値が数値の場合  のプロシージャ (ここの例では 項目[年齢] にセットします)。
 

手続き定義開始 txtField_5::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) }   /* &WQ の値は半角二重引用符 ( " ) となります。 */
 変数宣言 自動,文字列{ &macro }
 &mControl = 0       /* 数値:0 , 文字列:1 */
 &m項目名 = "年齢"
 &m項目値 = #文字列 ( #項目属性( #項目番号( &m項目名 ), 0 ) )
 &macro = "手続き実行 prc絞り込み( &m項目名 , &m項目値 , &mControl )"   /* "実行する内容"に 自動変数は使用できません */
 手続き実行 INFprcDoubleClickEval( &this, &macro )
手続き定義終了

4‐2‐3.
一般手続き  のプロシージャ
 

手続き定義開始 prc絞り込み( 文字列 &項目名 , 文字列 &項目値 , 整数 &control )
 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) }   /* &WQ の値は半角二重引用符 ( " ) となります。 */
 変数宣言 自動,文字列{ &表現式 }
 if ( &control = 1 )                                  /* 数値:0 , 文字列:1 */
  &表現式 = &WQ + &項目値 + &WQ
 else
  &表現式 = &項目値
 end
 絞り込み &項目名 _ &表現式
手続き定義終了


5.
編集モードにする
 
ダブルクリックを使う場合、
何も設定していないフォームを開いて項目値をクリックすると 編集モード になってしまい、ダブルクリックできません。

そこで、名札 メインで オブジェクト操作 &mFormObjectName{ 行挿入 = 0, 行訂正 = 0 } とすることで
編集モードに遷移しないようにしています。

ここでは、ダブルクリックと編集モードを両立する方法をいくつか紹介してみます。
 

5‐1.
コマンドボタンを使う方法
 




5‐2.
VK_Framework (動的なキーダウンイベント)機能を使用した例
 
フォーム起動時に VK_Framework を使って、スペースキーを押したら項目訂正モードに遷移するように設定しておく。
(フォーム起動時に設定しているので フォームの既存値になります)。
 

事前に コマンドボタンをワークスペースに準備して、フォーム開始時の実行コマンドに登録しておきます。
ここでは 機能バラメータリストに ” 手続き実行 cmdStartupClick ” をセットします。

プロシージャ cmdStartupClick の内容は以下の通りです。
手続き定義開始 cmdStartupClick( )
 手続き実行 VKprcEventKeyDownON( )
 手続き実行 VKprcKeyON( )
 手続き実行 VKprcKeySet( "スペース", 1, "0", "メソッド呼び出し &mFormObjectName.更新モード設定( 8 )" )
手続き定義終了
局所変数:文字列型の &mFormObjectName には全角または半角のオブジェクト名が代入されているとします。

桐9 のフォーム(.wfm)を桐コンバータで桐10sのフォーム(.wfx)へ変換した場合、
フォームのオブジェクト名は半角カタカナのままです。
一方、桐10sで新規に作成したフォーム(.wfx)ではフォームのオブジェクト名は全角カタカナになります。

INF_Framework では#変数( "INFmKnjForm" )を条件式に用いてどちらか判定出来ます。
詳しくは【基本設定】の項を参照してください。

   
5‐3.
ダブルクリックをテキストボックス以外のオブジェクトに設定する
 
[マウス左クリック]イベントが利用可能なオブジェクトであれば、どのオブジェクトにもダブルクリックを設定できます。
 
ここでは ”行セレクタ” に ”項目名[名前] を 絞り込む” ようにセットしてみました。
名札 メイン での オブジェクト操作 &mFormObjectName{ 行挿入 = 0, 行訂正 = 0 }  は設定しません。
 
 
手続き定義開始 行セレクタ::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) }   /* &WQ の値は半角二重引用符 ( " ) となります。 */
 変数宣言 自動,文字列{ &STRbak }
 &STRbak = &STR
 &STR = &WQ + [名前] + &WQ
 手続き実行 INFprcDoubleClickEval( &this, "絞り込み [名前]_&STR" )  /* "実行する内容"には 自動変数は使用できません  */
 &STR = &STRbak
手続き定義終了


覚書)