電卓機能 (WIDGET_電卓) & 日付入力
電卓機能(WIDGET_電卓)は INF_Framework 第3.2版 Rev.238 で追加されました。
※INF_Framework 第3.2版 Rev.238 の公開は終了しています。
自動的に データ型が日付の項目では カレンダー が、数値(通貨等)を入力する項目では電卓 機能が起動できるように 設定されます。
独立した電卓アプリとは考えないでください(入力、訂正 つまり編集中に数値入力項目からシームレスに電卓へ移行し戻ってきます)。
” INF_電卓.wfx , INF_電卓.kex ” の2ファイルが フレームワークに追加して必要です。
また 日付入力に ” INF_DatePicker.wfx , INF_DatePicker.kex ,
INF_DatePicker_年月Set.wfx , INF_DatePicker_年月Set.kev ” が必要です。
モダンINF_Framework、クラシックINF_Framework 共通
〇サンプルフォーム『INF_現金出納帳』を見てみましょう。
*サンプルは モダンINF_Framework です。オートINF_FrameworkをモダンINF_Frameworkにする手順は
こちら(クリックしてください)。
・日付を入力中(編集中)に指定した起動キーを押すと(サンプルの設定は Endキー ) カレンダー を起動できます。
・サンプルフォームを起動すると、INF_Framework が自動的に 日付入力(編集)項目で カレンダー が起動できるように設定します。
同様に数値(通貨等)が入力できる項目には電卓機能が利用できるように自動的に設定します。ここでは、次の [収入] [支出] です。
→ 日付入力の項目を日時型ではなく文字列型としている場合は、自動でカレンダー起動はセットされません。
後述の APPENDIX を参考にして、手作業でセットすることができます。
・サンプルに数値(通貨)を入力してみましょう。
防寒アウター 、支出項目に 2800 と入力し続けて *キー(半角入力してください)を押すと、ポップアップで電卓が起動します。
電卓には 2800× と入力されていて 次の入力待ちの状態となっています。
続けて 1.1(半角)と入力します。 電卓が大きいので、縮小しておきます(サイズは覚えてくれます)
Enterキーを押すと計算結果が入力されました。シームレスに電卓が起動し、終了し、結果が反映されました。
*一応ですが、この例は レシートを見ながら単品ごとに表示されている金額に消費税(8%や10%)を追加するという想定です。
--------------------
・電卓は 数値を入力する項目で入力(訂正)中に 計算キー( + - * / :半角 )を押すことで起動し 計算結果が転送されます。
・大げさに言えば 入力中の項目が、電卓の最初の数値入力画面になっているということです。
☆それではイベントファイルを見てみましょう。
・名札メインは次のようになっています。
◎カレンダーを起動するキー操作は、ここで設定します。電卓の起動キー以外を指定してください。
*カレンダーの起動キー以外に設定できるオプションはありません。
----------------
・次は WIDGETprc電卓カレンダStartup を起動している部分です。
ここでは [開始時実行]コマンドボタンから実行しています。
サンプルの コマンドボタンをコピーして、[開始時実行]コマンドボタンに cmdStartup を実行するように設定するだけでOKです。
* フォームの開始時実行コマンドの登録方法についての詳細は→ こちら(クリックしてください) をご覧になってください。
おまけ)
サンプルの 表:INF現金出納帳 の日付項目には 項目の表示条件が設定されています。日付が 土曜、日曜 の場合 色が変わります。
またサンプルフォーム『INF_現金出納帳』はモダンINF_Framework を利用しているので表で設定した 項目の表示条件 が反映されています。
※クラッシックINF_Framework を利用したフォームの場合、手順は
こちら(クリックしてください)。
〇 クラシックINF_Framework への適用例です。
* クラシックINF_Framework については→ こちら(クリックしてください) をご覧になってください。
このサンプルではフォーム起動時に [日付]項目に カレンダー呼び出しができるようにセットされます。
このサンプルではフォーム起動時に [単価]項目に電卓機能が呼び出せるようにセットされます。
・フォームの定義画面です。
・イベントでの適用部分です。ここでは カレンダーが Homeキー で起動するように設定してみました。
他の部分は、先に説明した サンプル『INF_現金出納帳』と全く同一です。
付録1)
INF_電卓の仕様メモ 2019.10.11 ( 作者 ONnoji さんのメモです )
■演算について
入力操作 補助表示
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 /* [システムキーダウン]イベントを継続 */
以上