過去の桐井戸端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. >引用は、全文ではなく、必要最小限にしていただきたく……。(^^;) > 悲しげさん本当にありがとうございます。 早速自分なりに試してみたいと思います。 |