過去の桐井戸端BBS (桐ver.8)
14772 一括からフォームを開いて、コマンドボタンを機能させる 高木一美 2002/01/18-13:37
 お久し振りです。
 一括からフォームを開いて、コマンドボタンを機能させる方法についてお尋ねします。
 他の例も読んでみたのですが、難しくてよく分からなかったので、すみませんが、私の処理で教えて頂きたいのですが。


 まず、一括処理で、表"SYARYO"を開いて、フォーム形式"SYARYO.WFM"であらわします。
 フォームの中には、「次検索ボタン」と「終了ボタン」があります。
 「次検索ボタン」を押すと、項目「NO」を検索し、その行を修正できるようにする。
 「終了ボタン」を押すと、表とフォームを閉じて、メニュー画面に戻る。

という処理にしたいのですが。

 できれば、検索した後、該当NOがなければ、行挿入ができれば、尚いいのですが。
 

 一応、下のように考えましたが、どこが悪いのかよくわからないので、すみませんが、よろしくお願いします。


名札 車輌管理台帳
   表 "SYARYO",使用フォーム="SYARYO.WFM"
  ウインドウ作成 フォーム,位置=(1,1),ハンドル=&表
   繰り返し
* ウインドウ会話 &表,更新=許可,ボタン=&ボタン
   ケース開始
      ケース(&ボタン=次検索)
       絞り込み フォーム,[NO],文字比較方法=自動,終了状態=&終了
    ケース開始
        ケース(.NOT #終端行) 
  ウインドウ会話 &表,更新=許可,初期項目=[当月距離],
ボタン=&ボタン
        ケース(&選択件数=0) 
メッセージボックス,"☆★☆ 未 登 録 ☆★☆",
ボタン指定=1,&F終了
&ボタン = ""
ケース終了
      ケース(&ボタン=終了) 
        絞込み解除 *
ケース終了
    繰り返し終了
        ウインドウ終了 &表
        終了 表 編集対象表
   手続き終了


 フォームでは、
  「次検索」は、表示→絞込み_比較式「NO」→訂正「走行距離」
  「終了」は、絞込み解除→閉じる
 を設定しています。

14783 Re:一括からフォームを開いて、コマンドボタンを機能させ 佐田 守弘 2002/01/18-18:09
記事番号14772へのコメント
高木一美さん
一括からフォームを開いた場合、ウインドウ作成、ウインドウ会話コマンドで編集を行いますが
(貼付の一括もそうなっています)、このウインドウ会話の状態は、会話処理ですから、
その後に書かれているケースコマンド以下の処理は実行されません。
ウインドウ会話の状態で行えるのは、手作業の絞り込みなどの処理だけです。

そして行いたい事、つまり番号を入力したら、絞り込みを行う等は、一括処理の中に
記述するのではなく、イベント処理として記述します。
そう言った意味で、全体の大きな見直しが必要になるかと思います。

佐田守弘(KS-00119)
14787 Re:中身については解りませんが、形式だけ KH 2002/01/18-19:13
記事番号14772へのコメント
高木一美さん、こんばんわ。
一括の内容をよく理解していませんが、形式的なことだけですが気がついたヒントをコメントします。
あくまでも自分が使用している形です。
細かい点にミスがあるかもしれませんが、オブジェクト名を&ボタンで取得していますが、
&ボタン="次検索"のようにする必要があるはずです。
以下例のように手続き文で少しスッキリするはずです。
手続き先名札の中で、大概の処理はできるはずです。
一括処理実行で別の一括で処理をして戻ってくることも可能です。
また、フォームのボタンにも一括で使用するチェックが必要ですので忘れないで下さい。
中身が分からないので以下形式的な構造だけ直しました。

>名札 車輌管理台帳
>   表 "SYARYO"
>  ウインドウ作成 フォーム,位置=(1,1),ハンドル=&表
>   繰り返し
>     ウインドウ会話 &表,更新=許可,ボタン=&ボタン
>     条件(&ボタン="終了") 繰り返し中止
>     ケース開始
>        ケース(&ボタン=”次検索”)
>           手続き実行 あいう
>        ケース(&ボタン=”前検索”)
>           手続き実行 えおか
>              ・
>              ・
>              ・
>     ケース終了
>   繰り返し終了
>   ウインドウ終了 &表
>   終了 表 編集対象表
>
>名札 あいう
>   ・・・(該当の処理)
>   手続き終了
>名札 えおか
>   ・・・(この中は一括に飛ばす、一括処理実行でも良い)
>   手続き終了
> ・・・


14792 補足:一括の中でのイベント 佐田 守弘 2002/01/19-11:10
記事番号14783へのコメント
高木一美さん
前コメントへの補足です。
高木さんは一括処理から「ウインドウ作成」コマンドでフォームを開いているので、これを前提にした話になります。

●フォームの終了
一括からフォームを開くには、書かれている通りに「ウインドウ作成」コマンドです。
このコマンドに続いて「ウインドウ会話」コマンドが実行されると、作られたフォームウインドウで会話処理に入ります。
会話処理に入るという事は、会話処理中は一括処理が中断します。
ここが重要なポイントで、後で述べる「一括へ戻る」機能で一括に戻らない限り、
他のコマンドは実行されません(ただしイベントハンドラの呼び出しは別です)。

ウインドウ作成コマンドで開かれたフォームを終了するには、コマンドボタンで
「一括へ戻る」を実行します。
該当するボタンは、「終了ボタン」なので、この機能名に「一括へ戻る」を設定して
下さい。一括に戻る事によって、作成されたフォームウインドウが閉じられ、
プログラムの制御は、「ウインドウ会話」の次の行に戻ります。
通常、一括に戻る時に、どのボタンが押されて戻ったかを「ボタン=<文字列型変数>」のパラメータで取得し、
押されたボタンに応じた処理を、一括に戻った後に行います。

一括に戻る「終了ボタン」は、通常、「一括に戻る」の機能名だけを設定し、
表の絞り込み解除や、表を閉じる操作は、戻った先の一括で行います。

高木さんの場合、このボタンに、「絞込み解除」と「閉じる」を設定されてますが、
絞り込み解除は可能ですが、ウインドウ作成で開かれているフォームを閉じる事はできないと思うのですが。

●ウインドウ会話中の検索
上記に述べた通りで、ウインドウ会話中には、一括処理の中に記述されているコマンドを実行する事はできません。
方法としては、次のいずれかになります。

(1)機能名の検索を使う
 >「次検索」は、表示→絞込み_比較式「NO」→訂正「走行距離」
と書かれているので、どうやら現在はこの方法が使われている様ですね。
試していませんが、これも1つの方法です。ただし、該当番号がなければ行挿入を行うといった高度な事はできません。

(2)イベントハンドラを使う
一括で開かれたフォーム上でも、イベントは使えるはずです。
イベントファイルは、一括とは別ファイルにしておく方が良いのですが、
一括処理の末尾に記述することも不可能ではありません(お薦めしません)。

「次検索ボタン」にマウスクリックイベントを設定するか、「手続き実行」の機能名を設定します。

イベントで設定する場合には、このボタンの[イベント]のタブを開き、
該当するイベント名をダブルクリックすれば、イベントハンドラである「手続き定義開始」と
「手続き定義終了」が自動で作られます。この2行の間に、検索なり絞り込みなどのコマンドを記述します。
検索できない時に新規行を追加するコマンドも記述できます。

手続き実行で行う場合には、上記を自分で作ります。これは結構面倒なので、
イベントハンドラとして作成してから、一般手続きに書き替えた方が簡単です。
この書き換えは、「手続き定義開始」の後ろに書かれている記述を消して、
「次番号検索()」の様な名前を自分で付けます。名前の後ろの括弧は必須です。
そしてイベントのタブで、自動設定されたチェックマークを消しておきます。

この様にして作った一般手続きは、機能名の「手続き実行」のパラメータに記述します。
ここでは、手続き名の後ろに括弧は付けません。
イベントハンドラで記述した時には、マウスのみで操作できますが、一般手続きは、
Enterキーでも操作できる点が便利です。
また、作り替えた一般手続きをイベントファイルから一括処理の方に移してしまっても構いません。

佐田守弘(KS-00119)
14795 Re:記述ではなくシステム構造の見直し Ogo 2002/01/19-14:38
記事番号14772へのコメント

一括処理から 編集用の WFM を開いて会話状態に入った場合、
次に一括処理に制御が戻るのは、当該の WFM を閉じた時に
なるのが普通だと思います。

で、WFM を閉じることなく複雑な(コマンドボタンに
予め用意されている機能およびステップ数では処理しきれないという意味です)
処理を行ないたいのなら、これは *.kev(イベントファイル)の中に手続き(サブルーチン)単位で
一括処理を書き、コマンドボタンから「手続き実行」で
呼び出すという構造にするしかありません。

# イベントファイルの中で使えるコマンドには種々の制限
# がありますのでいろいろ注意する必要があります。

元の CMD ファイルを見ても自己(WFM)呼び出し的な記述があり、
そのままではまず動かないでしょう。

で、方向性として、

CMD では WFM ファイルを呼び出すまで/ 閉じた後に限定した内容にする
WFM ファイルを開いてからの実処理でプログラムが必要な部分は KEV ファイルに記述する

というのが順当でしょう。

別の方法としては、「次検索」「終了」をダイアローグとして編集用の WFM とは独立させるということも可能です
(この場合は、WFM を閉じた段階で制御が元の CMD に戻ることを利用して、「次検索」「終了」ダイアローグ
や編集用の WFM を閉じた段階でループ判断を行なうことになるでしょう)。




14797 Re:制御の引き渡し Ogo 2002/01/19-17:05
記事番号14795へのコメント

>別の方法としては、「次検索」「終了」をダイアローグと
>して編集用の WFM とは独立させるということも可能です
>(この場合は、WFM を閉じた段階で制御が元の CMD に
>戻ることを利用して、「次検索」「終了」ダイアローグ
>や編集用の WFM を閉じた段階でループ判断を行なうこと
>になるでしょう)。

ここまでやらなくても、単に一括処理に戻る処理を WFM 内に
入れておけば、*.kev (イベントファイル)を使わなくても
充分対応可能ですね。

以下某所でのやりとり。

- - - -

>私が最も違和感を持っているのは、会話を開始した
>フォームからいつ制御が一括処理に戻るのかという
>点です。

>元の質問では、「終了」ボタンはともかく、「次」
>に関しては、一括処理に戻るような記述がなかった
>と思うのですが。

- - - -

>それは、基本的にボタンなりイベントで
>「一括処理へ戻る(閉じる)」が押された
>場合でしょうし、設定によっては Esc が
>押された場合でもあるでしょう!

>それまでは一括処理は単に「ウィンドウ
>会話」の行が終了するのを待っているだけ
>でしょう。

- - - -

つまり、「次検索」ボタンも「一括処理に戻る」を必ず最後に入れておく必要があるという基本的な点が
当初の質問で最も重要なポイントではないかと私は思っているのですが
(それで即座に解決するという意味ではなく、自分で試行錯誤をする上での基本的な制御引き渡しの条件になるという意味です)。


14799 ありがとうございます 高木一美 2002/01/19-19:57
記事番号14795へのコメント
皆さん、温かいご指導ありがとうございます。
実は、私もフォームの機能と一括処理がごちゃまぜになっているのを感じて
いたのですが、どうしたらいいかわからず、困っていました。
ありがとうございました。

まだ、実際には考え直していませんが、基本に戻って考え直したいと思います。
これからもよろしくお願い致します。

戻る