過去の桐井戸端BBS (桐ver.8)
4437 イベントでのウィンドウ作成について 真太郎 2000/02/04-09:16
お世話になります。VER8sp3です。

オーバーラップのフォームにコマンドボタンを配置し、コマンドボタンには
手続き実行 ***() を設定しております。

ある処理をしてフォーム呼び出しを行うという手続きなのですが、
処理に時間がかかるもので、"処理中" というフォームを表示させたい
と思います。

フォーム呼び出しをするとフォームを閉じないと次の処理にいきません。
ウィンドウ作成をすると 

 桐の違反

   KIRI8 のページ違反です。
モジュール : KIRI8.EXE、アドレス : 015f:004270f3
Registers:
EAX=01baa558 CS=015f EIP=004270f3 EFLGS=00010246
EBX=00000000 SS=0167 ESP=0142fd30 EBP=0142fd54
ECX=01788c40 DS=0167 ESI=00453120 FS=259f
EDX=0043ff08 ES=0167 EDI=00000001 GS=0000
Bytes at CS:EIP:
8b 10 8b c8 89 45 ec ff 92 c4 00 00 00 33 db 8b
Stack dump:
00000001 00453120 00000000 00000000 00453154 004270e0 0142fe28
00438ec4 ffffffff 00453154 5f40c33c 00000000 00453120 00453120
0142fe38 ffffffff

というメッセージがでて強制終了してしまいます。

なにが違反していて、こういう処理はどう処理したらいいものでしょうか?
よろしくお願いします。

4444 Re:イベントでのウィンドウ作成について 悲しげ 2000/02/04-17:27
記事番号4437へのコメント
どもっ、真太郎さん、
「イベントでのウィンドウ作成」一般については、色々難しい問
題を孕んでいるみたいで、私は明快なコメントはできませんが、
それはさておき。

お話からすると、どうも3つのフォームを対象にしているかのよ
うにも取れます。(?_?)
------------
a.wfm…コマンドボタンを配置したオーバーラップフォーム
b.wfm…ある処理をして呼び出すフォーム
c.wfm…"処理中"表示のためのフォーム
----------

>フォーム呼び出しをするとフォームを閉じないと次の処理にいきません。

これはc.wfmのことでしょうか?

>ウィンドウ作成をすると 

これはどのwfmのことでしょうか?
またエラーメッセージが出るのはどのwfm?



実は、上記がどのwfmを指すのかが判っても解決案を提示できる
訳ではありませんけど(^^;)
私なら次のようにすると思います。
処理中表示専用のc.wfmは使わないで、代わりに、a.wfmの任意の
箇所に"処理中…暫くお待ち下さい…"と云う表示をさせます。こ
れは「オブジェクト操作」コマンドで行います。したがって「ウ
ィンドウ作成」をしなくて済みます。

4452 処理中メッセージの表示方法 佐田 守弘 2000/02/04-21:36
記事番号4444へのコメント
真太郎さん
時間の掛る処理の処理中メッセージの表示ですが、やはり悲しげさんが書かれて
いる通り、現在表示されているフォームの中に表示用のオブジェクトを作成して
おき、これで表示するのが最も適切かと思います。

このオブジェクトは、変数をソース値にしておき、変数に「処理中」あるいは「
n%処理中」の様な値を代入する事によって、そのメッセージを表示させます。
そして、このオブジェクトは通常は非表示の状態にしておきます。長い処理の手
続きに入った時に、「オブジェクト操作 設定」コマンドで、非表示から表示に
属性を変更すると共に、表示するテキストに文字列を代入し、進行状況を表示す
るのが良いでしょう。

その他に考えられる方法として、「メッセージボックス」コマンドでメッセージ
ボックスを表示する方法があります。しかしこの方法は、確認を行わなければな
らず、却って面倒だと思います。

佐田守弘(KS-00119)

4474 Re:イベントでのウィンドウ作成について いかすぱげてぃ 2000/02/05-12:17
記事番号4437へのコメント
真太郎さん、こんにちわ。

例えば、ごく単純に次のようなイベントを通してもエラーが発生しますか?

