過去の桐井戸端BBS (桐ver.8)
29610 一括処理でメニューを終了したときフォームが開いたままになっているのでそれを閉じたい オオタニ 2005/04/11-11:10
どなたか教えて下さい。
一括処理でメインメニューを作りそこから他のメニューに移り作業をしてます
その時実行中の一括処理を終了してメインメインメニューに戻るとき
「終了 表 *」
「一括処理実行  "0000.CMD"
としています数種類のメニューフォームが裏開いたままになっている状態です。
実行中のメニュー(フォーム)を閉じるにはどのようにすれば良いのかアドバイスお願いします。

29616 説明不足の為追記 オオタニ 2005/04/11-15:31
記事番号29610へのコメント
先のコメントでは解りにくいのでもう一度書きます。
一括処理実行中一つ前の一括処置に戻るときの事で
「終了 表 *」
「ウインドウ終了 &OO」
「一括処理実行 "一つ前の一括処理.CMD"」
としていますが使用していたフォーム(メニュー用)の閉じ方が解りません。

29617 Re:説明不足の為追記 宮城 2005/04/11-15:47
記事番号29616へのコメント
そのフォームはどうやって開いたんですか?
29619 Re:説明不足の為追記 オオタニ 2005/04/11-17:15
記事番号29617へのコメント

>そのフォームはどうやって開いたんですか?
一つ前の一括処理のメニュー用フォームから
定義 一括処理実行 「"111.CMD"」で開いています。
一つ前の一括処理でボタンを多数配置し
そこから次の一括処理に行くようにしています。
29620 Re:説明不足の為追記 宮城 2005/04/11-17:29
記事番号29619へのコメント
CMDによる開き方もいろいろあるわけでして、
どう記述されたのですか?

たとえば、「フォーム呼び出し」コマンドを
使われたならごく自然にフォームを閉じて
メニューフォームに戻るわけでして、
どう開いてどうその処理を終わらせたら
そのフォームが残っちゃうのかをお聞きしているのです。

29621 Re:説明不足の為追記 宮城 2005/04/11-18:16
記事番号29620へのコメント
というか、「フォーム呼び出し」を使ってはどうですか
ということにしときましょうか。

たぶんそのほうが簡単かつ今後の応用も効くでしょう。
29622 Re:説明不足の為追記 オオタニ 2005/04/11-18:46
記事番号29620へのコメント
説明が下手で申し訳有りません。
一括処理を記述します見て下さい。
     メインメニュー.CMDとします
ウインドウ作成 "メインメニュー.WFM".位置(),サイズ=().(),ハンドル=¥
&H

名札 初め ウインドウ会話 &H。ボタン=&M
   繰り返し 
    条件 (&M="終了")繰り返し終了
  ケース開始
    ケース (&M="A")
     手続き実行 A
    ケース (&M="B")
     手続き実行 B
  ケース終了
  繰り返し終了
 ウインドウ終了 &H
   終了

名札 A
   一括処理実行 "000.CMD"

名札 B
   一括処理実行 "001.CMD"

**********
  000.CMDの記述

ウインドウ作成 "000メニュー.WFM".位置(),サイズ=().(),ハンドル=¥
&H1

名札 初め ウインドウ会話 &H1,ボタン=&M1
    繰り返し 
    条件 (&M1="終了")繰り返し終了
   ケース開始
     ケース (&M="A01")
      手続き実行 A01
     ケース (&M="B01")
      手続き実行 B01
   ケース終了
    繰り返し終了
 ウインドウ終了 &H1
   一括処理実行 "メインメニュー.CMD"

このように書いていますアドバイスお願いします。


29625 Re:説明不足の為追記 宮城 2005/04/11-21:33
記事番号29622へのコメント
ウィンドウ作成、会話でもきちんと書いてあれば、フォームが残ることはありません。
疑問箇所をあげておきます。

・「名札」と「ウィンドウ会話」を同一行に書いてよかったんでしたっけ?
・繰り返しループを本当に&Mに"終了"が入って抜けていますか?

29626 一括処理メニューで開いたフォーム等の終了方法 佐田 守弘 2005/04/11-23:07
記事番号29610へのコメント
オオタニさん
正論は、#29621で宮城さんが書いている
 >というか、「フォーム呼び出し」を使ってはどうですか
 >ということにしときましょうか。
