電卓・日付入力(WIDGET_電卓・カレンダ)

   
INF_Framework は ONnoji さん作成のフリーのライブラリです
フォームに便利な機能を追加してくれます。
ここで使用するライブラリは 所定のサイト から からダウンロードしてください。
※ 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 で使用するには、ファイルのコンバートが必要です。
更新日:2024年2月16日


シームレスに( [入力支援ボタン]を使わずに )
データ型が日付の項目では カレンダー が、
数値(通貨等)を入力する項目では電卓 機能が起動するように設定できます。

フレームワーク の ” INF_Framework.cmx , IPS_Framework.cmx , INF_MNU.kex , INF_MNU.wfx ” の4ファイルに加えて、
サンプル集(INF_Framework_2022_Secondary)に含まれている以下のファイルが必要です。
  日付入力に
  ”INF_DatePicker.wfx ,  INF_DatePicker.kex , INF_DatePicker_年月Set.wfx ,  INF_DatePicker_年月Set.kev
, INF_DatePicker_Option.wfx , INF_DatePicker_Option.kex , INF_Date年月日Set.wfx , INF_Date年月日Set.kex ” が必要です。
  電卓に
  ”INF_電卓.wfx ,  INF_電卓.kex ” の2ファイルが 必要です。

モダンINF_Framework、クラシックINF_Framework 共通

1. サンプルフォーム ” FW_Sample_モダン_現金出納帳.wfx ” を見てみましょう。
  日付入力(編集)項目で カレンダー が起動できます(サンプルの設定では Endキー ) 。
また数値(通貨等)が入力できる項目では 電卓機能が利用できるようになっています。
  ※サンプルは モダンINF_Framework です。
 オートINF_Framework を モダンINF_Framework にする手順は こちら(クリックしてください)
 
1-1. 日付を入力中(編集中)に指定した起動キーを押すと(サンプルの設定は Endキー ) カレンダー を起動できます。

   

1-2. 日付入力の項目を日時型ではなく文字列型としている場合は、自動でカレンダー起動はセットされません。
  後述の APPENDIX を参考にして、手作業でセットすることができます。
 
2. 数値(通貨)を入力してみましょう (ここでは [収入] と [支出] )です。

   

2-1. 防寒アウター 、支出項目に 2800 と入力し続けて *キー(半角入力してください)を押すと、ポップアップで電卓が起動します。
  電卓には 2800× と入力されていて 次の入力待ちの状態となります。

   

2-2. 続けて 1.1(半角)と入力します。 電卓が大きいので、縮小しておきます(サイズは覚えてくれます)

   

2-3. Enterキーを押すと計算結果が入力されました。シームレスに電卓が起動し、終了し、結果が反映されました。
※一応ですが、この例は レシートを見ながら単品ごとに表示されている金額に消費税(8%や10% 等)を追加するという想定です (^^♪

   

3. 電卓は 数値を入力する項目で入力(訂正)中に 計算キー( + - * / :半角 )を押すことで起動し 計算結果が転送されます。
  大げさに言えば 入力中の項目が、電卓の最初の数値入力画面になっているということです。
 
4. イベントファイルを見てみましょう。
4-1. 名札メインは次のようになっています。

   

【重要】 カレンダーを起動するキーはここで設定します。
 
4-2. 次は WIDGETprc電卓カレンダStartup を起動している部分です。

   

  ここでは [開始時実行]に登録した コマンドボタンから実行しています。
[cmdStartup] ボタンは標準で準備されているので、実行するプロシージャ名を確認(もしくは設定)して、
[開始時実行] コマンドボタンに cmdStartup を実行するように設定します。

   

フォームの開始時実行コマンドの登録方法についての詳細は→ こちら(クリックしてください) をご覧になってください。

 

おまけ)
サンプルフォーム ” FW_Sample_モダン_現金出納帳.wfx ”  の日付項目には 項目の表示条件が設定されています。日付が 土曜、日曜 の場合 色が変わります。

