• 締切済み

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

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

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス ・プログレスバーの進行状況を進めるときどう処理していますか。  PBM_STEPIT メッセージを送っているのですか?  仮に PBM_STEPIT メッセージで 1 ステップ進むならば  PBM_GETPOS メッセージで現在の進行状況のステップ数を取得します。  ここからデクリメントで PBM_SETPOS メッセージで巻き戻しを  プログラム的に演出できると思います。  まずはどの言語ですか?  補足して下さい。

参考URL:
http://msdn.microsoft.com/en-us/library/bb760818.aspx
PIRIKA503
質問者

お礼

回答ありがとうございます。 ちょうど今日、この問題が解決しました。 せっかく回答をつけて下さったのに申し訳ありませんが、質問を締め切らせていただきます。

関連するQ&A

  • C#でプログレスバーを作るには?

    C#でプログレスバーを作るにはどうしたらいいのでしょうか? 例えばいくつものファイルをコピーする処理をしているプログラムがあるとします。 そういったときプログレスバーをどうカウントアップさせていけばよいのでしょうか?

  • プログレスバーで処理進捗を反映させたいが・・・泣

    backgroundWorkerで重たい処理をさせたいのですが、どのようにプログレスバーを噛ませてあげたらいいのか悩んでいます。 重たい処理はこんな感じです。 (ソースが今のPCに無いので大雑把な内容でお許し下さい) このページを参考にしています。 http://www.atmarkit.co.jp/fdotnet/dotnettips/436bgworker/bgworker.h... 処理自体は仕様通りに出来ています。 どうしても大きいファイルなど操作するのでどうしても時間を要します。 そのため、ファイルコピーなどの各処理が終わるたびにプログレスバーに反映させたいのですが、参考にしているページだとforを用いたループでやっているのでどうやったらいいのか悩んでいます。 (単に想像力が足りないのかもしれませんが・・・) どのようにするといいか教えていただけませんでしょうか? //処理内容 ファイル読み込み ファイルコピー テキスト開く 1000行書きこむ(繰り返しでかけないので1行1行書き込み) テキスト閉じる ファイル読み込み ファイルコピー ファイルの内容を検査して間違いを修正 ファイルをリネーム ファイルを指定したサーバのパスにバラ撒く ・ ・ ・ ・ ・ こんな類似処理を何千回もする

  • C# プログレスバーに関すること

    先ほどご質問させて頂いた件で1つ解決していなかったのですが質問のほうを閉じてしまいました. なので,もう一度ご質問させて頂きます. ic += 1; //プログレスバーの設定 //最小値 int minimum = 0; //最大値 int years = iYearE - iYearS; int hours = iHourE-iHourS; int iiMinute = iiMinuteE-iiMinuteS; int Maximun = (years+1) * Maxmonth * Maxday * (hours+1) * (iiMinute+1); progressBar1.Style = ProgressBarStyle.Continuous; progressBar1.Minimum = minimum; progressBar1.Maximum = Maximun; progressBar1.Value = ic; label8.Text = (ic / Maximun)*100 + "%処理中"; if (ic/Maximun==1) { label8.Text = "終了"; 上記の様なプログラムを組んでプログレスバーを表示させているのですが,問題はラベルの中が 変動せずに,プログラスバーがすべてたまるまで0%で,たまった瞬間に100%になってしまいます. どうすればラベルのほうの数値を徐々に大きくしていけるのでしょうか? どなたかご教示お願いたします. }

  • スレッド処理からダイアログを表示するには?

    Windows XPとVC++ 6.0で 時間のかかる大量の計算をするプログラムを作っています。 計算部分はスレッド処理にして 進捗ダイアログ(CDialogにCProgressCtrlを貼り付けたもの) を表示します。 ・CWinAppのInitInstanceで計算処理開始(AfxBeginThread) ・計算処理内で進捗ダイアログをCreate ・計算の進み具合によって進捗ダイアログのプログレスバーを更新 上記の流れではうまくいっていたのですが 以下のように変更したところ、進捗ダイアログをCreateするところで プログラムが応答なしになってしまうようになりました。 ・メインダイアログ(モーダル) ・メインダイアログのAボタンクリックでダイアログAを開く(モーダル) ・ダイアログAの実行ボタンクリックで計算処理開始(AfxBeginThread) ・計算処理内で進捗ダイアログをCreate ・計算の進み具合によって進捗ダイアログのプログレスバーを更新 MFC Wizardでダイアログベースで作成、MFCの共有DLLを使用しています。 モーダルダイアログ→スレッド→CDialog.Createに 制限があったりするのでしょうか。 どうかご教授ください。

  • AS3.0でのプログレスバーの制御について。

    お世話になります。 WinXP professional Adobe Flash CS4 Action Script 3.0 という環境で作業をしています。 現在仕事でwebサイトを制作しており、そのサイトのエントランスページにFlashアニメーションを設置しました。 大きめの画像を相当数使用しswfのサイズが大きめになったため、ロードの進捗状況がわかるようにしたいと思い下記の質問↓ http://oshiete1.watch.impress.co.jp/qa5104962.html を参考にプログレスバーをタイムラインの1コマ目に設置しました。 そこまでは良かったのですが、その後実際にサーバーにUPして確認してみたところ、最初は真っ黒な画面になるだけで何も表示されず(ステージの背景色を黒にしています)ロードが80%を超えたあたりから急にバーが表示されます。 この現象に関してもgoogleなどで検索し、下記 http://blog.2inc.org/2007/05/flash.html http://okwave.jp/qa/q1505484.html を参考にムービークリップを修正してみたのですが一向に症状が改善されません。上記の質問はAS2.0での症状ですので、AS3.0では対処法が異なるということなのでしょうか? ちなみに、現在制作しているアニメーションにはflash eff 2.0というエフェクトライブラリも併用しています。加えて、アニメーションは極力スクリプトを使用せずタイムラインでほぼ完結しています。それらもプログレスバーが上手く動作しない原因でしょうか? 会社の先輩にも質問をしてみたのですが、原因がわからないとのことでしたので此方で質問をさせて頂きました。 どうかお力添えをいただければと思います。

    • ベストアンサー
    • Flash
  • C#のフォームについて

    http://dobon.net/vb/dotnet/programing/progressdialog.html 上記のサイトを元にプログラムを作成したのですがうまくいきません。 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; //時間のかかる処理 //時間のかかる処理 //時間のかかる処理 } //ダイアログを閉じる pd.Close(); 上記のコードの場合、ループ毎の最初にキャンセルかどうかの条件が書かれているため、ループ処理の途中にキャンセルを押してもきかない時があります。 処理中は常にキャンセルかを監視し、押されたらすぐにキャンセルできるようにしたいのですが、どのようにしたらいいのでしょうか。

  • C#でスレッド実行中のイベントについて

    メインフォームの「処理開始ボタン」をクリックすると別スレッドが起動して、そのスレッド中で重たい処理をさせ、処理中に「中断ボタン」をクリックすると中断してアイドル状態に戻る様なプログラムについてですが、 先ず、Invokeを使わずに直接スレッドを起動すると期待通りの動作となり、Thread.Sleep()中でもボタンクリックのイベントが発生します。 しかし、Invokeとデリゲートを使ったスレッドを起動させるとスレッドの処理が終了するまでイベントが発生せず、行ったきり状態になってしまいます。 処理ループ内にAplication.DoEvent()を入れるとイベントが発生する様になりますが、Thread.Sleep()中はフリーズ状態となります。 Invokeを使ったスレッドでも、Invokeを使わない場合と同じ動作をさせる方法があれば教えて頂けないでしょうか。 どうぞ宜しくお願いします。

  • javaがインストールされない

    こんにちは 無料と言うことなのでjavaをインストールしようと思ったのですが javaセットアップ-進捗 とタブに出ており ステータス:javaをインストールしています と出ており途中まではいい感じに進むのですがある一定のところまで来ると java セットアップ-プログラムの終了 と新しいウィンドウが出てきて 終了する必要があると表示されるのが javaセットアップ-進捗 とリストアップされるのですが プログラムを終了して続行 にしても 後で にしても結局中断されてインストールされません 色々調べてもなかなかしっくりくるものがなく困っております どうか助言をよろしくお願いします

  • エラーについて

    ラベルマイティ8をインストールしょうとするとエラーがでてしまいこまっています。 「管理アプリケーションの認証UIは動作しなくなったためとじられました」 「ISツールAUTO PLAYプログラムは動作をていししました。」 このようなエラーがでてしまいます。なぜなんでしょうか。

  • 「VC++6」ウィンドウの再描画

    VC++6を使って簡単なプログラムをダイアログベース作っています。 内容はリストを読み込み、1件ずつDBにSQLを発行して情報を取得していくという内容です。 画面には、プログレスバーも設置しており、普通に操作すると正常に、プログレスバーも動きます。しかし、いったん別のウィンドウをアクティブにして、作成した動作中のプログラムを再選択しても、画面は壊れたまま再描画されません。しばらくまって、リストのSQL発行が終わって、画面に結果が表示されたら、きちんと再描画されます。 そこまで処理が終わったら、他のウィンドウに切り替えて戻ってきても画面が壊れることはありません。 時間がかかるプログラムなので、動作中に別の仕事をするため、アクティブでなくても、きちんとウィンドウを更新したいのです。 ちなみに、ループ処理中にRedrawWindow();を入れてみましたがダメでした。 アドバイスよろしくお願いします。

専門家に質問してみよう