に尽きます。
桐のバージョンが書いてないですが、桐ver.7を使っているならとも書く、
現在の桐、すなわち桐ver.8以降であればメニューフォームから目的の
フォーム等を呼び出す場合、フォーム呼び出し、あるいは単に機能名の
「開く」で行うのが普通の方法です。

呼び出したフォームは、単に「閉じる」機能を設定したボタンを実行するだけで、
そのフォームが閉じ、元のメニューのフォームに制御が戻ります。

●桐ver.7方式のウィンドウ会話方式
もちろんこの方法も今でも使えます。でも面倒なので使わなくなったと言うのが本当の所でしょう。
桐ver.6では一括処理が使えなかったので、機能名の「開く」でフォームを開いてました。
もちろん一括処理などは使えませんでした。
桐ver.7になって、一括処理機能を使い、かつ、一括処理からウィンドウを開くために、
ウィンドウ作成、ウィンドウ会話方式でウインドを開く方法が使われました。

桐ver.8以降、イベントが使える様になったので、一括処理でウィンドウを開く必要はなくなり、
単に「開く」等でフォームを開けば、自動的にイベントが起動して、
様々なプログラムが実行できるようになりました。

ですから、今ではウィンドウ作成、ウィンドウ会話方式でフォームを開くのは
過去の方法になってしまいました。

●問題点
「ウィンドウ作成」コマンドと、「ウィンドウ会話」コマンドは、
2つセットで使う様にして下さい。
ウィンドウ作成でウィンドウを開き、会話処理が終わったら、
そのウィンドウを閉じてしまうのが、初歩的ではありますが、
いろいろなミスをなくすのには有効です。

もちろん、先にウィンドウ作成コマンドを実行しておき、
必要な時にウィンドウ会話を実行する事も不可能ではありませんが。
高等テクニックとしてはあり得ると思います。

で、質問の問題点です。
 >ウインドウ作成 "メインメニュー.WFM".位置(),サイズ=().()
 >,ハンドル=&H    ← (改行位置変更)
 >名札 初め      ← (おそらく書き誤りと思うので別行に分離)
 >ウインドウ会話 &H。ボタン=&M
となっています。
ウィンドウ作成を先に実行しておき、ウィンドウ会話の方は名札の中で実行しておりますね。
これはす殿開かれているウィンドウに対して、ウィンドウ会話だけを実行しようと、
設計しているのかと思います。

実際にどの様な流れ出実行されるのかは、ここだけでは読取れませんが、
多分、ウィンドウ作成状態は継続していて(つまり裏で開いたままにしておいて)、
必要な時にウィンドウ会話を行おうと言う意図なのかと受け止めます。
もちろんこの様な方法は、それなりの意図があれば、方法としては間違いではありません。

質問事項である
 >種類のメニューフォームが裏開いたままになっている状態です。
といった状態を作り出す事ができます。そしてその場合、どのウィンドウが
今、裏で開かれているかといった事を把握した上で使う事が大切です。

ですから「なぜ開かれていて閉じないのか」と言う質問に対しては、
御本人がその様に設計されているのではないでしょうか、という気がします。

佐田守弘(KS-00119)
29629 Re:一括処理メニューで開いたフォーム等の終了方法 オオタニ 2005/04/12-15:11
記事番号29626へのコメント
佐田さんこんにちは
色々アドバイス有り難う御座います。
桐はVre8を使用しています

>●問題点
>「ウィンドウ作成」コマンドと、「ウィンドウ会話」コマンドは、2つセットで
>使う様にして下さい。ウィンドウ作成でウィンドウを開き、会話処理が終わ
>ったら、そのウィンドウを閉じてしまうのが、初歩的ではありますが、いろ
>いろなミスをなくすのには有効です。
上記のよう閉じたいのですが「ウインドウ終了 &H」これではメニューフォームは
開いたままのですよね これを閉じる方法を教えてださい。
意図して裏で開けているのではなく知識が足りず開いたままになっているのです。


29633 Re:一括処理メニューで開いたフォーム等の終了方法 宮城 2005/04/12-21:43
記事番号29629へのコメント
オオタニさん、申し訳ないんですが、ここの暗黙の前提(だと思いますけど)
では異常個所を直すのはご本人です。公開されていない部分になにがあるやは
オオタニさんしか知らないわけで。

たとえば、なんであんなところに「名札」があるのかとかどっかでどんな風にコールしてるのかとか。

>上記のよう閉じたいのですが「ウインドウ終了 &H」これではメニューフォームは
>開いたままのですよね

