線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2541
推到 Plurk!
推到 Facebook!

問個小問題...如何讓form create後停留5秒再自動free

答題得分者是:P.D.
melt
一般會員


發表:9
回覆:6
積分:3
註冊:2003-07-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-18 21:52:41 IP:211.76.xxx.xxx 未訂閱
大家好: 如題......如何讓form create後停留5秒再自動free           謝謝
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-18 22:23:06 IP:61.225.xxx.xxx 未訂閱
簡單、有效的延時  在程式程式碼中有時要用到延時,在要求不高的情況下,有一個簡單的API函數 Sleep() 可供使用,但問題是如果使用 Sleep(),則不僅你的程式,就連繫統也被掛起了。所以我們要另想辦法,這時想到了函數 GetTickCount() ,這個函數用於獲取自 windows 啟動以來經歷的時間長度(毫秒) ,在這裡我們變通一下就可以用了:  Procedure Delay (Msecs : Integer);   var   FirstTickCount : real;   begin   FirstTickCount := GetTickCount;   Repeat   Application.ProcessMessages;   Until ((GetTickCount - FirstTickCount) >= LongInt (Msecs));   end;   在你的程式中調用上面這個自定義程序,和 Sleep() 比較一下,那個更好呢?     網海無涯,學無止境!
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-18 22:29:30 IP:61.56.xxx.xxx 未訂閱
你好: 我分享一下我的想法,其實使用 TTimer 更簡單。    
melt
一般會員


發表:9
回覆:6
積分:3
註冊:2003-07-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-18 22:33:23 IP:211.76.xxx.xxx 未訂閱
不好意思可否請ha0009再詳細解說一下 謝謝....新手
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-18 22:33:26 IP:61.225.xxx.xxx 未訂閱
引言: 你好: 我分享一下我的想法,其實使用 TTimer 更簡單。
是可以~但是好像不是粉好喔 網海無涯,學無止境!
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-18 23:05:48 IP:61.225.xxx.xxx 未訂閱
 
//承上例:    unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure Delay(ms : longint);
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation        uses Unit2;    {$R *.dfm}    procedure TForm1.Delay(ms : longint);
var
 TheTime : LongInt;
begin
 TheTime := GetTickCount   ms;
 while GetTickCount < TheTime do
  Application.ProcessMessages;
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
 Form2.Show;
 Delay(5000);
 Form2.Free;
end;    end.        
網海無涯,學無止境!
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-18 23:12:54 IP:61.56.xxx.xxx 未訂閱
你好: 呵呵,為什麼我覺得用 TTimer 好呢 有幾點原因。 src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-18 23:39:42 IP:61.225.xxx.xxx 未訂閱
最好TTimer也能夠free會更好喔~    網海無涯,學無止境!
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-18 23:48:41 IP:61.56.xxx.xxx 未訂閱
你好: qoo1234 說的不錯。如果是動態 Create 且未設定 Owner 當然要記得自己 Free 囉 因為 >所以記得直接拖拉 > < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-18 23:54:36 IP:61.66.xxx.xxx 未訂閱
引言: 大家好: 如題......如何讓form create後停留5秒再自動free 謝謝
我把重點貼出來 1.在form1.create(...)的最後一行加入 Application.onIdle:= StartRun; 2.在 private 下面加入 procedure StartRun(Sender: Tobject; var Done: boolean); 3.在 {$R *.DFM} 下加入
procedure TForm1.StartRun(Sender: Tobject; var Done: boolean);
          var xhandle: longInt;
              btime, etime: loginint;
begin
     xhandle:= FindWindow('TForm1',nil);
     if xhandle = 0 then exit;
     Application.ProcessMessages;
     Application.OnIdle:= nil;
     Done:= True;         btime:= gettickCount;
     etime:= getTickCount;
     repeat 
         Application.ProcessMessage;
         etime:= getTickCount;
     until etime-btime > 5000;
     Form1.Close;
end;
4.在 form1.close 加入 Action:= caFree; Form1:= nil; 原因: 在oncreate 未完成前如果執行任何close行為, 會導致Access的不可預期錯誤 所以加入 Application.onIdle:= StartRun, 指Form1 create完成, 會執行一個 onIdle事件, 這時我們指定onIdle去執行一個procedure, 在此做五杪的計數然 後關閉--OK! 另外, 使用 getTickCount 會比Timer來的方便, 而且至少我認為會比timer精準 提供你做建議~~ 發表人 - P.D. 於 2003/07/18 23:59:44
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-19 09:34:07 IP:211.76.xxx.xxx 未訂閱
引言: 大家好: 如題......如何讓form create後停留5秒再自動free
你這問題我現在才看到, 請看這個元件 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34251 發表人 - danny 於 2003/07/19 09:34:49
------
將問題盡快結案也是一種禮貌!
melt
一般會員


發表:9
回覆:6
積分:3
註冊:2003-07-12

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-07-19 11:47:15 IP:211.76.xxx.xxx 未訂閱
謝謝各位給我寶貴得意見......衷心感謝
系統時間:2024-11-23 19:31:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!