また ” FW_Sample_モダン_現金出納帳.wfx ”  は モダンINF_Framework なので ”表” で設定した 項目の表示条件 が反映されています。
※クラッシックINF_Framework を利用したフォームの場合、手順は こちら(クリックしてください)

   

  ※上図の日付はサンプルデータと異なります(サンプルデータに日曜日がなかったもので (^^♪

 


 

5. 日付・電卓を クラシックINF_Framework への適用する例。
  ※クラシックINF_Framework については→ こちら(クリックしてください) をご覧になってください。
 
5-1. フォームの定義画面です。フォーム開始時に実行するコマンドボタンを作成・登録します( ここでは "cmdStartup" ) 。

   

 

5-2. イベントファイル( kvx )の、”名札 メイン” と プロシージャ ( ”cmdStartupClick” を作成) に
サンプルの ” FW_Sample_モダン_現金出納帳.kvx ” から該当の部分をコピーします。カレンダーのトリガーも変更してみましょう。

   

 

   

5-3.

[日付]項目で カレンダー呼び出しができるようになりました。

   

5-4.

電卓機能も呼び出せるようになりました( [単価] 項目で機能します)。

   

 


付録1)

 INF_電卓の仕様メモ 2019.10.11 ( 作者 ONnoji さんのメモです )

 ※ダウンロードした INF_Framework に含まれる 1st_Spec_Memo_WIDGET_電卓・カレンダ.txt もご覧になってください。


■演算について

入力操作             補助表示

2 + = 2 ( 2 + 0 と同じ ) 計算モード 2+[?]

2 - = 2 ( 2 - 0 と同じ ) 計算モード 2-[?]

2 * = 4 ( 2 * 2 と同じ ) 計算モード 2×[2]

2 / = 1 ( 2 / 2 と同じ ) 計算モード 2÷[2]

↑これらは、手持ちのカシオの電卓と同じ動作です。

■演算子の変更

m op n  nを入力する前では、演算子:operator( + - * / ) を変更できます。

[CE]を押した時には、演算子:operator( + - * / ) を変更できます。

■定数計算

定数計算はサポートしていません。

■百分率計算
(例)
・500の5%増しを求める
 500 [+] 5 [%]

・500の5%引きを求める
 500 [-] 5 [%]

・500の5%を求める
 500 [×] 5 [%]

 


付録2) INF_Widget_電卓・カレンダ・都道府県 for 桐9-2012 / 桐9s / 桐10 / 桐10s に含まれる仕様メモ をそのまま引用。

 WIDGET_電卓・カレンダの仕様メモ.txt By ONnoji Copyright (C) 2019

 この仕様メモは[INF_Framework Rev.238]で追加された、[WIDGET_電卓・カレンダ]機能について書きとめたものです。

 [入力支援ボタン]で[INF_電卓 / INF_DatePicker]を利用する場合には、別書の[ヘルプ―INF_Widget_電卓・カレンダ・都道府県.txt]を参照してください。

 [WIDGET_電卓・カレンダ]機能を体験するには、フォーム:INF_現金出納帳 を操作してください。



 ■概要

 [INF_Framework Rev.238]では、[入力支援ボタン]使わずに[INF_電卓]と[INF_DatePicker]をシームレスにポップアップする機能が追加されました。

 この機能を[WIDGET_電卓・カレンダ]機能と呼ぶことにします。

 ―[INF_電卓]のポップアップ

 値がある数値・通貨・長整数・整数のテキストボックスで、四則演算キー[+][-][*][/]を押すと[INF_電卓]がポップアップします。
 ただし、表示モードを除きます。

 ―[INF_DatePicker]のポップアップ

 日時型のテキストボックスで任意のキーを押すと[INF_DatePicker]がポップアップします。ただし、表示モードを除きます。

 ※文字列型のテキストボックスで利用する場合には、後述のAPPENDIXを参照してください。

 キーはデフォルトで[End]キーが割り当てられています。

 【キーに指定できる文字】

 キーに指定できる文字は、以下の文字でこれは基本的にキートップの文字と同じです。(例)"End" "Shft + End" "Ctrl + End"

  BackSpace,Tab,Clear,Enter,Shift,Ctrl,Alt,Pause,CapsLock,英数,漢字,Esc,変換,無変換,
  スペース,PageUp,PageDown,End,Home,←,↑,→,↓,PrintScreen,Insert,Delete,Help
  F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12
  Windows左,Windows右,Application
  0,1,2,3,4,5,6,7,8,9,*,+,Separator,-,.,/
  NumLock,ScrollLock
  :,;,comma,-,.,/,@
  [,\,],^,-,backslash
  漢字番号,カタカナ,ひらがな,半角/全角,ローマ字

 ※これらは VK_Frammework の定数として定義されています。キーボードの種類よっては存在しないキーがあります。


 ■初期化

 Widget_電卓 の変数宣言は、[名札 メイン]で行う。

 配置位置は[標準 INF Framework 第3.2版 名札 メイン]の前後のどこでもよい。

 ―[名札 メイン]の例

 名札 メイン

  :
  :

  *---------- begin Widget_電卓・カレンダ 名札 メイン ---------------*
  ** Widget:ウィジェット パソコンのデスクトップやWebページなどで動作する小さなアプリケーションのこと
  変数宣言 局所,整数 { &WIDGETmLive = 1 }
  if ( #変数( "WIDGETmLive" ) )
   変数宣言 局所,整数 { &WIDGETmKeyDownContinue = 0, &WIDGETmSystemKeyDownContinue = 0 } /* 継続フラグ */
   変数宣言 局所,整数 { &WIDGETmControlEventType } /* WIDGETprcFieldPopupEval の参照引数 キーダウン:1 システムキーダウン:2 */
   変数宣言 局所,文字列{ &WIDGETm電卓項目FieldList }
   変数宣言 局所,数値 { &WIDGETm電卓計算結果 }/* 変数受け渡しパラメータ */
   変数宣言 局所,数値 { &WIDGETmSendVal }  /* 変数受け渡しパラメータ */
   変数宣言 局所,文字列{ &WIDGETmSendOperator }/* 変数受け渡しパラメータ */

   変数宣言 局所,文字列{ &WIDGETmカレンダFieldList, &WIDGETmTriggerKey }
   変数宣言 局所,文字列{ &WIDGETmカレンダ結果 }/* 変数受け渡しパラメータ */
   変数宣言 局所,日時 { &WIDGETmSendDate } /* 変数受け渡しパラメータ */
   &WIDGETmTriggerKey = "End" /* 指定例 "Shift + End" "Ctrl + End" など。カレンダをポップアップするキー操作(トリガー)※注意:表示モードでは動作しません */
  end
  *---------- end Widget_電卓・カレンダ 名札 メイン ---------------*

  :
  :

 *


 ■スタートアップ

 Widget_電卓 のスタートアップは、WIDGETprc電卓Startup( ) で行う。

 WIDGETprc電卓Startup( )は、編集対象表の項目を調査するので、[フォーム開始]イベントハンドラ以降であればどのタイミングでもよい。
 ※つまり、編集対象表が開いていない[名札 メイン]では実行できない。

 以下は、[開始時実行コマンド]に指定したコマンドオブジェクト:cmdStartup から実行した例である。

 ―[開始時実行コマンド]の例

 手続き定義開始 cmdStartupClick( )

  :
  :

  *---------- begin Widget_電卓・カレンダ -----------------*
  条件 ( #変数( "WIDGETmLive" ) ) 手続き実行 WIDGETprc電卓カレンダStartup( )
  *---------- end Widget_電卓・カレンダ -----------------*

  :
  :

 手続き定義終了




 ―APPENDIX     ********** ********** **********


 ■文字列型のフィールドでカレンダーのポップアップを設定する

 [Widget_電卓・カレンダ]は、次のようにスタートアップします。

 手続き定義開始 cmdStartupClick( )
  変数宣言 自動,文字列{ &icon, &title = "cmdStartupClick( )", &msg }

  *---------- begin Widget_電卓・カレンダ  -----------------*
  条件 ( #変数( "WIDGETmLive" ) ) 手続き実行 WIDGETprc電卓カレンダStartup( )
  *---------- end  Widget_電卓・カレンダ  -----------------*

  *----- begin 幅を狭くしてフォームスクロールバーが現れ難くする -----*
  :
  :
  *----- end  幅を狭くしてフォームスクロールバーが現れ難くする -----*

 手続き定義終了

 WIDGETprc電卓カレンダStartup によって、電卓とカレンダーがポップアップする対象のオブジェクトが自動的に探索されて、

 (例)&WIDGETm電卓項目FieldList … "txtField_4,txtField_5" ※ソースが基本項目の数値系テキストオブジェクト
 (例)&WIDGETmカレンダFieldList … "txtField_1"       ※ソースが基本項目の日時型テキストオブジェクト

 ↑の例のように、半角コンマで区切ったフィールドのリストが生成されます。

 ◇ ◇ ◇ ◇ ◇ ◇

 しかし、文字列型のデータで日付を管理している場合もあります。

 その場合には、次のようにして &WIDGETmカレンダFieldList にオブジェクト名を追加して、WIDGETprcFieldPopupEval を実行します。

 ―オブジェクト名:txtField_8 を追加する例

 &WIDGETmカレンダFieldList = &WIDGETmカレンダFieldList + ",txtField_8" /* 半角コンマ + オブジェクト名 */

 手続き実行 WIDGETprcFieldPopupEval( &EZWmFocusField, &WIDGETmControlEventType )

 ※WIDGETprcFieldPopupEval を実行するのは、キーダウンイベントを再セットするためです。

 ―設定例

 手続き定義開始 cmdStartupClick( )
  変数宣言 自動,文字列{ &icon, &title = "cmdStartupClick( )", &msg }

  *---------- begin Widget_電卓・カレンダ  -----------------*
  条件 ( #変数( "WIDGETmLive" ) ) 手続き実行 WIDGETprc電卓カレンダStartup( )
  *---------- end  Widget_電卓・カレンダ  -----------------*


  ** ↓の例は txtField_8 をカレンダーがポップアップする対象に追加する

  *---------- begin &WIDGETmカレンダFieldList にオブジェクト名を追加  -----------------*
  &WIDGETmカレンダFieldList = &WIDGETmカレンダFieldList + ",txtField_8" /* 半角コンマ + オブジェクト名 */

  手続き実行 WIDGETprcFieldPopupEval( &EZWmFocusField, &WIDGETmControlEventType ) /* キーダウンイベントを再セット */
  *---------- end  &WIDGETmカレンダFieldList にオブジェクト名を追加  -----------------*


  *----- begin 幅を狭くしてフォームスクロールバーが現れ難くする -----*
  :
  :
  *----- end  幅を狭くしてフォームスクロールバーが現れ難くする -----*

 手続き定義終了


 ■[キーダウン]イベントの継続

 [キーダウン]イベントをオフにしたくない場合には、継続フラグをオンにします。

  *---------- begin Widget_電卓・カレンダ 名札 メイン ---------------*
  ** Widget:ウィジェット パソコンのデスクトップやWebページなどで動作する小さなアプリケーションのこと
  変数宣言 局所,整数 { &WIDGETmLive = 1 }
  if ( #変数( "WIDGETmLive" ) )
   :
   :
   :
  end
  *---------- end  Widget_電卓・カレンダ 名札 メイン ---------------*

  &WIDGETmKeyDownContinue    = 1 /* [キーダウン]イベントを継続     */
  &WIDGETmSystemKeyDownContinue = 1 /* [システムキーダウン]イベントを継続 */

以上