關於Now Loading Form的製作 |
答題得分者是:Justmade
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
請問,
目前從 MainForm 到 Form1建立好並載入資料時,
會花一些時間。
所以在MainForm打開Form1時,會先建立一個Now Loading的表單。
但是打開Now Loading的表單時,雖然Form有被畫,
Label1上的字卻不會改變(程式在下面的FR05),
請問要如何修改?
程式如下,FR05就是now loading的Form try
FR05Form := TFR05Form.Create(Application);
FR05Form.Show;
Application.ProcessMessage;
Form1 := TForm1.create(Application);
TMainForm(MainForm).Hide;
FR05Form.Free;
Form1.ShowModal;
finally
TMainForm(MainForm).Show;
Form1.free;
end; 因為在Form1的create有很多東西要跑,
所以要顯示一個Now Loading的Form,
而該Form的程式如下(FR05) unit FR05; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls; type
TFR05Form = class(TForm)
Label1: TLabel;
Timer1: TTimer;
procedure FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
I_Count : integer;
{ Private declarations }
public
{ Public declarations }
end; var
FR05Form: TFR05Form; implementation {$R *.dfm} procedure TFR05Form.FormShow(Sender: TObject);
begin
I_Count := 3;
Label1.Caption := '目前資料讀取中...';
Timer1.Enabled := true;
Application.ProcessMessages;
end; procedure TFR05Form.Timer1Timer(Sender: TObject);
begin
Inc(I_Count);
if I_Count > 3 then
I_Count := 0;
case I_Count of
0 : Label1.caption := '目前資料讀取中';
1 : Label1.caption := '目前資料讀取中.';
2 : Label1.caption := '目前資料讀取中..';
3 : Label1.caption := '目前資料讀取中...';
end;
Application.ProcessMessages;
end; end. 原本以為只要一了Application.ProcessMessages;
就應該可以正常顯示,
請問是否有什麼解決方法。 ----------------
快滿一年程設師,
日日工作寫程式,
每買樂透眼框溼,
望能早成系分師。
---------------- 發表人 - skurama 於 2003/05/12 15:40:55 發表人 - skurama 於 2003/05/12 15:50:07
------
---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ---------------- |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 請問, 目前從 MainForm 到 Form1建立好並載入資料時, 會花一些時間。 所以在MainForm打開Form1時,會先建立一個Now Loading的表單。 但是打開Now Loading的表單時,雖然Form有被畫, Label1上的字卻不會改變(程式在下面的FR05), 請問要如何修改? 程式如下,FR05就是now loading的Form我想您應該要加上紅色那行吧!try FR05Form := TFR05Form.Create(Application); FR05Form.Show; FR05Form.Update; Application.ProcessMessage; Form1 := TForm1.create(Application); TMainForm(MainForm).Hide; FR05Form.Free; Form1.ShowModal; finally TMainForm(MainForm).Show; Form1.free; end;
------
將問題盡快結案也是一種禮貌! |
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
供参考!!! unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormShow(Sender: TObject);
var
i:integer;
SplashForm : TForm;
LB:TLabel;
begin
SplashForm := TForm.Create(Application);
LB := TLabel.Create(SplashForm);
try
SplashForm.Height := 100;
SplashFOrm.Width := 300;
SplashForm.BorderStyle := bsNone;
SplashForm.position := poDesktopCenter;
LB.Parent := SplashForm;
LB.Caption := '正在準備資料庫,請稍侯... ';
LB.Top := 40;
LB.Left := 20;
SplashForm.Show;
Application.ProcessMessages;
{
你的操作
for i:=1 to 1000 do
label1.Caption:=label1.Caption+'1';
....
}
finally
LB.Free;
SplashForm.Free;
end; end; end. 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
To danny 大大:
我試著加入你說的那一行,
可是仍然只是顯示出FR05的Form和其Label一開始的字,
並沒有辦法讓FR05的Timer的程式有任何作用。 To wnhoo 大大: 我也試著加入你的程式,
可是你的方法好像是把Now Loading的Form改成動態建立,
建立後再顯示1~1000,
最後才能建立Form1。
可是我慢是慢在Form1 := TForm1.create(Application);
(因為Create寫很多讀資料庫並做一些計算的程式,
大概要花二~五秒多[看電腦],
如果一直停在主畫面時,怕有的客戶會以為當了,
所以想做now loading) 我主要做到如下:
1.FR05必需在TForm1建立之前被建立並顯示。
2.建立TForm1時,讓FR05上的Label可以不斷的改變文字。
3.TForm1建立完,讓FR05消失。
4.TForm1顯示。 而目前1、3、4都正常,但是步驟2上的文字沒有
辦法利用FR05 Form上的Timer不斷的改變,
請問有什麼方法是可以讓我FR05被建立後,再建立TForm1時,
也能同時讓Label1的字一直變? ----------------
快滿一年程設師,
日日工作寫程式,
每買樂透眼框溼,
望能早成系分師。
----------------
------
---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ---------------- |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
嚇我一跳,
我還以為我抄同事的程式被抓到了,
哈,不過我有問他可不可以貼~~~
^_^ To 以上個位大大: 因為我原本想說寫在
procedure TFR05Form.Timer1Timer(Sender: TObject);中,
Interval設為500,具他會每0.5秒跑一次更新Label,
而且最後面都有加上Application.ProcessMessage;
這樣是不是無效(因為Label都不會變) 如果是一直用Application.ProcessMessages;也不是不行啦,
只是當遇到
Application.ProcessMessages;
Query.Close;
QUery.SQL.text := '....';
QUery.Open; <-----在這一行,有時join一堆Table,也是會停很久
Application.ProcessMessages; Label就停在那邊了,因為之前會動,
跑到那一句不會動了,客戶的電話又來了。
這個時候就不知道要把Application.ProcessMessage;加到哪裡。 而且如果: Query1速度快, QUery2速度中, Query3速度慢時,
在三個之中都加上Application.ProcessMessage;, Query1.Close;
Query1.SQL.text....
Query1.Open;
Application.ProcessMessage;
Query2.Close;
Query2.SQL.text....
Query2.Open;
Application.ProcessMessage;
Query3.Close;
Query3.SQL.text....
Query3.Open;
Application.ProcessMessage; 這樣到了Query2,3時,Label的字也是不會變。 原本想說小時鐘的程式會和原本程式分開跑,沒想到還是被主程式給托累,
不知到用多個thread能不能做到(@_@|||很不熟)。 時常接到客戶打來時會說以下的對話
客:「喂,我查詢時會當掉。」
我:「我幫你看看,嗯~不會啊....」
客:「你看又當.....A...好了,謝謝」。
尤其是遇到那種要跑年度報表或大量調料的程式。
~_~||| 難道沒有其他方法了嗎!? ----------------
快滿一年程設師,
日日工作寫程式,
每買樂透眼框溼,
望能早成系分師。
----------------
------
---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ---------------- |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
Timer 也是在Main Thread 中所以 Query 時也是不會更新的 如你所說,其一是使用 Thread (我也很不熟) 其二是另寫一個無關的小程式開始時跳出來無聊地數呀數之後 準備好叫它關掉就好了。 正式來說當然是用 > < class="code">
var
SI : TStartupInfo;
PI : TProcessInformation;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI); // SI 還有很多東西可設可看 Win32 SDK Help
CreateProcess(nil,'SplashCount.exe', nil, nil, False,NORMAL_PRIORITY_CLASS, nil, nil, SI,PI);
// 你的程式碼
.....
.....
// 最後
TerminateProcess(PI.hProcess,0); // 關掉外部程式
end;
那個外部程式可用你原本的 FRO5Form 改一點點,可設置 show 在中間 及 stayontop
數的數字可以沒意義,若客戶他問你那數字是甚麼你說下期彩票的預測好了 不過,若有高手教你甚用
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
哈~~~
繼http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30011
此篇後,又學到一招。
Justmade 大大,
感謝您再次出手幫忙。 不管是旁門方法,還是正式解法,
只要能解決問題,就是一個好方法。 ----------------
快滿一年程設師,
日日工作寫程式,
每買樂透眼框溼,
望能早成系分師。
---------------- 發表人 - skurama 於 2003/05/12 22:57:54
------
---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ---------------- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |