MID的程式如何自動把每個child Form 作分頁 |
答題得分者是:sryang
|
dino
一般會員 ![]() ![]() 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
MDI架構的AP,每次create 一個新的child Form 時
Form 會包進分頁裡面,也就是動態產生分頁把Form包進去 就像是Ultra Edit、google chrome 之類的程式一樣 每次按新增檔案或是新增網頁時都會用一個一個的分頁去顯示 我不知道delphi內建的元件是否可以達成 想用PageControl或是TabControl去做 http://delphi.ktop.com.tw/board.php?cid=168&fid=913&tid=75071 上面這一篇是用C Builder寫的 改寫後失敗,可能是對C 的語法不熟的關係吧@@ code的重點如下: TabControl1.Tabs.AddObject('form title',AForm); //AForm是每一個動態create的child form的instance 分頁是可以自動產生了,但是無法把Form帶入到tab裡面顯示出來 在ktop搜尋了許多資料,沒有找到可以解決的方向 請各位先進前輩指導一下囉 感謝 |
sryang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
dino
一般會員 ![]() ![]() 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
sryang 兄說的parent
指的是不是 將每一個create 起來的child form.parent 指定成tabcontrol呢? 我是依照上面那篇問答裡面最後發問者提供的那個範例去做的 不過裡面沒有看到設定parent的地方 我也有用裡面前幾個回答者的範例去實作(裡面就有設定parent的地方) 最後那個範例的重點我看應該是下面兩個地方 2.// 這是在 Child Form 的 OnActivate 事件裡的 code, 這樣點選視窗時,Tab 也能跟著切換了 在每個child form 裡面也依樣畫葫蘆的加了 目前還是無法把form顯示在tab裡面,應該是很多地方都有錯誤 我的code也寫的蠻亂的,不具參考價值了 delphi 的sample也沒有範例, 我的疑問是tabcontrol可以成為form的parent嗎? |
sryang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
1. 沒錯,是設定 Form.Parent,不過不是設定為 TabControl,而是設定為 TabSheet
2. 那篇討論中,6 樓有提到設定 Parent 3. Parent 的型別,是 TWinControl,TTabSheet 不就是 TWinControl 的後代型別嗎? ===================引 用 dino 文 章=================== sryang 兄說的parent 指的是不是 將每一個create 起來的child form.parent 指定成tabcontrol呢? 我是依照上面那篇問答裡面最後發問者提供的那個範例去做的 不過裡面沒有看到設定parent的地方 我也有用裡面前幾個回答者的範例去實作(裡面就有設定parent的地方) 最後那個範例的重點我看應該是下面兩個地方 2.// 這是在 Child Form 的 OnActivate 事件裡的 code, 這樣點選視窗時,Tab 也能跟著切換了 在每個child form 裡面也依樣畫葫蘆的加了 目前還是無法把form顯示在tab裡面,應該是很多地方都有錯誤 我的code也寫的蠻亂的,不具參考價值了 delphi 的sample也沒有範例, 我的疑問是tabcontrol可以成為form的parent嗎?
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
dino
一般會員 ![]() ![]() 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
感謝 sryang 兄的提點
我把那篇討論的6樓範例程式實作了一遍 已經可以達成所要的效果了 程式重點如下: // 新增頁籤 pPage := TcxTabSheet.Create(PageControl1); pPage.PageControl := PageControl1; pPage.Caption := ClassName; pPage.Name := MyComponentName; //create form AForm := TComponentClass(AClass).Create(pPage) as TForm; AForm.Parent := pPage; AForm.Align := alClient; AForm.BorderStyle := bsNone; pPage.Caption := AForm.Caption; ............ AForm.Show; 不過有個問題正如那邊討論的版主所說的 不知道是Create form還是form show的時候, 畫面有閃爍一下的現象產生 還蠻嚴重的,不知道哪位先進前輩可以指教修正的方式...謝謝 |
dino
一般會員 ![]() ![]() 發表:20 回覆:73 積分:23 註冊:2002-07-29 發送簡訊給我 |
發現其實蠻簡單的
只要Form的Visible := false 在Parent 設為Tabsheet 之後 再Visible := true 就不會有閃爍的現象發生了 ===================引 用 dino 文 章=================== 感謝 sryang 兄的提點 我把那篇討論的6樓範例程式實作了一遍 已經可以達成所要的效果了 程式重點如下: // 新增頁籤 pPage := TcxTabSheet.Create(PageControl1); pPage.PageControl := PageControl1; pPage.Caption := ClassName; pPage.Name := MyComponentName; //create form AForm := TComponentClass(AClass).Create(pPage) as TForm; AForm.Parent := pPage; AForm.Align := alClient; AForm.BorderStyle := bsNone; pPage.Caption := AForm.Caption; ............ AForm.Show; 不過有個問題正如那邊討論的版主所說的 不知道是Create form還是form show的時候, 畫面有閃爍一下的現象產生 還蠻嚴重的,不知道哪位先進前輩可以指教修正的方式...謝謝 |
sryang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
如果要把 Form.Visible := false
則 Form.FormStyle 必須是 fsNormal FormStyle = fsMdiChild 時,是無法設定 Visible := false 的,會有錯誤訊息 這種用分頁來代替傳統 MDI 的作法,可以屏除傳統 MDI 一個子 form 放到最大,所有的子 form 都會放到最大 一個子 form 從最大回到一般大小,所有的子 form 都會從最大回到一般大小的缺點 ===================引 用 dino 文 章=================== 發現其實蠻簡單的 只要Form的Visible := false 在Parent 設為Tabsheet 之後 再Visible := true 就不會有閃爍的現象發生了
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
qtfox
一般會員 ![]() ![]() 發表:0 回覆:1 積分:0 註冊:2009-02-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |