過去の桐井戸端BBS (桐ver.8)
2142 フォーム、イベント、一括処理の関係(システム構築の考え方) cheese 1999/7/3-07:16
桐V8、GOODです。
イベントハンドラ、メソッド呼び出しなど桐V5の時代に面倒だった処理が簡単に出来そうです。
でも、あれこれためしてみて アレレ...
フォームを開いてコマンドボタンに
「フォームを開く」「WFMファイル名」を指定して
フォームを変えようとしたら直接フォームを開いた状態だと
別のフォームに切り替えられますが、一括処理の
ウインドウ会話、フォーム呼び出しで開いたフォームからは
このコマンドボタンが押せません。

また、イベントハンドラに
メソッド呼び出し @フォーム.フォーム選択(WFMファイル名)
を指定しても一括処理で開くと"メソッドを使用できません..."
となります。これも直接フォームを開いたら動きます。
やはり、一括処理に戻して切り替えるしかないでしょうか?
2144 Re: 悲しげ 1999/7/3-13:12
記事番号2142へのコメント
どもっ、cheeseさん
「苦しみの多い楽しみ」ですね。(^^;)

さて、挙動にかかる情報ありがとうございました。

>フォームを開いてコマンドボタンに
>「フォームを開く」「WFMファイル名」を指定して
>フォームを変えようとしたら直接フォームを開いた状態だと
>別のフォームに切り替えられますが、一括処理の
>ウインドウ会話、フォーム呼び出しで開いたフォームからは
>このコマンドボタンが押せません。

cmdから開いたフォームで使えるボタンの機能は、ver.7.*で
は「一括に戻る」しか使えなかったと思いますが(違ったか
な?)、上記記述から推すに、ver.8でもそのままだと云う
ことなのではないでしょうか?(全然自信はないが)

>また、イベントハンドラに
>メソッド呼び出し @フォーム.フォーム選択(WFMファイル名)
>を指定しても一括処理で開くと"メソッドを使用できません..."
>となります。これも直接フォームを開いたら動きます。

cmdとkev(イベントハンドラ)の関係はどうも色々難しそう
ですね。この辺り、色々お試しいただいてさらなる情報をお
願いしたいと思っておりますが、当面、「メソッド呼出し」
やボタンの機能は、kevの中から使うようにしてはいかがでし
ょう。
ご承知のとおり、kev内では「ウィンドウ会話」は使えません
から、「フォーム呼出し」で走るしか無さそうです(他の方
法があればご教示下さい)。「フォーム呼出し」で開いたフ
ォームの挙動は、直接フォームを開いたのと大体同じような
挙動となるみたいです(これも自信なし)。
2147 悲しげさんありがとう cheese 1999/7/3-22:49
記事番号2144へのコメント
悲しげさん、こんにちは
いつも、痛快なコメントありがとうございます。
大変勉強になります。

今日も、頭を悩めながら桐Ver8と格闘しました。

さて、今朝のフォームの切り替えについての
イベントハンドラへの取り組みについて詳しくご説明します。

1方のフォームのコマンドボタンに
機能名1 "手続き実行" パラメータ1 "フォーム選択"
もちろん、一括処理起動時有効 をチェックします。

このフォームにイベントファイルを対応させ、
KEVファイルの或る部分に

手続き定義開始 フォーム選択()
*メソッド呼び出し @フォーム.更新モード設定(0)
*コメントアウトしても同じ
メソッド呼び出し ハンドル=&ハ,\
@フォーム.フォーム選択 ("****.wfm")
手続き定義終了

と記述します。

ハンドル=&ハ 変数は一括処理のウインドウ作成で指定してあります。
ハンドル=&ハ はフォームを直接開くときは取ります。

この設定でフォームを直接開くとイベントが正常に動き,
一括処理でフォームを開いて上記コマンドボタンを押すと

ku1071:メソッドが実行できませんでした。
詳細 フォーム選択

と出ます。

他にもイベントハンドラの記述がありますが、
それらは正常に動いています。

コマンドボタンを

機能名1 "フォームを開く" 機能パラメータリスト1 "****.wfm"

にしても同様です。
またこの場合、一括処理で開くとボタンが使用不可表示
になります。

ver8のヘルプWEBリファレンスのメソッド呼び出しには
これでいいように書いてあるんですがね (ーー;)
今日のところはこれで終了します。

お疲れ様でした。m(__)m
2148 メソッド・フォーム切替えとか 悲しげ 1999/7/4-12:37
記事番号2147へのコメント
どもっ、cheeseさん

>この設定でフォームを直接開くとイベントが正常に動き,
>一括処理でフォームを開いて上記コマンドボタンを押すと
>ku1071:メソッドが実行できませんでした。
>詳細 フォーム選択
>と出ます。
>他にもイベントハンドラの記述がありますが、
>それらは正常に動いています。

え〜、問題点は幾つか想像されますね。

まずひとつめ、「一括処理でフォームを開いて」とありますが、
そしてこの場合の一括処理とはcmdのことだと思われますが、
これはどのように開いているのでしょう、「ウィンドウ会話」
それとも「フォーム呼出し」?