※ a.wfmの[bボタン]へクリックイベントを割りつけ、b.wfmというフォームを
  繰り返しの間の時間だけ表示(単に時間稼ぎ)して、最後にb.wfmを閉じると
  いう簡単な処理です。

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

手続き定義開始 bボタン::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号
,長整数 &フラグ,参照 長整数 &処理中止)
  変数 整数{&bwin},数値{&i}
  ウィンドウ作成 "b.wfm",ハンドル=&bwin,オプション=通常
  メソッド呼び出し ハンドル=&bwin,@フォーム.描画更新()
  繰り返し &i=1,100000
  繰り返し終了
  ウィンドウ終了 &bwin
手続き定義終了
*----------------------------------------------------------------------*

ポイントは「メソッド呼び出し」にて、作成したウインドウを描画更新してやる
ところになります。これをしてやらないと、通常、すべてのイベントが終了しないと
表示されないので、一瞬、チラリと映るだけで終わってしまいます。

ちなみに、フォーム開始イベントや実行コマンド開始時などで、別のフォームを
開こうとすると、かなり高い確率で桐のページ違反が発生しました。
SP3では、まだ試していませんが、一応K3には報告済みです。

4480 Re:イベントでのウィンドウ作成について 悲しげ 2000/02/05-15:17
記事番号4474へのコメント
どもっ、いかすぱげてぃさん、
イベントにおける「ウィンドウ作成」の使用例、おありがとう
ございまする。<(_ _)>
ところで、試していないのになんですが、もし"a.wfm"を「フォー
ム呼び出し」または「モーダルフォーム」として開いていた場合、
"a.wfm"の牡丹から実行する手続きで作成したウィンドウは、背後
にしか表示されないのでは? 違ったかな?(^^;)

4485 Re:イベントでのウィンドウ作成について いかすぱげてぃ 2000/02/05-18:00
記事番号4480へのコメント
悲しげ様、こんにちわ。

>ところで、試していないのになんですが、もし"a.wfm"を「フォー
>ム呼び出し」または「モーダルフォーム」として開いていた場合、
>"a.wfm"の牡丹から実行する手続きで作成したウィンドウは、背後
>にしか表示されないのでは? 違ったかな?(^^;)

そうです。(^^;



4486 Re:イベントでのウィンドウ作成について 真太郎 2000/02/05-18:22
記事番号4444へのコメント
悲しげさんは No.4444「Re:イベントでのウィンドウ作成について」で書きました。
>どもっ、真太郎さん、
>「イベントでのウィンドウ作成」一般については、色々難しい問
>題を孕んでいるみたいで、私は明快なコメントはできませんが、
>それはさておき。
>
>お話からすると、どうも3つのフォームを対象にしているかのよ
>うにも取れます。(?_?)
>------------
>a.wfm…コマンドボタンを配置したオーバーラップフォーム
>b.wfm…ある処理をして呼び出すフォーム
>c.wfm…"処理中"表示のためのフォーム
>----------
>
>>フォーム呼び出しをするとフォームを閉じないと次の処理にいきません。
>
>これはc.wfmのことでしょうか?
>
>>ウィンドウ作成をすると 
>
>これはどのwfmのことでしょうか?
>またエラーメッセージが出るのはどのwfm?
>
>*
>
>実は、上記がどのwfmを指すのかが判っても解決案を提示できる
>訳ではありませんけど(^^;)
>私なら次のようにすると思います。
>処理中表示専用のc.wfmは使わないで、代わりに、a.wfmの任意の
>箇所に"処理中…暫くお待ち下さい…"と云う表示をさせます。こ
>れは「オブジェクト操作」コマンドで行います。したがって「ウ
>ィンドウ作成」をしなくて済みます。
>

悲しげさんありがとうございます。
今の処理では a.wfm から b.wfm を呼び出したいのですが 処理に時間がかかっ
てしまうので、b.wfm  が開くまで c.wfm  を表示させたいということなので
す。

オブジェクト操作でどのような記述で処理すれば 悲しげさんの処理ができるのでし
ょうか?
よろしければご指導お願いできませんでしょうか?


4487 Re:イベントでのウィンドウ作成について 真太郎 2000/02/05-18:28
記事番号4474へのコメント
いかすぱげてぃさんは No.4474「Re:イベントでのウィンドウ作成について」で書きました。
>真太郎さん、こんにちわ。
>
>例えば、ごく単純に次のようなイベントを通してもエラーが発生しますか?
>
>※ a.wfmの[bボタン]へクリックイベントを割りつけ、b.wfmというフォームを
>  繰り返しの間の時間だけ表示(単に時間稼ぎ)して、最後にb.wfmを閉じると
>  いう簡単な処理です。
>
>*----------------------------------------------------------------------*
>名札 メイン
>*
>手続き定義開始 bボタン::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号
>,長整数 &フラグ,参照 長整数 &処理中止)
>  変数 整数{&bwin},数値{&i}
>  ウィンドウ作成 "b.wfm",ハンドル=&bwin,オプション=通常
>  メソッド呼び出し ハンドル=&bwin,@フォーム.描画更新()
>  繰り返し &i=1,100000
>  繰り返し終了
>  ウィンドウ終了 &bwin
>手続き定義終了
>*----------------------------------------------------------------------*
>
>ポイントは「メソッド呼び出し」にて、作成したウインドウを描画更新してやる
>ところになります。これをしてやらないと、通常、すべてのイベントが終了しないと
>表示されないので、一瞬、チラリと映るだけで終わってしまいます。
>
>ちなみに、フォーム開始イベントや実行コマンド開始時などで、別のフォームを
>開こうとすると、かなり高い確率で桐のページ違反が発生しました。
>SP3では、まだ試していませんが、一応K3には報告済みです。
>

いかすぱげてぃさんどうもありがとうございます。
上の処理を下記のように変更してみると

手続き定義開始 bボタン::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号
>,長整数 &フラグ,参照 長整数 &処理中止)
>  変数 整数{&bwin},数値{&i}
>  ウィンドウ作成 "使用中.wfm",ハンドル=&bwin,オプション=通常
>  メソッド呼び出し ハンドル=&bwin,@フォーム.描画更新()
>  繰り返し &i=1,100000
>  繰り返し終了
>  ウィンドウ終了 &bwin
>手続き定義終了
>*----------------------------------------------------------------------*

使用中.wfm が終了しませんでした。
よろしければご指導お願いします。


4488 Re:イベントでのウィンドウ作成について 真太郎 2000/02/05-18:42
記事番号4487へのコメント
真太郎さんは No.4487「Re:イベントでのウィンドウ作成について」で書きました。
>いかすぱげてぃさんは No.4474「Re:イベントでのウィンドウ作成について」で書きました。
>>真太郎さん、こんにちわ。
>>
>>例えば、ごく単純に次のようなイベントを通してもエラーが発生しますか?
>>
>>※ a.wfmの[bボタン]へクリックイベントを割りつけ、b.wfmというフォームを
>>  繰り返しの間の時間だけ表示(単に時間稼ぎ)して、最後にb.wfmを閉じると
>>  いう簡単な処理です。
>>
>>*----------------------------------------------------------------------*
>>名札 メイン
>>*
>>手続き定義開始 bボタン::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号
>>,長整数 &フラグ,参照 長整数 &処理中止)
>>  変数 整数{&bwin},数値{&i}
>>  ウィンドウ作成 "b.wfm",ハンドル=&bwin,オプション=通常
>>  メソッド呼び出し ハンドル=&bwin,@フォーム.描画更新()
>>  繰り返し &i=1,100000
>>  繰り返し終了
>>  ウィンドウ終了 &bwin
>>手続き定義終了
>>*----------------------------------------------------------------------*
>>
>>ポイントは「メソッド呼び出し」にて、作成したウインドウを描画更新してやる
>>ところになります。これをしてやらないと、通常、すべてのイベントが終了しないと
>>表示されないので、一瞬、チラリと映るだけで終わってしまいます。
>>
>>ちなみに、フォーム開始イベントや実行コマンド開始時などで、別のフォームを
>>開こうとすると、かなり高い確率で桐のページ違反が発生しました。
>>SP3では、まだ試していませんが、一応K3には報告済みです。
>>
>
>いかすぱげてぃさんどうもありがとうございます。
>上の処理を下記のように変更してみると
>
>手続き定義開始 bボタン::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号
>>,長整数 &フラグ,参照 長整数 &処理中止)
>>  変数 整数{&bwin},数値{&i}
>>  ウィンドウ作成 "使用中.wfm",ハンドル=&bwin,オプション=通常
>>  メソッド呼び出し ハンドル=&bwin,@フォーム.描画更新()
>>  繰り返し &i=1,100000
>>  繰り返し終了
>>  ウィンドウ終了 &bwin
>>手続き定義終了
>>*----------------------------------------------------------------------*
>
>使用中.wfm が終了しませんでした。
>よろしければご指導お願いします。
>
>
すいません わたしのミスで フォームが閉じなかったみたいです。
このままで処理すると 違反がでて強制終了してしまいました。
ウィンドウ終了の前にフォーム呼び出しで b.wfm を指定すると
b.wfm を閉じる時 使用中.wfm も一緒にとじてうまくいきました。

