請問如何直接抓到 runtime 時期 最上方的 form 的 name? |
答題得分者是:Miles
|
azurecloud
中階會員 發表:52 回覆:108 積分:92 註冊:2003-09-04 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
你的想法沒錯. 就是這樣寫就可以了:
procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin for i:=0 to Application.ComponentCount -1 do if Application.Components[i] is TForm then if TForm(Application.Components[i]).Active then ShowMessage(Application.Components[i].Name); end; |
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
|
azurecloud
中階會員 發表:52 回覆:108 積分:92 註冊:2003-09-04 發送簡訊給我 |
timhuang 大大好:
謝謝你的建議,程式碼很簡潔;不過很可惜沒有能直接抓到 active form
的函數(就算有可能內部也是用上述方法實現的),我實驗的結果發現,若是
在 Delphi6 的 project--> options --> forms 選項中,將所有的 form 移到
Auto Create Forms 中的話,我抓到的form name 會是像這樣的 ****_1(exp:
frmChangeLan --> frmChangeLan_1 ),我在猜 Delphi 會重複 Create Form 的實體,並給予它 _1、_2 等類似的名稱,那如果全部移到 Available Forms
中的話,程式一執行什麼都看不到(至少要留一個 mainform)。
因為我是在修改 pcplayer99 大大的 多語言的元件,他的做法是控數 application 物件中的所有 Component 元件,再把它們的 Caption 屬性輸出到
ini 檔中,所以我的 form 必須全放在 Auto Create Forms 當中才行,這麼一來 OnActive 的 Form 就會多一個,我正在想辦法處理它…
|
azurecloud
中階會員 發表:52 回覆:108 積分:92 註冊:2003-09-04 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |