■記事リスト / ▼下のスレッド
■653 / 親記事) |
日付入力のイベントハンドラ
|
□投稿者/ ONnoji -(2025/09/04(Thu) 12:23:33)
| 2025/09/05(Fri) 00:46:06 編集(投稿者)
ジェダイの桐さんへ
> 当方は現在、日時型の場合を研究しています。prcDateAccept というところです。(^^ゞ > 完成したらこの掲示板に投稿します。
プロトタイプが一応完成しました。
test_prototype_dateAccept_02.zipを解凍すると以下の4つのファイルがあります。
test_prototype_dateAccept_02.kex test_prototype_dateAccept_02.tbx test_prototype_dateAccept_02.wfx test_prototype_dateAccept_02_test_prototype_dateAccept_02_info.txt
是非そちらで試していただいて、ご意見・ご感想をよろしくお願いいたします。m(__)m
なお、日時型のテキストボックス:txt日時 は、[環境設定]の[日時型の形式]のフォーマットで表示されます。
文字列型のテキストボックス:txt文字列 は、デフォルトでは[環境設定]の[日時型の形式]のフォーマットで表示されますが、
[名札 メイン]で &mDateAcceptDateTypeNum = 0, &mDateAcceptPaddingTypeNum を宣言するとフォーマットが変更できます。
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
名札 メイン
** prcDateAccept( ) で日付を文字列型項目(または変数)で扱う時のオプション変数 ** "日付文字の表示形式" と "日付文字の数値の表示"のデフォルト値は "0:環境設定と同じ" ですが、 ** 以下の↓変数宣言コマンドの先頭のコメント( ** )を削除すると有効になり任意のスタイルに変更できます ** 変数宣言 局所,整数 { &mDateAcceptDateTypeNum = 0, &mDateAcceptPaddingTypeNum = 0 } ** 日付を日時型項目(または変数)で扱う場合には、[環境設定]または[テキスト]オブジェクトの属性で指定してください ** ------------------------------------------------- ** 表示形式を指定します。自動変数/整数/ &dateTypeNum **値 戻り値 ** 0 環境設定と同じ形式 ← デフォルト:&dateTypeNum / prcDateAccept( ) ** 1:2019年 7月25日 ( 13時23分45秒 ) 2:2019年 7月25日 ( 午後 1時23分45秒 ) 3:令和1年 7月25日 ( 13時23分45秒 ) ** 4:令和1年 7月25日 ( 午後 1時23分45秒 ) 5:R 1/ 7/25 ( 13:23:45 ) 6:R 1/ 7/25 ( 1:23:45 PM ) 7:R 1- 7-25 ( 13:23:45 ) ** 8:R 1- 7-25 ( 1:23:45 PM ) 9:2019/ 7/25 ( 13:23:45 ) 10:2019/ 7/25 ( 1:23:45 PM ) 11:2019- 7-25 ( 13:23:45 ) ** 12:2019- 7-25 ( 1:23:45 PM ) 13:19/ 7/25 ( 13:23:45 ) 14:19/ 7/25 ( 1:23:45 PM ) 15:19- 7-25 ( 13:23:45 ) ** 16:* 19- 7-25 ( 1:23:45 PM ) 17:Jul 25,2019 ( 13:23:45 ) 18:* 7/25/2019 ( 13:23:45 ) 19:25 Jul 2019 ( 13:23:45 ) ** 20:* 25/ 7/2019 ( 13:23:45 ) 21:2019. 7.25 ( 13:23:45 ) ** [mm/dd/yyyy] または [dd/mm/yyyy] の表示形式を選択すると、日時関数で計算できない日時文字列になりますので、注意してください。 ** ------------------------------------------------- ** 数値の表示を指定します。自動変数/整数/ &paddingTypeNum **値 戻り値 ** 0 環境設定と同じ ← デフォルト:&paddingTypeNum / prcDateAccept( ) ** 1 空白詰め ** 2 ゼロ詰め ** 3 詰めなし ** -------------------------------------------------
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
<入力方法>
年 月 日 をハイフン/スラッシュ/ドット/空白文字などで区切って入力してください。
先頭の数字が 1 から 12 ⇒ 当年(2025年)と見做し月を指定したことになります 先頭の数字が 13 から 99 ⇒ 2000年を加算します 先頭の数字が 4桁 ⇒ 年として扱います( ただし 1945 から 2099 の範囲外はエラーになります )
先頭に元号を付けることも出来ます
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
■ test_prototype_dateAccept_02.wfx
フォーム ├ ファミリ │ └ famModernUI ├ ワークスペース │ ├ INFtxtCommon │ ├ INFcmdCommon │ ├ cmdStartup │ └ cmdTest ├ フォーム操作バー ├ フォームヘッダ部 │ ├ lblFlatButtonBorder_1 │ ├ EZWcmdズームイン │ ├ EZWcmdズームアウト │ ├ EZWtxtMagnification │ ├ INFcmdWhoAreYou │ ├ HDLVARcmdWhoAreYou │ ├ ONEcmdUI変換 │ └ chk項目値を範囲選択する │ └ lbl項目値を範囲選択する ├ フォーム明細部 │ ├ txt文字列 │ │ └ lbl文字列 │ ├ txt日時 │ │ └ lbl日時 │ ├ txt長整数 │ │ └ lbl長整数 │ ├ txt数値 │ │ └ lbl数値 │ ├ txt通貨 │ │ └ lbl通貨 │ └ lblFlatButtonBorder_2 └ フォームフッタ部 └ lblFlatButtonBorder_3
p.s.
手続き:prcDateTestYear( ) 修正箇所 ※この修正は必須ではありません
599行め(54行め) 修正前 ケース ( #対応番号( "S,s,昭和,昭", &prefix ) <> 0 ) 修正後 ケース ( #対応番号( "S,s,S,s,昭和,昭", &prefix ) <> 0 ) 606行め(61行め) 修正前 ケース ( #対応番号( "H,h,平成,平", &prefix ) <> 0 ) 修正後 ケース ( #対応番号( "H,h,H,h,平成,平", &prefix ) <> 0 )
613行め(68行め) 修正前 ケース ( #対応番号( "R,r,令和,令", &prefix ) <> 0 ) 修正後 ケース ( #対応番号( "R,r,R,r,令和,令", &prefix ) <> 0 )
631行め(86行め) 修正前 &errorMsg = &errorMsg + "\n\n <ヒント>" 修正後 **&errorMsg = &errorMsg + "\n\n <ヒント>"
|
|
|
▽[全レス14件(ResNo.10-14 表示)]
■663 / ResNo.10) |
Re[10]: 日付入力のイベントハンドラ
|
□投稿者/ ONnoji -(2025/09/13(Sat) 11:40:37)
| 2025/09/13(Sat) 11:54:18 編集(投稿者)
ジェダイの桐さんへのお返事です
> 数値型 通貨型 の 入力フィールド に > 99999999999999999999999999999999999999999999999( これこそユーザーは入力する事が無いと思いますが・・・ ) > と入力すると > > KU1030:演算中に桁あふれが発生しました 行番号 980 > と共に桐側のアナウンスが流れました。 > 一応、報告しますm(__)m
フィードバックありがとうございます。m(__)m
手続き名:IMTDprcNumAccept( ) の
&string = #str( #num( &string ) )
↑この部分で #数値( 別名:#num )関数の計算中に桁あふれが生じたということですね。 ・・・・・・・・・・・・・・・・・・・・・・・・・・
:prototype_IMTD_02.wfx hdl= 1>IMTDprcNumAccept( )を実行開始しました :&objectName : txt数値 &dataType : 数値 &source : [数値型] :( #対応番号( &dataTypeList, &dataType ) <> 0 ) : 1 :&string : 99999999999999999999999999999999999999999999999 :&dataType : 数値 &source : [数値型] エラー :KD1570:計算中に桁あふれが生じました 関数 : #数値(D:\kiri10s\dl_conv_INF_Framework_2022_Secondary\prototype_IMTD_02.tbx ) エラー :KU1030:演算中に桁あふれが発生しました(D:\kiri10s\dl_conv_INF_Framework_2022_Secondary\prototype_IMTD_02.kex 980行目)
まあ、これは仕方が無い事ですね。
&string : 99999999999999999999999999999999999999999999999 は46桁の文字列 で、
この場合、9.999999999999999E46 は 有効桁数:16 桁 の指数表示になる
のですが・・・
[桐 - ヘルプ] データ型 ▽数値 数値とプラスマイナス符号、小数点、指数記号(Eまたはe)が入力できます。 扱える値の範囲は±10の124乗です(有効桁数:16 桁)。 JAN、ITF、物流コードのバーコードデータは、このデータ型で扱うことができます。
ということで、やるとすれば、16桁以上の整数は事前にエラーにする位ですかねぇ〜?
でも、そこまで気を遣う必要なないと思いますよ。(^^ok
p.s.
コンピュータでの数値演算には、二進演算と二進化十進演算があります。
桐の整数・長整数・数値・通貨は二進化十進演算で、演算誤差がありません。
しかし、桐の実数型は二進演算なので、小数を含む演算をすると誤差が生じますので使わないようにしてください。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
以下の過去ログもご一読ください。
コチラ ↓ エクセルで計算結果エラー|桐質問のほかの掲示板 過去ログより http://tayu.o0o0.jp/bbs/kiri/cbbs.cgi?mode=al2&namber=1312&no=1
p.p.s.
<参考>
[桐 - ヘルプ] データ型
桐では、データの種類に応じて9種類のデータ型を用意しています。
▽文字列 氏名や電話番号、商品名など、文字列を扱うデータ型です。画像ファイル名やバーコードも、このデータ型を使用します。 最大8000文字を扱うことができます(※注意:ただし、索引の整列項目は2000文字までです)。
▽数値 数値とプラスマイナス符号、小数点、指数記号(Eまたはe)が入力できます。 扱える値の範囲は±10の124乗です(有効桁数:16 桁)。 JAN、ITF、物流コードのバーコードデータは、このデータ型で扱うことができます。
▽通貨 基本的に数値型と同じです。表の中では3桁ごとの位取りコンマで区切って表示されます。
▽整数 -32768〜32767の整数を扱うときに使用します。小数点以下の数値は扱えません。
▽長整数 -2147483648〜2147483647の整数を扱うときに使用します。小数点以下の数値は扱えません。
▽実数 科学計算や外部データベースとの互換のために設けられたデータ型です。 数値とプラスマイナス符号、小数点、指数記号(Eまたはe)が入力できます。 扱える値の範囲は±1.79769313486231e+308です(有効桁数:15〜16桁)。 実数型の演算は、常に誤差が生じる可能性があるため、お金などを扱うデータ型としては適しません。 ・・・・・・・・・・・・・・・・・・・・・・ 通常、扱う数値を格納する項目は、数値型または通貨型を使用してください。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
|
|
|
■664 / ResNo.11) |
Re[11]: 日付入力のイベントハンドラ
|
□投稿者/ ONnoji -(2025/09/17(Wed) 13:15:58)
| 2025/09/17(Wed) 14:21:23 編集(投稿者)
prototype_IMTD_02.zip を解凍すると以下の4つのファイルがあります。
prototype_IMTD_02.kex prototype_IMTD_02.tbx prototype_IMTD_02.wfx prototype_IMTD_02_prototype_IMTD_02_info.txt
実行するには INF_Framework が必要です。
◇ ◇ ◇ ◇ ◇ ◇ ◇
以下、4つの手続きの該当箇所が修正されています
■手続き名:IMTDprcDateAccept( )
× 変数宣言 自動,整数 { &num } 〇 変数宣言 自動,数値 { &num }
× 変数宣言 自動,整数 { &year, &month, &day } 〇 変数宣言 自動,数値 { &year, &month, &day }
■手続き名:IMTDprcDateTestYear( )
× 手続き定義開始 IMTDprcDateTestYear( ・・・, 参照 整数 &year, ・・・ )
〇 手続き定義開始 IMTDprcDateTestYear( ・・・, 参照 数値 &year, ・・・ ) ・・
■手続き名:IMTDprcDateTestMonth( )
× 手続き定義開始 IMTDprcDateTestMonth( ・・・, 参照 整数 &month, ・・・ )
〇 手続き定義開始 IMTDprcDateTestMonth( ・・・, 参照 数値 &month, ・・・ ) ・・
■手続き名:IMTDprcDateTestDay( )
× 手続き定義開始 IMTDprcDateTestDay( ・・・, 整数 &num, 参照 整数 &day, ・・・ ) 〇 手続き定義開始 IMTDprcDateTestDay( ・・・, 数値 &num, 参照 数値 &day, ・・・ ) ・・ ・・
|
|
 prototype_IMTD_02.zip/52KB
|
|
■665 / ResNo.12) |
Re[12]: 【イベント処理】他の表を操作する
|
□投稿者/ ONnoji -(2025/09/19(Fri) 08:07:32)
| 2025/09/19(Fri) 09:27:20 編集(投稿者)
「一括処理(.cmx)」と「フォーム(.wfx)+イベント処理(.kex)」は、180度反対方向に顔を向けたプログラミングスタイルです。 ・・・・・・・・・・・・・・・・・・・・・・・・・ すなわち、[フロー駆動]対[イベント駆動]という違いです。 ・・・・・・・・・・・・・・・・・・・・・
これは、[DOS桐一括処理との互換および拡張]対[Windows的なプログラミングスタイル]という際立った違いです。
ということで、両方を同時に扱うと頭の中が混乱しますし、今さらDOS桐的な事を行う意味もありません。 ・・・・・・・・・・・・・・・・・・・・・
従って、「フォーム+イベント処理」の一本でプログラミングを進める事をお勧めします。(^^ok
[桐 - ヘルプ]にかなり誤解されるような内容が見つかりましたので以下に添削しました。
◇ ◇ ◇ ◇ ◇ ◇ ◇
[桐 オンラインヘルプ]より
一括処理・履歴・イベント > 入門 > イベント処理 > 他の表を操作する
【イベント処理】他の表を操作する ------------------------------------------------------------------------------ △ イベントハンドラの中から、フォームの対象表以外の表を操作することができます。 〇 イベントハンドラと一般手続きの中から、フォームの対象表以外の表を操作することができます。 ------------------------------------------------------------------------------ △ 表を開くには[表]コマンドを使用します。 〇 表を開くには[表]コマンドを使用しますが、ウィンドウとして表示されるわけではありません。 ------------------------------------------------------------------------------ × イベントハンドラとメイン処理のどちらでも、表を開くことができます。 〇 イベントハンドラと一般手続きとメイン処理のどちらでも、表を開くことができます。 ------------------------------------------------------------------------------ × イベントハンドラの中でしか使用していない表は、フォームを閉じたときに一緒に閉じられます (ただし、一括処理実行中であれば、フォームを閉じた後も表は開かれたまま残ります)。 〇 イベントハンドラと一般手続きとメイン処理の中でしか使用していない表は、フォームを閉じたときに一緒に閉じられます (ただし、一括処理実行中であれば、フォームを閉じた後も表は開かれたまま残ります)。 ------------------------------------------------------------------------------ × フォームを閉じたあとも表を開いておきたい場合は、[ウィンドウ作成]コマンドを使用して、ウィンドウを作成しておきます。 〇 フォームを閉じたあとも表を開いておきたい場合は、[ウィンドウ作成]コマンドまたはコマンドボタンの機能名:開くでウィンドウを作成しておきます。 ------------------------------------------------------------------------------ △ 開かれている表を操作するときは、[編集表]コマンドを使用して、編集対象表を切り替えます。 〇 開かれている表を操作するときは、[編集表]コマンドを使用して、編集対象表を切り替えます。 ただし、編集表の表ウィンドウが存在した場合でもフォーカスが移動するわけではありません。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ ------------------------------------------------------------------------------ × イベントハンドラが実行されるときは、編集対象表はつねにフォームの対象表になります。 対象表がないフォームでは、編集対象表がない状態になります。前回実行したときの編集対象表にならないことに注意してください。 〇 イベントハンドラとコマンドボタンの機能名が実行されるときは、編集対象表はつねにフォームの対象表になります。 編集対象表を変更するときには、編集表コマンドを使用します。 対象表がないフォームでは、編集対象表がない状態になります。 ------------------------------------------------------------------------------ 〇 フォームの編集対象表をもうひとつ開きたい場合は、[多重化]コマンドを使用します。 このコマンドを使用することで、開かれている表の編集状態を、そのままにしておくことができます。 ------------------------------------------------------------------------------ × 画面に表示されている表を、イベントハンドラの中で操作すると、その操作に応じてウィンドウも更新されます。 たとえば別のフォームの対象表を絞り込むと、それに応じて、フォームのウィンドウが更新されます。 〇 画面に表示されている表を、イベントハンドラまたは一般手続きの中で操作すると、その操作に応じてウィンドウも更新されます。 たとえば別のフォームの対象表を絞り込むと、それに応じて、フォームのウィンドウが更新されます。 ------------------------------------------------------------------------------ × イベントハンドラの中で[ウィンドウ終了]コマンドを実行すると、ウィンドウだけでなく、表も閉じられます (ただし、一括処理実行中であれば、フォームを閉じた後も表は開かれたまま残ります)。 〇 イベントハンドラの中で[ウィンドウ終了]コマンドを実行すると、ウィンドウだけでなく、表も閉じられます 閉じる表が「バックアップ取る」の場合には、保存するかを確認するメッセージボックスが表示されます。 しかし、閉じる表が「バックアップ取らない」の場合では、行訂正・行挿入等の更新中の行のデータは失われますので、 閉じる表がを必ず表示状態にしてから[ウィンドウ終了]コマンドを実行します この場合の対策としては、[ウィンドウ終了]コマンドの替わりに、表ウィンドウの[×]ボタンを直接操作することを強く推奨します。 (ただし、一括処理実行中であれば、フォームを閉じた後も表は開かれたまま残ります)。 ------------------------------------------------------------------------------ × ウィンドウが割り当てられている表を、[終了]コマンド、[中止]コマンド、[表]コマンドで閉じることはできません。 [ウィンドウ終了]コマンドを使用して、表とウィンドウの両方を閉じてください。 〇 ウィンドウが割り当てられている表を、[終了]コマンド、[中止]コマンド、[表]コマンドで閉じることはできません。 [ウィンドウ終了]コマンドを使用して、表とウィンドウの両方を閉じてください。 閉じる表が「バックアップ取る」の場合には、保存するかを確認するメッセージボックスが表示されます。 しかし、閉じる表が「バックアップ取らない」の場合では、行訂正・行挿入等の更新中の行のデータは失われますので、 閉じる表がを必ず表示状態にしてから[ウィンドウ終了]コマンドを実行します この場合の対策としては、[ウィンドウ終了]コマンドの替わりに、表ウィンドウの[×]ボタンを直接操作することを強く推奨します。
p.s.
以下は余談です。
Google 検索 のAIモードの方が、Microsoft Copilot よりもマシであったという話。
> イベントドリブン方式: ユーザーの操作やシステムの状態変化(イベント)をきっかけに、対応するプログラムが実行される「イベントドリブン」と呼ばれるプログラミング手法です。
AIが分っているところがエライ!
> イベントファイル(.kev): イベント処理のプログラムは、通常、フォーム名と同じ名前の拡張子「.kev」のファイルに記述します。
これもエライ!
> イベント処理は各オブジェクトに紐づいたプログラムを記述するオブジェクト指向的な考え方に基づいています。 ・・・・・・・・・・・・・ オブジェクト指向と断定しない所がエライ!
◇ ◇ ◇ ◇ ◇ ◇
Aiモード データベース桐 イベント処理 - Google 検索
データベース桐 イベント処理
データベース「桐」におけるイベント処理は、フォーム上のオブジェクト(ボタン、入力欄など)に対するユーザーの操作や、 フォーム自体の状態変化に応じて特定のプログラム(手続き)を実行する仕組みです。 これにより、より対話的で柔軟なデータベースアプリケーションを構築できます。
イベント処理の概要
・イベントドリブン方式: ユーザーの操作やシステムの状態変化(イベント)をきっかけに、対応するプログラムが実行される「イベントドリブン」と呼ばれるプログラミング手法です。 ・イベントファイル(.kev): イベント処理のプログラムは、通常、フォーム名と同じ名前の拡張子「.kev」のファイルに記述します。 ・一括処理との違い: MS-DOS時代からの「一括処理」が上から順に実行する手続き型プログラムであるのに対し、イベント処理は各オブジェクトに紐づいたプログラムを記述するオブジェクト指向的な考え方に基づいています。
イベント処理の定義方法 1.フォームを開く: イベントを定義したいフォームをデザインモードで開きます。 2.オブジェクト属性を表示: フォーム上のオブジェクトをダブルクリックするか、右クリックで「属性」を選択して、プロパティ画面を表示します。 3.イベントタブを選択: プロパティ画面の「イベント」タブをクリックします。 4.イベントを定義: 定義したいイベント(例: マウス左クリック、入力後、レコード移動など)を選択してダブルクリックします。 5.プログラムを記述: 手続き定義画面が表示されるので、手続き定義開始 と 手続き定義終了 の間に実行させたい一括処理コマンドを記述します。
イベントの例 フォームで利用できる主なイベントには、以下のようなものがあります。 ・フォームイベント: ・フォーム開始: フォームを開いたときに実行されます。 ・フォーム終了: フォームを閉じたときに実行されます。 ・オブジェクトイベント: ・マウス左クリック: ボタンなどがクリックされたときに実行されます。 ・入力後: 入力欄にデータを入力し終えたときに実行されます。 ・レコード移動: レコードが移動したときに実行されます。
関連情報
・一般手続きの呼び出し: 多数のイベントで同じ処理を記述する必要がある場合、イベントプロシージャから共通の「一般手続き」を呼び出すことで、効率的にプログラミングできます。
・参考資料: 管理工学研究所のヘルプサイトや、有志によるブログ、YouTube動画などで、具体的なイベント処理の記述方法やサンプルコードが公開されています。 AI の回答には間違いが含まれている場合があります。 詳細 ・・・・・・・・・・・・・・・・・・・・・・・・
|
|
|
■666 / ResNo.13) |
Re[13]: 【イベント処理】他の表を操作する
|
□投稿者/ ジェダイの桐 -(2025/09/19(Fri) 09:41:55)
| ONnojiさん
おはようございます!
最近ふと思う事がありました。
フォーム + イベント を作るまでではない処理 .and ユーザーはある程度桐の操作に慣れている
この前提があった上でですけど、表にコマンドボタンが作れればいいのになぁって思ったんです。
疑似的に履歴の実行をコマンドボタンに見立てる事が出来ないか? と思って、一括処理の文法を 想像 .and 調べながら 作ってみました(^^ゞ
----------------------------------------------------------------------------------
変数宣言 固有, 整数 { &g絞り込み状態 = #u, &gAns = #u, &gReturn = #u, &g対応番号 = #u } 変数宣言 固有, 文字列 { &gTitle = "【 履歴の実行 】科目置換Click", &gMsg = #u, &g入力日 = #u, &g編集属性式 = #u }
使用フォーム 条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
&gReturn = 1 手続き実行 編集属性chk
&g絞り込み状態 = #絞り込み状態 if ( &g絞り込み状態 <> 0 ) &g入力日 = #日時文字列( [入力日], 13, 1, 3 ) &gMsg = #条件選択( &g入力日, "項目名 [ 入力日 ] " + &g入力日 + " " + "の" + " ", 1, #u ) + "科目置換を行います " &gMsg = &gMsg + "\n\nよろしいですか?" メッセージボックス &gTitle, &gMsg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &gAns
if ( &gAns = 1 ) 併合 条件名 = "科目置換", 終了状態 = &gReturn if ( &gReturn = 1 ) 検索 [勘定科目] { = #u }, 文字比較方法 = 自動, 部分一致検索 = しない, 自動調整 = しない, 終了状態 = &gReturn if ( &gReturn = -1 ) &gMsg = #条件選択( &g入力日, "項目名 [ 入力日 ] " + &g入力日 + " " + "の" + " ", 1, #u ) + "科目置換が " &gMsg = &gMsg + "\n\n正常終了しました" メッセージボックス &gTitle, &gMsg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する, &gAns
else &gReturn = 0 手続き実行 編集属性chk
&gMsg = #条件選択( &g入力日, "項目名 [ 入力日 ] " + &g入力日 + " " + "の" + " ", 1, #u ) + "項目名 [ 勘定科目 ] に " &gMsg = &gMsg + "\n\n未定義レコードがあります" &gMsg = &gMsg + "\n\n工場仕入科目一覧.TBX のマスタを 修正 or 新規登録 して再度実行してください " メッセージボックス &gTitle, &gMsg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する, &gAns
end
else &gMsg = "何らかの理由で 勘定科目 の併合がエラー終了しました " &gMsg = &gMsg + "\n\n原因を探る or 桐に詳しい人に状況を伝えて解決してください " メッセージボックス &gTitle, &gMsg, アイコン = e, ボタン指定 = 1, 制御文字展開 = する, &gAns
end
end else &gMsg = "項目名 [ 入力日 ] の入力日が複数あります " &gMsg = &gMsg + "\n\n勘定科目を置換する 入力日のみ を絞り込んでから、再度履歴の実行を行ってください " メッセージボックス &gTitle, &gMsg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する, &gAns
end
終了
名札 編集属性chk
&g編集属性式 = #trim( #半角( #項目表示条件( #項目番号( "勘定科目" ), 10 ) ), 4 ) &g対応番号 = #対応番号( &g編集属性式, #trim( #半角( "( .not [勘定科目]) CB26" ), 4 ) )
if ( &gReturn .and ( &g対応番号 <> 0 ) ) 表示条件読み込み 条件名 = "ok勘定科目ON", 開始条件 = 無効 else if ( .not &gReturn ) 表示条件読み込み 条件名 = "err勘定科目ON", 開始条件 = 無効 end
手続き終了
----------------------------------------------------------------------------------
履歴名を 科目置換Click と名付け コマンドボタンと見做してみました。 一応 意図した挙動になりましたが・・・
固有 .or 共通 変数しか宣言出来ない 名札を作っても、その履歴の中でしか使えない( ライブラリが使えるかな?と思いましたが、イベントファイルのメイン部用のコマンドでした(^^ゞ ) 名札をコールしても 引数 が使えない(T_T)
うーん。前提が前提なだけに、実験としては成功なんですが、気持ちとしては上記3点があるので積極的に履歴を作らないだろうと思いましたm(__)m 引数が使えなのがちょっと・・・ 自分ならスコープ事故を起こすだろうなと思いました。
----------------------------------------------------------------------------------
> 「一括処理(.cmx)」と「フォーム(.wfx)+イベント処理(.kex)」は、180度反対方向に顔を向けたプログラミングスタイルです。 > ・・・・・・・・・・・・・・・・・・・・・・・・・ > すなわち、[フロー駆動]対[イベント駆動]という違いです。 > ・・・・・・・・・・・・・・・・・・・・・
○○.CMX を記述するって事は、本当に額面通り 一括処理 なんですね(^^ゞ 実験を通じて、昔に比べ [フロー駆動] という意味が分かった気がします。
-------------------------------------------------------------------------------
p.s.
> Google 検索 のAIモードの方が、Microsoft Copilot よりもマシであったという話。
私も最近は、やりたい事の考え方として AI( ジェミニ )に聞いてみる事があります。 鵜呑みに出来ませんが、自分では思い至らない考え方がある事に気付けるので、重宝しています(^^ゞ
|
|
|
■667 / ResNo.14) |
Re[14]: 【イベント処理】他の表を操作する
|
□投稿者/ ONnoji -(2025/09/19(Fri) 10:33:54)
| 2025/09/19(Fri) 10:45:47 編集(投稿者)
ジェダイの桐さんへのお返事です
> 最近ふと思う事がありました。 > フォーム + イベント を作るまでではない処理 .and ユーザーはある程度桐の操作に慣れている > この前提があった上でですけど、表にコマンドボタンが作れればいいのになぁって思ったんです。 > 疑似的に履歴の実行をコマンドボタンに見立てる事が出来ないか? > と思って、一括処理の文法を 想像 .and 調べながら 作ってみました(^^ゞ > ---------------------------------------------------------------------------------- 変数宣言 固有, 整数 { &g絞り込み状態 = #u, &gAns = #u, &gReturn = #u, &g対応番号 = #u } 変数宣言 固有, 文字列 { &gTitle = "【 履歴の実行 】科目置換Click", &gMsg = #u, &g入力日 = #u, &g編集属性式 = #u }
使用フォーム 条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
&gReturn = 1 手続き実行 編集属性chk
&g絞り込み状態 = #絞り込み状態 ┌if ( &g絞り込み状態 <> 0 ) │ &g入力日 = #日時文字列( [入力日], 13, 1, 3 ) │ &gMsg = #条件選択( &g入力日, "項目名 [ 入力日 ] " + &g入力日 + " " + "の" + " ", 1, #u ) + "科目置換を行います " │ &gMsg = &gMsg + "\n\nよろしいですか?" │ メッセージボックス &gTitle, &gMsg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &gAns │ │┌if ( &gAns = 1 ) ││ 併合 条件名 = "科目置換", 終了状態 = &gReturn ││┌if ( &gReturn = 1 ) │││ 検索 [勘定科目] { = #u }, 文字比較方法 = 自動, 部分一致検索 = しない, 自動調整 = しない, 終了状態 = &gReturn │││┌if ( &gReturn = -1 ) ││││ &gMsg = #条件選択( &g入力日, "項目名 [ 入力日 ] " + &g入力日 + " " + "の" + " ", 1, #u ) + "科目置換が " ││││ &gMsg = &gMsg + "\n\n正常終了しました" ││││ メッセージボックス &gTitle, &gMsg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する, &gAns ││││ │││├else ││││ &gReturn = 0 ││││ 手続き実行 編集属性chk ││││ ││││ &gMsg = #条件選択( &g入力日, "項目名 [ 入力日 ] " + &g入力日 + " " + "の" + " ", 1, #u ) + "項目名 [ 勘定科目 ] に " ││││ &gMsg = &gMsg + "\n\n未定義レコードがあります" ││││ &gMsg = &gMsg + "\n\n工場仕入科目一覧.TBX のマスタを 修正 or 新規登録 して再度実行してください " ││││ メッセージボックス &gTitle, &gMsg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する, &gAns ││││ │││└end │││ ││├else │││ &gMsg = "何らかの理由で 勘定科目 の併合がエラー終了しました " │││ &gMsg = &gMsg + "\n\n原因を探る or 桐に詳しい人に状況を伝えて解決してください " │││ メッセージボックス &gTitle, &gMsg, アイコン = e, ボタン指定 = 1, 制御文字展開 = する, &gAns │││ ││└end ││ │└end ├else │ &gMsg = "項目名 [ 入力日 ] の入力日が複数あります " │ &gMsg = &gMsg + "\n\n勘定科目を置換する 入力日のみ を絞り込んでから、再度履歴の実行を行ってください " │ メッセージボックス &gTitle, &gMsg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する, &gAns │ └end
終了
名札 編集属性chk
&g編集属性式 = #trim( #半角( #項目表示条件( #項目番号( "勘定科目" ), 10 ) ), 4 ) &g対応番号 = #対応番号( &g編集属性式, #trim( #半角( "( .not [勘定科目]) CB26" ), 4 ) )
┌if ( &gReturn .and ( &g対応番号 <> 0 ) ) │ 表示条件読み込み 条件名 = "ok勘定科目ON", 開始条件 = 無効 ├else if ( .not &gReturn ) │ 表示条件読み込み 条件名 = "err勘定科目ON", 開始条件 = 無効 └end
←手続き終了 > ---------------------------------------------------------------------------------- > 履歴名を 科目置換Click と名付け コマンドボタンと見做してみました。 > 一応 意図した挙動になりましたが・・・ > > 固有 .or 共通 変数しか宣言出来ない > 名札を作っても、その履歴の中でしか使えない( ライブラリが使えるかな?と思いましたが、イベントファイルのメイン部用のコマンドでした(^^ゞ ) > 名札をコールしても 引数 が使えない(T_T) > > うーん。前提が前提なだけに、実験としては成功なんですが、気持ちとしては上記3点があるので積極的に履歴を作らないだろうと思いましたm(__)m > 引数が使えなのがちょっと・・・ 自分ならスコープ事故を起こすだろうなと思いました。
履歴は、一括処理の仲間ですが、表から実行する事に特化していますから、普通の一括処理と少し違います。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・ 従って、「フォーム+イベント処理」の人にとっては、履歴の知識はほとんど役に立たないですよ。
>>「一括処理(.cmx)」と「フォーム(.wfx)+イベント処理(.kex)」は、180度反対方向に顔を向けたプログラミングスタイルです。 >>すなわち、[フロー駆動]対[イベント駆動]という違いです。 >> ・・・・・・・・・・・・・・・・・・・・・ > ○○.CMX を記述するって事は、本当に額面通り 一括処理 なんですね(^^ゞ > 実験を通じて、昔に比べ [フロー駆動] という意味が分かった気がします。
一括処理を別の言い方をするならば「バッチ処理」ですよ。アハハハha
一括処理の途中に 繰り返し ... 繰り返し終了 や if .. else .. end があったとしても、ただの一本道です。 ・・・・・・・・ 「いっぽんどっこの唄」1966年 水前寺清子 何はなくても根性だけは♪ 俺の自慢のひとつだぜ♪ 春がくりゃ夢の木に花が咲く男なら〜♪ 行くぜこの道どこまでも〜♪
そして、動作中は常に桐の一括処理の管理下ですから、縛りが厳しいです。
DOS時代にはコレしか手段がなかったので仕方が無いのですが、今は「フォーム+イベント処理」で自由にプログラミング出来ます。
> 疑似的に履歴の実行をコマンドボタンに見立てる事が出来ないか?
確かに履歴が大好きなユーザも居ますね。
私( ONnoji )の経験では、そういう人達は一括処理や「フォーム+イベント処理」といったプログラミングに興味が無い人たちでしたね。
私( ONnoji )からすれば、「なんでそんなに面倒臭い事(履歴実行)しているの?」と思いますが、彼らはそれで満足なんですね。
だから余計な事は言わないようにしていましたっけ。アハハハha
さて、表にコマンドボタンというのは良さそうで良くないんですよ。
すでに、表には「道具箱」という分かり難いインタフェースがあるでしょう。※私は一度も使った事ないですけれどね。アハハハ
この「道具箱」に登録してよねというスタイルなんですよ。
確かに「道具箱」が大好きなユーザも居ますね。
私( ONnoji )としては、よくもまぁ〜、次から次へと「条件登録」ばかりするのかと呆れていますが、
ご当人たちはそんなことは気にせず、表がパンパンになるまで「条件登録」するんですね。
だから履歴大好きの人達と同様に余計な事は言わないようにしていましたっけ。アハハハha
p.s.
もちろん字下げ(インデント)は好みの問題ですが、私( ONnoji )としては全角空白2文字のインデントは読み難いでした。
もちろん、これは慣れの問題ですから、整形ユーティリティで整形すれば済む事でしたが・・・(^^ゞ
|
|
|
■記事リスト /
レス記事表示 →
[親記事-9]
[10-14]
|