過去の桐井戸端BBS (桐ver.8)
5126 行挿入終了イベントについて bonito 2000/03/12-19:59
みなさん、こんにちは、また私の間違いあるいは
思い過ごしかも知れませんが (^^;

/*----多分----*/
伝票フォーム等では、会話処理上の行挿入(追加)時にその行数は指定
出来ない(ほっておけば何行でも)、が1行の挿入追加が確定する都度
行挿入終了イベントはちまっと発生し、そのあと又新たな行挿入(追加)
に(やめろと言われるまで)とりかかる。

/*----なので----*/
伝票フォーム等で
キーやボタンを押さずに、行挿入(追加)を終了するには
行挿入終了イベント内で
メソッド呼び出し @フォーム.更新モード設定(0)、または
メソッド呼び出し @表示ボタン.実行()、
(表示ボタンは機能名に表示を設定してあるものとする)
というふうにしますよね。

どちらにしても、この時点できっぱり行挿入モードから抜けたと
思うじゃないですか。
 ところが、そのイベント内で(手続き実行で飛んでも当然そのイベント内?)、
処理行移動系のコマンドを発令する(ジャンプしたりする)と、どうも行挿入モードから
抜けてない!(帰ってきたような)、そんな感じなのです。

この事について何か知っている方がいらっしゃたら教えて下さい。
まぁ、自分の指でキーやボタンを押せばいいのでしょうが、ちと
不便・・・(T_T)


5132 Re:行挿入終了イベントについて ケント 2000/03/13-09:17
記事番号5126へのコメント
bonitoさん こんにちは
私はこのごろイベントを勉強し始め、まず最初に作ったのが商品マスターの編集・
新規入力用フォームで、その中でbonitoさんと同じ様なことをさせています。私の
場合は、

>メソッド呼び出し @表示ボタン.実行()、
>(表示ボタンは機能名に表示を設定してあるものとする)

を行の最終項目のソース値更新イベントで実行していますが、

>どうも行挿入モードから抜けてない!(帰ってきたような)、そんな感じなのです。

が実感できません。
メソッド呼び出し ......
ジャンプ 先頭
としてみましたが、行挿入モードを脱けて編集モードに戻ります。
ちなみにV8sp4です。
又、何故ソース値更新イベントを使ったかと言うと、行挿入終了イベントが1行づつ発生する、
ということを知らなかったからです。(^^;ポリポリ

とりあえず参考になるかどうかわかりませんが、参考までに...
5134 行**終了イベントの多重発生防止(1) 悲しげ 2000/03/13-09:47
記事番号5126へのコメント
どもっ、以下はikaspa様に以前作っていただいたものです。
この場合は、グループを持つフォームですから「行挿入」は「疑似」的に
処理されております。で、「行訂正終了」イベントにおいても、1レコード処理する毎に
発生するため、多重発生防止に苦労なさったようです。
参考になりそうな気がするので、kevのみですが、コメントも丁寧に付記
されていますから、丸ごと引用します。
改行がぐちゃぐちゃになる点はご容赦下さい。

*---------------------------------------------------------------------
-------------------------------------*
名札 メイン

変数宣言 整数{&継続=0,&mode,&ok},数値{&GNo},文字列{&flg}

* &継続 :連続挿入を行うかを判断するフラグ変数 (0:初期値
1:継続 2:中止)
* &flg :疑似行挿入モードであるかを判断するフラグ変数 ("":非行挿
入モード "行挿入":行挿入モード)
* &GNo :枝番登録を制御するための作業変数
* &mode :現在の更新モードを確認するために使用する作業変数

*------------------------< グループを持つフォームに対する疑似レコード
挿入処理 (C)1999.7 Copyright ikaspa >-*


*---------------------------------------------------------------------
--------------<フォームを開く直前の処理>-*
手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
並べ替え {[GNo]昇順}
置換 [マーク]="",\
[GNo] =#連番
手続き定義終了

*---------------------------------------------------------------------
<行挿入ボタンで発生するイベント処理>-*
手続き定義開始 b行挿入::マウス左クリック(長整数 &マウス位置[2],長整数 &
明細番号,長整数 &フラグ,参照 長整数 &処理中止)

* 会話処理等による更新モード中のボタン押下をキャンセルする処理
* 行挿入開始イベントまたは行訂正開始イベントにてオブジェクト操作コマ
ンドにより[禁止]にする方法でもよし

method @フォーム.更新モード取得(&mode)
if(&mode<>0)
メッセージボックス "","レコード訂正中及び追加中は実行できません!
",アイコン=E,ボタン指定=1,&ok
return
end

オブジェクト操作 @b行挿入.フォーカスの設定 = "使用不可表示" /* 後追い実
行が出来ないようにボタンの使用を不可にする */
call 行挿入(-0.1) /* 疑似挿入
するレコード処理手続きのコール */
&flg ="行挿入" /* 状態を疑
義行挿入モードとするフラグ変数 */
method @t商品コード.フォーカス設定() /* フォーカ
スを先頭項目に移動 */
method @フォーム.更新モード設定(2) /* 更新モー
ドを訂正モードに変更して入力 */
手続き定義終了


/////////////// 長いので分割します //////////////

5135 行**終了イベントの多重発生防止(2) 悲しげ 2000/03/13-09:49
記事番号5134へのコメント
///////////////// 続きです /////////////////
*-----------------------------------------------------------------<1レコード処理ごと
に発生するイベント処理>-*
手続き定義開始 フォーム::行訂正終了(長整数 &明細番号,長整数 &モード)
* このイベントは1レコードを訂正処理するごとに発生するため、フラグにより制御しなくて
はならない
if (&flg="行挿入")
method @フォーム.更新モード設定(0) /* 更新モードを表示モードへ
と切り換える */
&継続 =#cond(&モード=1,1,1,2) /* 引き数 &モードの値([確
定]=1,[キャンセル]=0)により継続か中止かを判断 */
&flg ="" /* 2行上で更新モードを変更
している為、このイベントが再度発行される為に */
/* &flgの値をnullにして多重
発生を防がないといけない。こいつにテコズッタ(^^; */
オブジェクト操作 @b行挿入.フォーカスの設定 = "自動" /* ボタンの使用を可能にする
*/

