過去の桐井戸端BBS (桐ver.9)
28934 イベントでウィンドウ作成を実行するとフォームの枠だけで中の文字が表示されないものが表示される おさる 2005/02/04-21:33
メニューフォームのコマンドボタン左クリックイベントに、記述したイベントです。

var 長整数{&ハン}
ウィンドウ作成 "A.fwm" ハンドル=&ハン.編集表=しない
手続き実行 A処理()
ウィンドウ終了 &ハン
表 "B゛
ウィンドウ作成 表 ハンドル=&ハン.オプション=最大化

Aフォームは、゛処理中"のラベルだけのフォームです。

実行するとAフォームは表示されるのですが、フォームの枠だけで中の文字が
表示されない半透明のようなフォームが表示されてしまいます。
A処理が終了すると、Aフォームが閉じてB表は開きます。

いろいろ試したのですがダメです。
どなたかよろしくお願いします。

ちなみに、桐V9.2004です。



28936 Re:ウィンドウ作成 宮城 2005/02/05-09:25
記事番号28934へのコメント
>ウィンドウ作成 "A.fwm" ハンドル=&ハン.編集表=しない

ウィンドウ作成 "A.wfm" ハンドル=&ハン,編集表=しない

の転記ミスですね。これを修正するとなんてことはなく表示されるので、
問題はA.wfmがどうなっているかだけのように思います。
補完BBSに現物アップすればコメントがつくかもしれません。このままじゃちょっと見当がつきません。

28937 Re:ウィンドウ作成 宮城 2005/02/05-09:34
記事番号28936へのコメント
そもそも、A.wfmって単体ではきちんと表示されるんでしょうか?

ラベルってのがテキストオブジェクトの間違いで、「表示」のタブの「フォーカス設定可能」が「使用不可表示」になってるとか?

# フォームの枠だけで中の文字が表示されない半透明のようなフォーム

これを字義通りとると、「文字はまったく表示されない」「フォームが半透明」ということだから違うか?
28938 フォーム呼び出し ONnoji 2005/02/05-10:30
記事番号28934へのコメント
おさるさん、こんにちは。

>ウィンドウ作成 "A.fwm" ハンドル=&ハン.編集表=しない
>手続き実行 A処理()
>ウィンドウ終了 &ハン

というのは、一見すると上手くいきそうですが、
私の経験では、まったく効果がありませんした。(^^ゞ
これは、桐ver.8 でも 桐ver.9 でも同じだと思います。

おそらく、「処理中...」のウィンドウを前面に出して、
A処理()を実行したいのだと思います。

この場合は、以下のように試されたらいかがでしょうか。

1.
*------------------------*
var 長整数{&ハン}
フォーム呼び出し "A.wfm"
表 "B゛
ウィンドウ作成 表 ハンドル=&ハン,オプション=最大化
*------------------------*

として、※A.wfm をモーダルフォームとして開きます。

2.
"A.wfm" のイベント処理に、A処理()を用意します。

3.
次のコマンドボタンを作ります。
 機能名      機能パラメータリスト
[1]手続き実行   A処理
[2]なし
[3]なし
[4]なし

4.
フォームのオブジェクトの属性の[オプション]タブの
[開始時実行]コマンドでこのコマンドボタンを指定します。

5.
なお、モーダルフォームはEscキーを押すと閉じますので、
その対策も必要になるかと思います。ご注意ください。

<追伸>

ご紹介した方法は仕掛けが面倒なのが欠点ですが、
確実に動作するのが強みです。

「処理中...」は一種のプログレスバーみたいなものですね。
というよりもプログレスメッセージでしょうか?

A処理の内容によりますが、内容次第では、
"A.wfm"をプログレスバーに出来るかもしれません。

もしも、プログレスバーにご興味があれば、
誠に手前味噌ですが、以下の拙作をご参照ください。(^^ゞ

プログレスバー 前編
http://www.geocities.jp/siliconvalley_bay_7565/procedure03.htm

プログレスバー 後編
http://www.geocities.jp/siliconvalley_bay_7565/procedure04.htm


<参考>

過去の桐井戸端BBS (桐ver.9)

25702 イベントで処理中に「処理中」のダイアグロボックスを表示させたい
2004/03/30
http://www.fuku3.com/~habata/kbbs/kakov9/25702.htm

28950 Re:フォーム呼び出し おさる 2005/02/06-17:00
記事番号28938へのコメント
やりたいことは、まさにONnojiさんの言うとおりです。
何故あの記述では、ダメなのでしょうか?エラーがでるわけでもないのですが。
ONnojiさんの方法でやってみた所、フォームは表示されるのですが、やはり最初は
フォームの枠だけで、中のラベル表示されず、手続き実行の処理が終わる寸前に
中のラベルが表示され、表が表示されます。
以前は、まったく中のラベルが表示されなかったので、それよりはずっと良いのですが、
何故そうなるのでしょか?
手続き実行の処理の内容が、影響してるのでしょうか?
 ちなみに、Aフォーム単独では、問題なく表示されます。

 それで方法をかえて、メニューフォームに非表示にしたラベルAを配置して
左クリックイベントに

オブジェクト操作 @ラベルA.画面表示=1
手続き実行 処理A()
オブジェクト操作 @ラベルA.画面表示=0
表 "表A"
ウィンドウ作成 表 ハンドル=&ハン,オプション=最大化

 
 と、記述した所ラベルAは、まったく表示されず表Aが表示されます。
これもどこかおかしいのでしょうか?

よろしくお願いします。

28951 再描画]メソッド、[描画更新]メソッド ONnoji 2005/02/06-18:36
記事番号28950へのコメント
おさるさん、こんにちは。

何故?と問われても、
私の経験的にはそうとしか言いようがありません。(^^ゞ

>ONnojiさんの方法でやってみた所、フォームは表示されるのですが、やはり最初は
>フォームの枠だけで、中のラベル表示されず、手続き実行の処理が終わる寸前に
>中のラベルが表示され、表が表示されます。
>以前は、まったく中のラベルが表示されなかったので、それよりはずっと良いのですが、
>何故そうなるのでしょか?

処理Aを動作させないで状態で、
モーダルフォームでラベルが表示されるか否か調べてみたらいかがでしょうか。

※下に書いた[再描画]メソッド、[描画更新]メソッドも参照してください。

>オブジェクト操作 @ラベルA.画面表示=1
>手続き実行 処理A()
>オブジェクト操作 @ラベルA.画面表示=0
>表 "表A"
>ウィンドウ作成 表 ハンドル=&ハン,オプション=最大化
> と、記述した所ラベルAは、まったく表示されず表Aが表示されます。
>これもどこかおかしいのでしょうか?

ラベルAというオブジェクトが自身のフォームに配置してあれば、
次のように試したらいかがでしょうか?

 :
オブジェクト操作 @ラベルA.画面表示=1
メソッド呼び出し @ラベルA.再描画( 1 )
メソッド呼び出し @フォーム.描画更新() /* フォームは半角カナ */
手続き実行 処理A()
オブジェクト操作 @ラベルA.画面表示=0
メソッド呼び出し @ラベルA.再描画( 1 )
メソッド呼び出し @フォーム.描画更新() /* フォームは半角カナ */
表 "表A"
 :


28953 サンプルをアップしました。 ONnoji 2005/02/06-22:22
記事番号28951へのコメント
おさるさん、こんにちは。

サンプルをアップしました。

よろしければご参考にしてください。



----------------------------------------
おさるさん江

sample.wfm を開いてください。

ファイルは桐ver.8 です。

桐ver.9 でも使えます。


---------------------------------------

28964 Re:ウィンドウ作成 アックン 2005/02/07-13:52
記事番号28934へのコメント
おさるさん、こんにちは。

ウィンドウ作成コマンドに続けて、
  method ハンドル=&ハン , @フォーム.再描画( 0 )
  method ハンドル=&ハン , @フォーム.描画更新()
の2行を入れると、ラベルが正しく表示されます。

サンプルをアップしましたので、試してください。



------------------
ウィンドウ作成-おさる(2/4-21:33)No.28934 サンプルです。
起動フォームは"20050207ウィンドウ作成MENU.wfm"です。
桐V9-2005(2004SP2)対応

------------------

なお、下記イベントの手続き「A処理」中の
    method ハンドル=&ハン , @フォーム.再描画( 0 )
    method ハンドル=&ハン , @フォーム.描画更新()
は、今回のラベル表示しない件には直接関係なくて、
ラベルの隣に配置したテキストオブジェクトの変数値をカウント表示するためのものです。
@フォームの代わりに@テキスト_1にするか、または変数更新メソッドにすればよかったかも。(今気づいた。(^^;
まぎらわしくてすみません。
ところで、こういうときはモーダルフォームの方が適していますよ。


手続き定義開始 コマンドボタン_3::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,
長整数 &フラグ,参照 長整数 &処理中止)
  var 長整数{&ハン}

  ウィンドウ作成 "20050207ウィンドウ作成A.wfm" ハンドル=&ハン , 編集表=しない
/* ↑ ドットをコンマに変更(明かな書式間違い) */

  method ハンドル=&ハン , @フォーム.再描画( 0 )
  method ハンドル=&ハン , @フォーム.描画更新()
/* ↑ この2行を追加 */

  手続き実行 A処理( &ハン )
/* ↑ 動作確認のため一部変更 */

  ウィンドウ終了 &ハン
  表 "20050207ウィンドウ作成B.tbl"
  ウィンドウ作成 表 ハンドル=&ハン , オプション=最大化
/* ↑ ドットをコンマに変更(明かな書式間違い) */

手続き定義終了

proc A処理( 長整数 &ハン )
  for &秒=0,1000,1
    method ハンドル=&ハン , @フォーム.再描画( 0 )
    &秒 = 1+&秒
    method ハンドル=&ハン , @フォーム.描画更新()
  end
end

28965 Re:フォーム呼び出し アックン 2005/02/07-14:03
記事番号28950へのコメント
おさるさん>
ちょっと横から失礼します。

>何故あの記述では、ダメなのでしょうか?エラーがでるわけでもないのですが。

先ほど私からサンプルをアップしましたが、以下その動作テスト中にわかったことです。
手続きAに確認コマンドを書いたところ、処理中の表示がすぐに出ました。
手続きAに時間がかかる繰り返しコマンドを書いたところ、処理中の表示が出ず、ウィンドウの枠だけ表示されました。

>手続き実行の処理の内容が、影響してるのでしょうか?
そうだろうと思います。

28980 Re:ウィンドウ作成 おさる 2005/02/07-21:50
記事番号28934へのコメント
ONnojiさん、アックンさん ご意見ありがとうございます。
ONnojiさんの書かれた通り、描画更新メソッドを使った所うまくいきました。
処理Aを省くと、描画更新メソッド無しで普通に表示されます。
まさに、アックンさんのおっしゃる通り処理Aは、繰り返しコマンドがある処理です。

お二人のサンプル大変参考になりました。
またよろしくお願いします。ありがとうございました。

28982 個人的な感想を述べさせていただきます ONnoji 2005/02/07-23:46
記事番号28980へのコメント
おさるさん、こんにちは。

あくまでも、私( ONnoji )の個人的な感想を述べさせていただきます。

私( ONnoji )は、このような場合には、
モーダルフォーム側で処理するのが理にかなっていると思います

<追伸>

これはタラレバの話ですが…

もしも、モードレスウィンドウのままでやろうとすれば、
いろいろと大変だろうと思います。
今回のような場合には、
私( ONnoji )ならば、絶対にモーダルウィンドウで対処します。

今回の投稿は、私にもいろいろ勉強になりました。

それでは失礼します。(@^^)/~~~


28983 Re:個人的な感想を述べさせていただきます アックン 2005/02/08-09:39
記事番号28982へのコメント
ONnojiさん>
ぼくも同じ意見です。モーダル使うべし。(しつこいかな(^^;

戻る