レファランスを読めば疑う余地ないと思うのですけど、まともにいってれば閉じるべきものです。

29634 Re:一括処理メニューで開いたフォーム等の終了方法 佐田 守弘 2005/04/12-22:49
記事番号29633へのコメント
オオタニさん
宮城さんも#29633に書いている通り、
 >上記のよう閉じたいのですが「ウインドウ終了 &H」これではメニューフォームは
 >開いたままのですよね
のコマンドを実行すれば、ハンドル番号&Hのウィンドウは終了する(閉じる)はずです。
それが開いたままであるという事は、何かエラーが起きる原因があるはずです。
ただし、今まで書かれている質問文には、それを推定できる原因は見当たりません。

●ハンドル番号
ご存知とは思いますが、参考までに解説しておきます。
ウィンドウ作成コマンドでウィンドウを開く時に、「ハンドル=<変数名>」のパラメータを指定します。
ここで指定した変数に、桐が割り当てたハンドル番号が代入されます。
この後、ウィンドウ会話コマンドを実行する時や、ウィンドウ終了コマンドでウィンドウを
閉じる時には、割り当てられたウィンドウ番号で、どのウィンドウかを指定します。
ウィンドウ番号の値は、直接的には表示されないので、この様に変数に受けておき、
その変数でウィンドウ番号を指定するわけです。

●推定されるエラーの原因
ウィンドウ終了コマンドを実行しても、ウィンドウが閉じられないとしたら、
誤ったウィンドウハンドルの値を指定している可能性が高いと思います。

#29622の質問分には、
 >ウインドウ作成 "メインメニュー.WFM".位置(),サイズ=().(),ハンドル=¥
 >&H
と言う様に、変数「&H」を使っており、またウィンドウ終了コマンドでも
 >ウインドウ終了 &H
となっていますから、形の上では全く問題がありません。

しかし、質問分に書いていないどこかで、変数「&H」に何か別の値が代入される様な事はないでしょうか。
メニューのウィンドウから開く別のウィンドウハンドルで、同じ変数名を使っていたりすると、
新しいウィンドウハンドルの値が代入されて、メニューフォームのウィンドウハンドルの値が失われたといった事が考えられます。

以上の店を中心にチェックして下さい。

佐田守弘(KS-00119)
29635 Re:説明不足の為追記 今村 誠 2005/04/13-10:47
記事番号29622へのコメント
オオタニさんこんにちは以下の一括を自分で作って
ぜひ動作テストをしてほしいと思います。
メインメニュー.CMD
変数宣言 固有,整数{&H}
条件 (0>#配列要素数("x")) 変数宣言 共通,整数{&x=0}
ウインドウ作成 "メインメニュー.WFM",\
位置=(0,0),ハンドル=&H
確認 "開いた"
ウインドウ終了 &H
*確認 "閉じた"
一括処理実行 "000.cmd"

**********
  000.CMDの記述
変数宣言 固有,整数{&H,&確認}
条件 (0>#配列要素数("x")) 変数宣言 共通,整数{&x=220}
ウィンドウ作成 "000メニュー.WFM",\
位置=(#代入(&x,#mod(&x+25,400)),&x),ハンドル=&H
確認 "開いた",&確認
条件 (.not &確認) 終了
一括処理実行 "メインメニュー.CMD"
29636 Re:一括処理メニューで開いたフォーム等の終了方法 オオタニ 2005/04/13-12:27
記事番号29634へのコメント
佐田さん解決しました
ご指摘のよう調べた所同じ変数名を使っていました
関連している一括定義の変数名チェックし修正したら全て閉じました。
今回は解りにくい質問に対し丁寧に教えて頂き有り難うございました。
又、宮城さんにも早々にアドバイス頂き有り難うございました。
        オオタニ


29647 Re:説明不足の為追記 オオタニ 2005/04/16-09:57
記事番号29635へのコメント
今村さんこんにちわ
ご指摘のような一括処理を作り動作確認しました
閉じてないフォームが見え確認できました。
個々の一括処理をもう一度見直します。
桐を始めた頃には(Ver4)ウインドウ関係がなく
途中中断し再度始めたとき(Ver7)でウインドウが追加され
よく理解しないまま使用していました。
今回は複数の一括処理を一つにまとめメインメニューから自由に
行き来き出来るようした為,問題が表面化したものです
皆様のおかげで理解できました。
有り難うございました。

戻る