Form 的執行順序問題請教.... |
答題得分者是:aquarius
|
laku0121
一般會員 發表:39 回覆:49 積分:17 註冊:2002-10-30 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
引言: 請問Form在 Events 的功能執行排序為何,若我有一個INI做為Form啟動時顯示與否(Show/Hide)的判斷值,要設在那毎Events中。 拜託了顯示與否應該只能在 OnFormCreate 時判斷, 但若你的 FORM 都是自動生成, 那在 OnFormCreate 判斷就顯得沒意義了. 若是 MainForm , 那一定是放在 OnFormCreate , 不然就是要放到 DPR 中, 用 Application.ShowMainForm 來控制. 若是其他的 FORM, 我個人的建議是在 呼叫 FORM.SHOW 之前來判斷, 不過這樣判斷, 要 HIDE 時連 FORM.SHOW 都可以不用呼叫了... 例如原本的程式可能是
------
水瓶男的blog: http://791909.blogspot.com |
laku0121
一般會員 發表:39 回覆:49 積分:17 註冊:2002-10-30 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
laku0121
一般會員 發表:39 回覆:49 積分:17 註冊:2002-10-30 發送簡訊給我 |
引言: laku0121你好: 順序是 FormCreate FormActivate FormShow 我是設定 FormActivate--隱藏HideTaskbarIcon--不在工具列顯示圖示 FormShow--將視窗拉到超過畫面外面 如果用Form.Hide那麼焦點會再回到Form上面雖然縮小了 但是焦點會跳2次造成不順的感覺...(好討厭的感覺阿.....喵)謝謝您告訢我執行順序.... 但好像都不能一開始即有Form1.Hide的動作,而將視窗拉到正常 畫面以外的,再做移回.這個並非我所要的方式,我是看是否能在 Events的其中一個地方,處理這個問題。 |
wuabc
初階會員 發表:6 回覆:60 積分:33 註冊:2002-10-28 發送簡訊給我 |
TForm在Create的時候並不會Show,所以在FormCreate呼叫Form.Hide毫無意義,因為它本來就沒有Show何必Hide。而只有當你呼叫Form.Show時Form才會Show出來,此時Show的動作沒有執行完你不能也不可以執行Hide的動作,違反邏輯。
因此, aquarius兄的建議才可行。另外的一個方式是在外部你儘管去Create Form但不要呼叫Form.Show改到FormCreate時呼叫like as:
procedure TForm1.Button1Click(Sender: TObject); begin Form2 := TForm2.Create(nil); end; procedure TForm2.FormCreate(Sender: TObject); begin if 符合條件 then self.Show; end;總之,Create及Show是兩回事,而Show總在Create之後才可以呼叫 |
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
引言: 上面兩位你好... 你所指示的處理方式其實我在提出這個問題之前已經試過,若我加在OnFormCreate的話, Form.Hide是不會被執行的(但其它的程式有執行),放在Form.Show更是不可能了, 因為以正常的程序來說,有人一執行Show.馬上Hide的嗎?,其實覆複一點用變數的方式判斷也是可以的,但這比較不實際.若你執意要用 FORM.HIDE 來做, 那我可以告訴你, 應該是沒辦法的. 至少沒有漂亮的辦法. 你有試過先檢查再決定要不要 SHOW 的方法? 這應該是到目前為止最符合你需求的方式了, 看不出來會有什麼問題? 除了程式要改得比較多一點以外.... ...
------
水瓶男的blog: http://791909.blogspot.com |
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
laku0121
一般會員 發表:39 回覆:49 積分:17 註冊:2002-10-30 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
elase
一般會員 發表:4 回覆:23 積分:10 註冊:2003-06-05 發送簡訊給我 |
|
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
|
laku0121
一般會員 發表:39 回覆:49 積分:17 註冊:2002-10-30 發送簡訊給我 |
謝謝各位的回覆,在此目前先做個結案....但有新的發現也請不悅告知.... 經過多方的測試結果,發現Form的Show/Hide這兩個動作並不能任意放置在任何
Form的Event中,如Create/Show/Hide中(有些不適合放置),最後不得以只好用
插Flag的方式處理,但雖用插Flag的方式,但因為Show/Hide的關係,必須選擇適
當點放置,經過多方前輩的告知,目前發現放置在OnPaint Event最合適(elase提供)
目前的做法如下 ...(我開了兩個Form)
----------------------------------------------------------------------
第一個Form
----------------------------------------------------------------------
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
private { Private declarations }
public
{ Public declarations } end; var
Form1: TForm1;
OpenWinFlg : Boolean; // 為了讓兩個Form均可使用
implementation uses Unit2; {$R *.dfm} procedure TForm1.FormShow(Sender: TObject);
begin
Form2.Hide;
end; procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
OpenWinFlg := True; // 起始值
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
If OpenWinFlg = True Then Begin
Form1.Hide;
Form2.Show;
OpenWinFlg := False;
End; end;
end.
----------------------------------------------------------------------
第二個Form
----------------------------------------------------------------------
unit Unit2; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm2 = class(TForm)
Button1: TButton;
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form2: TForm2; implementation uses Unit1; {$R *.dfm} procedure TForm2.FormShow(Sender: TObject);
begin
Form1.Hide;
end; procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Show;
end; end.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |