• 締切済み

プログレスバーについて

VBで開発をしているのですが、一つの処理(関数)で時間のかかる処理があって、その経過をプログレスバーで表示させようと思ってるのですが、関数内の処理の進み具合を表示することってできるのでしょうか? ちなみに、関数はDLLです。 何かよい方法がありましたら、教えていただきたいと思っております。よろしくお願いします。

みんなの回答

回答No.2

DLL側が何でできているかがわかりませんが、 VBのActiveXDLLでできているのであれば、DLL側からイベントを発行させればできるじゃないかな?(WithEvents) CのDLLでできているのであれば、Cの中で別スレッドで実行して、VB側が進捗要求を求めてあげればできると思いますよ。 VB側でクリエイトスレッドで別スレッドでやる方法もあると思うけど、安定しないと思います。 手法だけで実現するなら、EXEを分ける方法もあると思います。   A.Exe(メイン)   B.Exe(サブ)   C.DLL(関数) を用意して   A.ExeがB.Exeをキック   B.ExeがC.DLLを実行   C.DLLは進捗をログ出力(メモリに吐いても可)   A.EXEはC.DLLのログを読み取って、進捗をプログレスバーに表示

hiko758
質問者

お礼

ありがとうございます。 DLLはVBのActiveXDLLなのですが、できれば今になってソースを触りたくないので、ログでチャレンジしてみます。 とても参考になりました。ありがとうございました。

  • takasebou
  • ベストアンサー率42% (61/144)
回答No.1

DLLの一つの関数の処理のすすみ具合を実際に判断する事は不可能でしょう。 プログレスバーで表示するとすれば、概算でだいたい処理に掛かる時間を想定しておいて、一定時間おきに値を更新していくしかないと思います。 その後、処理が終わればプログレスバーの値をMAXにすればいいと思います。

hiko758
質問者

お礼

早速お答えいただきありがとうございました。

関連するQ&A

  • プログレスバーの表示方法

    VB6.0 SP5 WINDOWS2000 で開発しています。 処理中のフォームをEnabled=Falseにして、 プログレスバーだけを別のフォームに表示させて、 処理中はプログレスバーのValueをどんどん増やす。 終わるとプログレスバーのフォームを閉じて、 処理してたフォームをEnabled=Trueにしるのですが、 プログレスバーを表示させてるフォームが、変なんです。 プログレスバーが増えている状態の時、 そのフォームが透けてるような、後ろのフォームとまざってるような、 そんな感じになるんです。 これをきれいに表示させたいのですが、何か良い方法はないものでしょうか?

  • プログレスバー

    アクセス+VBAです。 処理に時間がかかる場合に横のバーの進み具合で表示するのをプログレスバーっていうんでしょうか? それを、アクセスで利用できませんか? 方法を教えて下さい。

  • プログレスバーについて

    プログレスバーについて .NET C#で開発をしています。 初心者です。 オラクルからデータを取得し、SPREADに表示させるまでの 待機時間に、現状は砂時計を表示させているのですが、そこを プログレスバーにしたいと思っているのですが、 使った事がありません。 ネットで探しても難しく書かれていたりして今一理解出来ません でした。どなたかご親切な方に簡単なサンプルコードを ご教授頂けませんでしょうか。 宜しくお願い致します。

  • プログレスバー

    プログレスバーの進み具合ですが、スキャン実行後1時間ぐらいでほとんど(99%)進みましたがそれからが8時間たってもファイルをチェックしています。プログレスバーはどういう仕様で進んでいるのですか? ※OKWAVEより補足:「ESETセキュリティ ソフトウェア シリーズ」についての質問です。

  • プログレスバーについて

    お世話になっています。初心者VBプログラマーです。 5MB~10MBのファイルをコピーをするプログラムを作成しているのですが、やはりコピーには時間がかかるのでプログレスバーを作成することになりました。 ひとつのファイルをコピー中例えば、10MB中○○%コピー出来たかと、プログレスバーで表現できますか? DoEventsを利用するのでしょうか? 詳細サイトがありましたら教えてください。

  • プログレスバーの再描画について

    現在,画像データの変換ソフトを作っており,変換計算中に,変換されたファイルの経過状態を示すためにプログレスバーをつけております. プログレスバーは,経過状態に合わせて正常に動作するのですが,別のウィンドウ等に切り替えたりした時にプログレスバーの動作が止まってしまい,変換が終了したときにプログレスバーの終了状態だけが表示されてしまいます. そこで,質問なのですが,どのようにしたらウィンドウを切り替えたときなどにもプログレスバーが再描画されるでしょうか? 現在,変換計算とプログレスバーを別スレッドにはしていないのですがそれが原因なのでしょうか. 現在の環境はWindowsXP VisualC++6.0です. ご教授お願いいたします.

  • PHPでDB処理中にプログレスバーを出したい

    Ajax初心者です。 PHPでDB処理が長くブラウザタイムアウトが発生してしまう為 DB処理中はブラウザに処理中画面(プログレスバー表示有り)を 表示したいのですが、Ajaxを使ってプログレスバーを動かす 方法があれば方式を教えてください。

  • Access プログレスバー 画面固まる

    Access 2007 VBA でファイル出力処理が長いため、以下を参考にしてプログレスバーを設置しました。 http://www.moug.net/tech/acvba/0060023.htm 1,000件程度だと進行状況がちゃんと表示されるのですが、10,000件単位になるとAccess自体が応答せず、プログレスバーも途中で止まったまま、だけど処理は裏で動いているようでファイル出力自体は時間はかかりますがちゃんと出力されます。 DBアクセスを含んだファイル出力処理なので、多少時間がかかっているのかと思います。 また、私の技術の低さから処理自体に時間がかかってしまっていることもあると思いますが、私の技術では処理自体を変えて早くするのは限界です。 Access画面が固まらず、リアルタイムでプログレスバーを進行させる手段等ございましたらご教授いただけるとありがたいです。

  • C# or VB プログレスバー

    プログレスバーで進行状況を表示する処理を入れています。 http://dobon.net/vb/dotnet/programing/progressdialog.html 上記のサイトをパクってとりあえず作ってみました。きちんとできているのですが 1つだけ問題があって try { ProgressDialog pd = new ProgressDialog(); //ダイアログのタイトルを設定 pd.Title = "カウントアップ"; //プログレスバーの最小値を設定 pd.Minimum = 0; //プログレスバーの最大値を設定 pd.Maximum = 10; //プログレスバーの初期値を設定 pd.Value = 0; //進行状況ダイアログを表示する pd.Show(this); //処理を開始 for (int i = 1; i <= 10; i++) { //プログレスバーの値を変更する pd.Value = i; //メッセージを変更する pd.Message = i.ToString() + "番目を処理中..."; //キャンセルされた時はループを抜ける if (pd.Canceled) break; //1秒間待機する(本来なら何らかの処理を行う) System.Threading.Thread.Sleep(1000); } //ダイアログを閉じる pd.Close(); } catch { MessageBox.Show("error"); } こんな感じで使い、プログレスバー表示中に例外が走るとMessageBoxがモーダレスで 表示されてしまいます。プログレスバー表示前だとモーダルのままです。 色々調べたところ原因は裏でスレッドが走っているからだと思います。たぶん・・ ところが対処法となると少々困っています。モーダルでMessageBoxを表示させたいのですが どうすればよいのでしょうか?教えてください。

  • 探しています~プログレスバーのまき戻しについて

    何か処理中のものがあり、進捗状態がプログレスバーに表示されているのですが、キャンセルボタンを押すとその処理を中断できて、それまで進んでいたプログレスバーの進捗が徐々に減っていき、最終的にゼロに戻るという仕組みの画面というか、UIを探しています。 ソフトのインストールとかファイルのコピーとか色々探しているのですがなかなか見つかりません。 似たような動作をするプログラムを作りたいので参考にしたいのですが・・・。 どなたか知っている方がいれば教えてください!