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

在FormActivate中如何关闭窗体?我用Close没有用

尚未結案
lovelypp
初階會員


發表:122
回覆:111
積分:46
註冊:2003-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-17 17:11:30 IP:218.2.xxx.xxx 未訂閱
我在OnActivate中作初始化,如果失败,则关闭窗体
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-17 17:27:55 IP:211.22.xxx.xxx 未訂閱
您好: 小弟試了一下 close可以耶!! 可以秀相關的程式碼ㄇ, 提供多一點資訊 ~~應無所住而生其心~~
lovelypp
初階會員


發表:122
回覆:111
積分:46
註冊:2003-02-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-17 17:47:32 IP:218.2.xxx.xxx 未訂閱
不行的,我在OnActivate中就一句Close, ShowModal该窗体后照常显示, 你是不是在主窗体的OnActivate中加的?
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-17 17:52:42 IP:211.76.xxx.xxx 未訂閱
你是不是在主窗体的OnActivate中加的? ===>是阿 ~~應無所住而生其心~~
P.D.
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-17 21:21:09 IP:61.71.xxx.xxx 未訂閱
引言: 我在OnActivate中作初始化,如果失败,则关闭窗体
如果你希望在 Form Create 未完成前能有關閉的能力, 請參考下列做法
1.在 private 中宣告
  private
    { Private declarations }
    procedure StartRun(Sender: Tobject; var Done: boolean);    2.在 Implementation 下撰寫
procedure TForm_Main.Start(Sender: Tobject; var Done: boolean);
          var xhandle: longInt;
begin
     xhandle:= FindWindow('TForm_Main',nil);
     if xhandle = 0 then exit;
     Application.ProcessMessages;
     Application.OnIdle:= nil;
     Done:= True;
     ....
end;    3.在 oncreate 事件中加入         Application.OnIdle:= StartRun;    
以上的目的是因為form在create初始化時, 即便你下close, 系統仍會持續 create的行為, 所以close會無效, 因此你要利用 onidle的行為, onIdle被 啟動時, 代表form的初始(create, active, paint 等行為都已完成進入閒置) 這時, 你在 StartRun中要關閉或做任何事, 都是可以的!
lovelypp
初階會員


發表:122
回覆:111
積分:46
註冊:2003-02-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-18 14:40:07 IP:218.2.xxx.xxx 未訂閱
各位误会我的意思了 我在Form2的 OnForm2Activate中调用Close关闭自己,代码如下: procedure TForm2.Form2Activate(Sender: ...) begin if 初始化动作失败 then begin Close; Exit; end; end; 在Form1的OnButtonClick中使用ShowModal显示Form2,可是在初始化动作失败 时,Form2仍然被显示。
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-01-18 15:13:38 IP:211.76.xxx.xxx 未訂閱
試了好像真的沒辦法關掉 可以將初始化的動作搬到FORM1 做ㄇ ~~應無所住而生其心~~ 發表人 - terrychen 於 2004/01/18 18:35:40 發表人 - terrychen 於 2004/01/18 18:54:38
lovelypp
初階會員


發表:122
回覆:111
積分:46
註冊:2003-02-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-01-18 19:31:44 IP:218.2.xxx.xxx 未訂閱
不行啊,原因 1: 违反封装原则。 2: 代码难以维护
P.D.
版主


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-01-19 01:15:22 IP:61.71.xxx.xxx 未訂閱
引言: 各位误会我的意思了 我在Form2的 OnForm2Activate中调用Close关闭自己,代码如下: procedure TForm2.Form2Activate(Sender: ...) begin if 初始化动作失败 then begin Close; Exit; end; end; 在Form1的OnButtonClick中使用ShowModal显示Form2,可是在初始化动作失败 时,Form2仍然被显示。
1.你可以把 Application.OnIdle:= StartRun 放在 OnActive 最後面 然後設置一個private 變數 if 初始化失敗 then failopen:= True else failopen:= False; 2.在 procedure TForm2.StartRun(Sender: Tobject; var Done: boolean); var xhandle: longInt; begin xhandle:= FindWindow('TForm2',nil); if xhandle = 0 then exit; Application.ProcessMessages; Application.OnIdle:= nil; Done:= True; .... 加這行 if failOpen then Form2.Close; Try it, may be work! 發表人 - P.D. 於 2004/01/19 01:16:42
系統時間:2024-06-02 14:16:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!