Win-XP+Delphi PersonalでDelphiを開始したものです。
現在下記のようなアプリを作っています
1.最初に表示したい画面(現在はPanel1を表紙にしている)を配置しRefreshをする。
2.見えないところで次に出る画面を配置。
3.必要なファイルを読み込んで計算などの処理→この時に表紙にプログレスバーもどき(自作)で進行状況を表示(の予定が表示されない)
4.表紙を取り去って本体ページを表示
ということを予定していましたがコントロールが多数あったりするせいか何も表示されないまま(表紙がほんの僅か現れて)いきなり4が出てしまいます。
一度表示されてから違うファイルを読み込む時は予定通りの表示が出るのですがこのような時の定番の方法があったら教えてください。
軽い表紙のFormを立ち上げておいてから裏で作業を進めれば、と思うのですが一つのForm、一つのPasで書く方法しか知りませんのでこんなことになってしまっています。複数のFormを操作する方法、そのときの変数のスコープなどについていろいろ探してみましたがわかりませんでしたのでよろしくお願いします。サンプルコードなどの情報があったらこれも教えてください。
YourProgressBar.Invalidate;
をしてみる
Application.ProcessMessages;
で他のコントロールにメッセージを回してみる
などは試しました?
Timer1のEnabledはFalseにしておいて・・・
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 10;
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
//ここにやりたいことを書く
while True do begin
ProgressBar1.Position := ProgressBar1.Position + 1;
Application.ProcessMessages;
sleep(10);
if ProgressBar1.Position >= ProgressBar1.Max then Break;
end;
end;
とやるのがお手軽です。
(いまいち気持ちのいいものではないですけど・・・)
む様、deldel様、ご回答をありがとうございました。
二つの方法で何度も試してはいるのですが上手く行きません。アドバイスをいただいたキーワードで調べてみましたが考え方としては
1.割り込み許可を与えて表紙画面が表示される時間を確保。(VBのDoEvents的なもの?)
2.再描画して表示を確実にする。
3.タイマーで表示させるイベントを強制的に発生させて表示。
というものと理解しましたがどこかに問題があるのかもしれず上手く表示されません。起動直後の見栄えは問題あるものの本体部分は問題なく動いていますので完成までの間に教えいただいたキーワードを頼りにこつこつといじってみます。 ありがとうございました。
ツイート | ![]() |