4490 Re:イベントでのウィンドウ作成について 悲しげ 2000/02/05-19:25
記事番号4486へのコメント
どもっ、真太郎さん

a.wfmの文言を表示したい場所にラベルオブジェクト「a処理中」
なるものを設定しておくとします。標題はヌルでかまいません。
----------------------------------
手続き定義開始 bボタン::マウス左クリック(長整数 ……
 オブジェクト操作 @a処理中.標題="…暫くお待ち下さい…"
 ウィンドウ更新 &hwindow
 ・・・・・・・
 フォーム呼び出し "b.wfm",……
 ・・・・・・・
 オブジェクト操作 @a処理中.標題=""
 ウィンドウ更新 &hwindow
手続き定義終了
-----------------------------------
この場合、重ねて表示されるb.wfmによって、a.wfmの処理中表
示部分がちょうど隠れるようにしたらいいと思います。

別な方法として、「a処理中」の標題を初めから「…暫くお待ち
下さい…」にしておいて、且つ画面表示を「しない」にしておき、
----------------------------------
手続き定義開始 bボタン::マウス左クリック(長整数 ……
 オブジェクト操作 @a処理中.画面表示="1"
 ウィンドウ更新 &hwindow
 ・・・・・・・
 フォーム呼び出し "b.wfm",……
 ・・・・・・・
 オブジェクト操作 @a処理中.画面表示="0"
 ウィンドウ更新 &hwindow
手続き定義終了
-----------------------------------
とか。

あるいは、a.wfmにテキストオブジェクト「t処理中」を設け、
テキストソースを&処理中としておきます。変数宣言時にこの
変数値を空にしておいて、
----------------------------------
手続き定義開始 bボタン::マウス左クリック(長整数 ……
 &処理中="…暫くお待ち下さい…"
 メソッド呼び出し @フォーム.変数変更()
 ・・・・・・・
 フォーム呼び出し "b.wfm",……
 ・・・・・・・
 &処理中=""
 メソッド呼び出し @フォーム.変数変更()
手続き定義終了
-----------------------------------

実際に試した訳ではなく、エディタ上でのなぐり書きですの
で、記述が間違っているかもしれませんが、ま、こんな感じ
でお試し下さい。

ps.
引用は、全文ではなく、必要最小限にしていただきたく……。(^^;)

4508 Re:イベントでのウィンドウ作成について 真太郎 2000/02/06-11:31
記事番号4490へのコメント
>
>実際に試した訳ではなく、エディタ上でのなぐり書きですの
>で、記述が間違っているかもしれませんが、ま、こんな感じ
>でお試し下さい。
>
>ps.
>引用は、全文ではなく、必要最小限にしていただきたく……。(^^;)
>
悲しげさん本当にありがとうございます。
早速自分なりに試してみたいと思います。


戻る