BCB6產生MDI Project的疑問(關於ActionList) |
答題得分者是:daldal
|
hipig
高階會員 發表:31 回覆:75 積分:111 註冊:2007-01-15 發送簡訊給我 |
BCB6中產生MDI介面最簡單的方式是直接new projects選MDI程式介面
而程式會建立一個簡單MDI範例 我有一個疑問 在MDI中子視窗排列方式有Tile(),Cascade(),ArrangeIcons()三種方式 但由BCB所產生的範例中發現他利用ActionList來作按鍵是否enter處理 可是我卻完全不懂他是如何做到的 以往我都是利用一堆程式碼來做到判斷使是否已可以讓這功能使用 但BCB6的MDI Project範例卻找不他是如何判斷視窗開啟了?? 我甚至也找不到他程式中使用Tile(),Cascade(),ArrangeIcons()這三種方式的地方 那他是寫在哪呢??? 還是我疏忽了 另外 請問有何書籍或範例文件詳細講解ActionList元件的使用方式 |
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
ActionList的程式碼是實作在元件之中的(可以從Source\vcl\stdactns.pas查到)
當你把ActionList與元件的Action動作相關聯時,他內部就會去呼叫已經寫好的動作 以Tile為例,他實際上會去呼叫DoTile()的函式,DoTile再去呼叫WINAPI去讓所有MDI視窗排序 如下所示: [code cpp] if (Form.FormStyle = fsMDIForm) and (Form.ClientHandle <> 0) then SendMessage(Form.ClientHandle, WM_MDITILE, TileParams[TileMode], 0); [/code] 同理,你也可以把一個功能鍵的OnClick事件寫成如下,也會有相同的作用 [code cpp] if (MainForm->FormStyle==fsMDIForm && MainForm->ClientHandle != NULL) SendMessage(MainForm->ClientHandle, WM_MDITILE, TileMode, 0); [/code] 差別只是在於,ActionList程式碼已經預先寫好包裝起來,你使用的時候只需要做關聯 而OnClick需要你自己實作 至於學習的話可以多看看Source裡面的程式碼 裡面可以發現當年開發Borland的人員所留下的一些精華所在喔 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
亂入+1!
不好意思,再請問一下,原本的範例我並沒有看到WindowCascade1這個物件做了什麼動作的設定… 難不成全都包在stdactns.pas內嗎? ===================引 用 daldal 文 章=================== ActionList的程式碼是實作在元件之中的(可以從Source\vcl\stdactns.pas查到) 當你把ActionList與元件的Action動作相關聯時,他內部就會去呼叫已經寫好的動作 以Tile為例,他實際上會去呼叫DoTile()的函式,DoTile再去呼叫WINAPI去讓所有MDI視窗排序 如下所示: [code cpp] if (Form.FormStyle = fsMDIForm) and (Form.ClientHandle <> 0) then SendMessage(Form.ClientHandle, WM_MDITILE, TileParams[TileMode], 0); [/code] 同理,你也可以把一個功能鍵的OnClick事件寫成如下,也會有相同的作用 [code cpp] if (MainForm->FormStyle==fsMDIForm && MainForm->ClientHandle != NULL) SendMessage(MainForm->ClientHandle, WM_MDITILE, TileMode, 0); [/code] 差別只是在於,ActionList程式碼已經預先寫好包裝起來,你使用的時候只需要做關聯 而OnClick需要你自己實作 至於學習的話可以多看看Source裡面的程式碼 裡面可以發現當年開發Borland的人員所留下的一些精華所在喔 |
hipig
高階會員 發表:31 回覆:75 積分:111 註冊:2007-01-15 發送簡訊給我 |
+1
我最主要的問題也是這個 因為MDI範例產生的程式碼非常簡易好懂 但我卻完全找不到他各功能連動所寫的程式碼在哪 這種問題我以前有遇過一次類似的 就是在一個按鈕內寫了功能 後來把這按鈕砍了程式碼也砍了 之後又新增一個按鈕...明明沒寫程式碼但卻有之前寫的功能 不信邪obj和tds都砍掉重編還是一樣 ===================引 用 GrandRURU 文 章=================== 亂入 1! 不好意思,再請問一下,原本的範例我並沒有看到WindowCascade1這個物件做了什麼動作的設定… 難不成全都包在stdactns.pas內嗎? |
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
|
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
1 我最主要的問題也是這個 因為MDI範例產生的程式碼非常簡易好懂 但我卻完全找不到他各功能連動所寫的程式碼在哪 其實這個狀況你每天都在碰到,只是有些時候習以為常不覺得奇怪而已 例如你放Button的時候,你並不需要使用Canvas畫出Button本身 那是因為元件內部已經幫你畫好了, 所以你才可以很簡單的拖拉、改變Caption、屬性 元件內部會幫你完成這些工作 ActionList也是相同的道理,只是他不用你去設定 只要你選對BORLAND預先寫好的功能就好囉 但是缺點也是明顯的,你如果有特殊需求的話 例如Tile排列,但是下面要留空100Pixels 那就得自己動手做了 這種問題我以前有遇過一次類似的 就是在一個按鈕內寫了功能 後來把這按鈕砍了程式碼也砍了 之後又新增一個按鈕...明明沒寫程式碼但卻有之前寫的功能 不信邪obj和tds都砍掉重編還是一樣 |
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
===================引 用 daldal 文 章=================== 1 我最主要的問題也是這個 因為MDI範例產生的程式碼非常簡易好懂 但我卻完全找不到他各功能連動所寫的程式碼在哪 其實這個狀況你每天都在碰到,只是有些時候習以為常不覺得奇怪而已 例如你放Button的時候,你並不需要使用Canvas畫出Button本身 那是因為元件內部已經幫你畫好了,(早期要建立出一個漂亮的按鈕,要打的程式碼可是不少的) 所以你才可以很簡單的拖拉、改變Caption、屬性 元件內部會幫你完成這些工作 ActionList也是相同的道理,只是他不用你去設定 只要你選對BORLAND預先寫好的功能就好囉 但是缺點也是明顯的,你如果有特殊需求的話 例如Tile排列,但是下面要留空100Pixels 那就得自己動手做了 這種問題我以前有遇過一次類似的 就是在一個按鈕內寫了功能 後來把這按鈕砍了程式碼也砍了 之後又新增一個按鈕...明明沒寫程式碼但卻有之前寫的功能 不信邪obj和tds都砍掉重編還是一樣 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |