過去の桐井戸端BBS (桐ver.7)
6952 処理中である事を表示する方法 ぐるぐる 2000/07/24-18:32
はじめまして。
さっそくですが、桐で併合処理などの重たい処理を行っている時に
「ただいま処理中です。もうしばらくお待ち下さい。」という感じの
ダイアログなどを表示できないものでしょうか?
(画面表示コマンドで私のしたい事はできるのですが、あまり美しくないような気がしまして)
どうか、よろしくお願いします。
バージョンは7.1です。
6953 Re:処理中である事を表示する方法 ぷぷり 2000/07/24-19:55
記事番号6952へのコメント
私は、処理中のフォームを作って、処理が始まるときに表示して、処理が終わったときに消しています。
タイマーみたいに点滅させてもいいとは思いますが重くなりそうなので、ぼくはやっていません。

あと、オブジェクトの属性で境界線の形式を細線にすればいいと思います。
6956 そっかー。 ぐるぐる 2000/07/24-22:25
記事番号6953へのコメント
>私は、処理中のフォームを作って、処理が始まるときに
>表示して、処理が終わったときに消しています。

そういう手があったんですね。
一括処理で何とかしなきゃダメなんだという思い込みがあったせいでしょうか?
目から鱗な気分です。ありがとうございました。

6964 Re:処理中である事を表示する方法 ぐるぐる 2000/07/26-17:11
記事番号6953へのコメント
最初にアドバイスしていただいた時は、これでいけるかもと思ったんですが、

>私は、処理中のフォームを作って、処理が始まるときに
>表示して、処理が終わったときに消しています。

いざ、一括でこのようにやろうとするとうまくいきません。
処理が始まる前にフォームを表示させると、フォームを終了するまで次の処理を行ってくれないので、
意図することと反してしまうんです。
一括の書き方が悪いんでしょうか?
具体的に教えていただけませんか?(こういうコマンドを使うなど)
6965 Re:処理中である事を表示する方法 cheese 2000/07/26-18:59
記事番号6964へのコメント
>具体的に教えていただけませんか?(こういうコマンドを使うなど)

こんにちわ、cheeseです。
ぐるぐるさんはじめまして。皆様にはお久しぶりです。

さて、7.1ですと次のようにすると出来ます。

1.処理中表示をさせるフォームを作成します。
その中に&MESSとかいう文字列のテキストオブジェクトを作成する。
2.次のようなルーチンを作成します。
(ライブラリにしても可)

*--------------------------------------------------------*
手続き定義開始 処理中表示 ()
ウインドウ作成 "処理中.WFM",ハンドル=&処理中
手続き定義終了
*--------------------------------------------------------*
手続き定義開始 処理中更新 ()
ウインドウ更新 &処理中
手続き定義終了
*--------------------------------------------------------*
手続き定義開始 処理中消去 ()
ウインドウ終了 &処理中
手続き定義終了
*--------------------------------------------------------*

そして、処理を実行する部分で

*--------------------------------------------------------*
&MESS="ただいま処理1を実行中"
手続き実行 処理中表示 ()
**(処理するコマンド群) 処理1
&MESS="ただいま処理2を実行中"
手続き実行 処理中更新 ()
**(処理するコマンド群) 処理2
手続き実行 処理中消去 ()
確認 "処理は終了しました。"
と記述します。
*--------------------------------------------------------*

これで、処理1を実行中はフォームのテキストに
"ただいま処理1を実行中"と表示し、処理2に変わったら
"ただいま処理2を実行中"と表示し、処理が終わったら
フォームが消えて確認を表示します。
それでは、ご成功を祈ります。
6966 処理中の表示 佐田 守弘 2000/07/26-22:38
記事番号6952へのコメント
ぐるぐるさん
いくつかの方法があると思います。
ただし、桐ver.7.1ではイベントが使えないための制限によって、うまく行かない場合があります。
(桐ver.7.1がないので、可能かどうかの確認はしていません)

■フォームを表示する
大体においてスマートなのがフォームを表示する方法ですね。
メッセージだけが書かれているフォームをいくつか用意しておき、それらを順に表示したり消したりして行く方法です。
●ウィンドウ作成コマンドでフォームを表示する
メッセージを表示した居場所でウィンドウ作成コマンドを使って、フォームを表示します。
終わったらウィンドウ終了コマンドでフォームのウィンドウを閉じます。
この方法は桐ver.7.1でも可能な方法です。
考え方としては#6965でcheeseさんが書かれている方法と同じなのですが、
手続き定義コマンドを使わず、その度にウィンドウ作成とウィンドウ終了コマンドを書きます。
(7.1では一般手続きは使えなかったのでは?)
●フォームの中のテキストボックスのソース値を変更する
例えば、変数「&メッセージ」のテキストボックスだけのフォームを作り、これを表示します。
&メッセージに表示したい変数を代入すればよいのですが、残念ながら変数の値を変更しただけでは、表示は変わりません。
表示を変更するには「メソッド呼び出し 描画更新」コマンドが必要ですが、これは7.1では使えなかったと思います。
●オブジェクトの色を変えて行く
メッセージは多数用意しておき、処理の進行に従って、表示色を変更し、現在何を行っているかを表示します。
私の「桐で作る名刺管理」の郵便番号変換の処理ではこれを行っています。
ただし、表示色を変更するのに「オブジェクト属性変更」コマンドと
「メソッド呼び出し 描画更新」が必要なので、桐ver.7.1では使えません。

■お奨めは
やはり、やりたい事を実現するには、イベント処理が使える桐ver.8にバージョンアップする方が良いのではないかと思います。
佐田守弘(KS-00119)

6969 Re:処理中である事を表示する方法 toshi-chan 2000/07/26-23:12
記事番号6952へのコメント
ぐるぐるさんこんにちは。

桐ver7発売直後に考えた原始的方法を紹介します。
同じ質問が過去にあって、この方法を紹介したのですが、過去ログには掲載されなかったようなのでもう1度書きます。

まず、文字を表示するためのフォームの定義に入ります。これを「文字.wfm」とします。
次に、テキストオブジェクトを作成します。この時、文字数が多くても十分に表示できるよう、やや大きめに作ります。
最後に、オブジェクトの属性を設定します。ソースとして「&文字」を設定してください。
この「&文字」に、表示させたい文字列を代入するのです。

一括処理は下記の様な感じになります。

    代入 &文字=処理1を実行しています。
    ウィンドウ作成 ”文字.wfm”,ハンドル=&メニュー
(処理1のコマンド群)
    ウィンドウ終了 &メニュー

一括処理の初心者の方でも分かりやすい方法だと思います。基本的な考え方は、cheeseさんの方法と同じです。
6972 なんとかできました ぐるぐる 2000/07/27-09:57
記事番号6952へのコメント
cheeseさん、toshi-chanさん、佐田さん
どうもありがとうございました。
なんとかできました。
これで1つ賢くなりました。

戻る