else if(&継続=2) /* キャンセル([ESC]が押され
た場合)の処理
行削除
&継続 =0
end
手続き定義終了

*-------------------------<&継続が1であり、かつ[Enter]により新しいレコードのt商品にフ
ォーカスを得た時の処理>-*
手続き定義開始 t商品コード::フォーカス取得(文字列 &喪失オブジェクト名)
if(&継続=1)
method @フォーム.更新モード設定(0) /* [b行挿入]ボタンとほぼ同
様な処理(上記参照) */
オブジェクト操作 @b行挿入.フォーカスの設定 = "使用不可表示"
call 行挿入(-0.1)
&継続 =0,\
&flg ="行挿入"
method @フォーム.更新モード設定(2)
end
手続き定義終了

*--------------------------------------<訂正中に他のマウスにて他の項目をクリックして終
了した場合のフラグ処理>-*
手続き定義開始 項目::フォーカス取得(文字列 &喪失オブジェクト名)
 /*「項目」はファミリー(t商品コード以外の明細部全項目に指定)*/
&継続 =0
手続き定義終了

*--------------------------------------------------------<疑似的にレコード挿入を行うた
めの一般手続きブロック>-*
手続き定義開始 行挿入(数値 &add)
&GNo =#cond(#eof,0,1,[GNo]) /* 対象レコードの枝番号を
取得 */
行追加 [GNo]=&GNo+&add /* &add(この処理のみであれ
ば-0.1に限定)を加算した値で新規行を追加 */
ジャンプ 行番号=-1 /* 対象行が終端行になって
いるため、上で追加した行へ移動 */
行マーク定義 1 /* 対象行をマーク */
並べ替え  {[GNo]昇順} /* ソートを実行 */
置換 [GNo]=#連番 /* 枝番を整数値に置換 */
ジャンプ  行マーク=1 /* マークしたレコードを対
象行にするためジャンプ */
行マーク解除 1 /* マークの解除 */
手続き定義終了

*-------------------------------------------------------------------------------------
----------<End of File>-*

5146 Re:行**終了イベントの多重発生? bonito 2000/03/13-16:33
記事番号5135へのコメント
ケントさん、レスありがとうございます。
悲しげさん、毎度ありぃです<(_ _)> やっぱ「いか酢」さんはイカス。
でも今ビジー?らしいので、しょぼん(-_-) 
今日は私もビジー、会社のPCが壊れた、しかもつながってない奴(;o;)

>&flg=""
>2行上で更新モードを変更している為、このイベントが再度発行される為に
>&flgの値をnullにして多重発生を防がないといけない。こいつにテコズッタ(^^;

つー事はなに・・・、イベントからイベントが発生するって事?・・・ダヨネ。

桐のオンラインマニュアルによると「行**終了イベント」
●会話処理で1件のレコードを、**するたびに発生します。
●会話処理を伴わない行**では、発生しません。
●行**が、キャンセルされても発生します。
2番目の会話処理...云々に翻弄されたかな? でもせめてマニュアルの
「更新モード設定」のところくらいには注意書きしておいて欲しかった。
やさしい(*^。^*)悲しげさんがいなければ、もしかしたら私なぞ永久に
気付かなかったかも知れない。

「いか酢」さんのその他の処理については、後でゆっくり勉強させて頂きます。

ps.
「いか酢」さん悲しげさんをせめないで・・・

戻る