ふたつめ、ボタンの機能とメソッドの両方に同じことの記述を
しているかのように取れますが、本来はどちらかでいいはずだ
と想像できます。この場合はどちらかひとつ、あるいはどちら
も実行されていない可能性が考えられます。

みっつめ、上述のように、他のイベントの記述は動いていると
するならば、フォームの切替えそれ自体に問題が潜んでいるか
もしれません。なぜなら(ボタンの機能はともかく)、イベン
トはそのフォームに依存するようです。つまり、フォームから
イベントハンドラを呼出し、各イベント手続き終了後には再び
そのフォームに戻ると云う。この時、戻り先のフォームが切替
えられてしまっていたら、戻り先を喪失してしまうことになり
矛盾が発生する。ゆえに実行できない(ちなみにイベント呼出
し元ではないフォームの切替えは可能?)・・・などと想像し
てみたのですが如何?

よっつめ、先にも書きましたが、cmdとkevの関係はよく判りま
せん。この辺りはcheeseさんに引き続き苦闘を(^^;)お願いい
たします。が、どうしても判らなければ、当面はkevオンリー
で攻める方法で回避することもご検討下さい。
メニュー的な処理含めて全てkevで記述します。この場合の各
処理への以降は「フォーム呼び出し」(またはボタンの機能
でもいいかもしんない?)による、各フォームのイベントの
集合として組み立てる。(発想の大転換が必要?)

……と、偉そうなことを書いてますが、実は私も全然判って
いないです、手探り状態です。
以上、全然「痛快」ぢゃないですが。(^^;)
2149 Re: cheese 1999/7/4-15:53
記事番号2148へのコメント
どーも、悲しげさん

ご指摘の問題点について

ひとつめ、
一括処理(cmd)では「ウインドウ会話」、
「フォーム呼び出し」とも
両方試しましたが、だめでした。

ふたつめ、
ボタンの機能には 機能名1 "手続き実行"
機能パラメータ1 "フォーム選択"(kevの手続き名)
にしてあります。
KEVで
手続き定義開始 フォーム選択()
メソッド呼び出し @フォーム.フォーム選択\
(*****.wfm)
手続き定義終了
と記述してあります。
ですから問題はないでしょう?

みっつめ、
多分、フォームの切り替えをするコマンドボタン
は一括処理では使えない、また
一括処理とイベントの関係のなかでの
フォーム切り替えはできないのかも知れません。
桐V8のオンラインマニュアルには
"メソッド呼び出し フォーム選択"は
「一括処理での実行 可能」になっていますが
?????????????????????

悲しげさんの言われるように KEVオンリーでとは
今のところ考えられないので、とりあえず
あきらめて(-_-;)先に進みます。

今後、関連する情報がありましたら、御一報下さい。
2151 Re: かにぴらふ 1999/7/4-18:34
記事番号2149へのコメント
cheeseさん、こんにちわ。

もし、私の記憶が正しければ…

ウインドウ会話またはフォーム呼び出しでは
「フォームの選択」と「開く」コマンドは仕様的に制限
されていたような…

理由は悲しげさんが書かれている通りかと私も思います。
2152 桐ver.8ではシステム構築の考え方が変わります 佐田 守弘 1999/7/4-21:18
記事番号2151へのコメント
皆様、こんばんは。
どうやら桐ver.8でシステム構築する場合、根本的な部分で考え方を変えなければならない様です。
一括が使えない桐ver.6では、フォームが起動画面でした。
そして桐ver.7になり、一括処理からフォームを開く方法になりました。私もその方法を提唱して来ました。
ところが、桐ver.8では再びフォームを起動画面にする設計する必要がありそうです。
もちろん、桐ver.7の様に一括処理からフォームを起動する方法も使えます。
ですが、どちらが自然なのかというと、どうもフォームからイベントを起動する方法がメインの方法になる
みたいです。
そういっている私もまだ良く分かっておりません。現在奮闘中です。
なお、フォームから別のフォームを開く場合、「モーダルフォームを開く」方法を使うそうです。
モーダルフォームは、そのフォームを終了しなければ、元のフォームには戻れないので、
元のフォームの情報を失うことはなさそうです。
要するにサブルーチン的に別のフォームを開くといった感覚で使う様ですね。

佐田 守弘
2166 Re: cheese 1999/7/6-22:46
記事番号2152へのコメント
佐田さん、悲しげさん、かにぴらふさん
ありがとうございました。
何とか発想の転換ができそうです。

フォームから、或いはイベントハンドラから
"一括処理実行"はできないのに,複雑な
データ処理ができるのか迷っていたのですが、

例えば
1.フォームのコマンドボタンに
機能名 手続き実行 機能パラメータ ****
と指定し
2.一括処理に
手続き定義開始 ****()
と記述
3.そして イベントハンドラに
ライブラリコマンドでこの一括処理を読み込む

こうすれば、フォームを起動画面にできますね。
それに、オーバーラップ形式で表示できます。

別のフォームを開くときはモーダルフォームで開く。

V7時代に、ライブラリや手続き定義開始などそれほど必要でないコマンドが増えた理由も解りました。
1.2.3.をどううまく連携させるかが鍵ですね。

皆さんに感謝......

戻る