MDI Child Form如何增加OnActivate事件功能? |
答題得分者是:senso
|
GrandRURU
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
首先解釋一下我目前的視窗,是由一個MDI Form(簡稱main好了) + 2個MDI Child + 1個normal form組成。
Main上有很多SpeedButton,用來呼叫MDIChild,被呼叫的speedbutton->down會是true,關掉時變成false 可是現在有個問題是,有a normal和b、c 2個MDIChild,我關閉a後,b或c會跳到最前面,可是對應的speedbutton卻不會變成true。 我有試著設定MDIChild Form的O-nActivate事件,可是除了第一次建立時會進入一次外,其它都不會觸發該事件了。 目前有想過要重寫Activate事件,可是找不到bcb的寫法,或是還有其它的解法呢? 目前是有看到【Implementing OnActivate / OnDeactivate for MDI Child Forms】有提到可能的解法,但是我做不出來........ |
christie
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
DELPHI寫法,
type TForm3 = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } procedure WMNCACTIVATE(var M: TWMNCACTIVATE); message WM_NCACTIVATE; public { Public declarations } end; var Form3: TForm3; implementation {$R *.dfm} procedure TForm3.WMNCACTIVATE(var M: TWMNCACTIVATE); begin inherited; if M.Active then caption:=caption '_F3' timetostr(now) else caption:=caption '_N3' timetostr(now) end;
------
What do we live for if not to make life less difficult for each other? |
senso
高階會員 ![]() ![]() ![]() ![]() 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
我覺得可能不是On Activate有問題
我的fsNormal和fsMDIChild的On Activate都能正常觸發, 我在On Activate設定SpeedButton->Down=true並且showmessage值出來看是有更新的 但是fsMDIForm的SpeedButton卻沒有對應Down 我試著在下中斷點Down=true觀察後再繼續執行,卻發現視窗切回來是正確的 接著我試著把fsMDIChil(該SpeedButton沒顯示Down)拖移蓋掉SpeedButton再移開,SpeedButton的畫面就更新成Down的狀態 推測可能fsMDIForm的繪圖方式(圖層?)不太一樣(不熟,不會解釋) 再來我嘗試把所有的SpeedButton及fsMDIForm(main)都呼叫 Update(), Refresh(),Repaint()皆無法更新畫面 最後我拉一個Panel1把SpeedButton全都指定Parent=Panel1 測得On Activate事件過後,在Panel1中的SpeedButton會正常顯示對應的Down 補充,某form On Close後顯示的form一樣也會觸發On Activate C Builder2007 |
GrandRURU
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
我在bcb6也是這樣的作法,就是沒反應,或許是cb6的bug?
目前我是用on paint事件來作檢查,沒其它的好方法,暫時可以解決現在的問題 感謝christie和senso大大的幫忙喲!感謝!!! ![]() ===================引 用 senso 文 章=================== 我覺得可能不是On Activate有問題 我的fsNormal和fsMDIChild的On Activate都能正常觸發, 我在On Activate設定SpeedButton->Down=true並且showmessage值出來看是有更新的 但是fsMDIForm的SpeedButton卻沒有對應Down 我試著在下中斷點Down=true觀察後再繼續執行,卻發現視窗切回來是正確的 接著我試著把fsMDIChil(該SpeedButton沒顯示Down)拖移蓋掉SpeedButton再移開,SpeedButton的畫面就更新成Down的狀態 推測可能fsMDIForm的繪圖方式(圖層?)不太一樣(不熟,不會解釋) 再來我嘗試把所有的SpeedButton及fsMDIForm(main)都呼叫 Update(), Refresh(),Repaint()皆無法更新畫面 最後我拉一個Panel1把SpeedButton全都指定Parent=Panel1 測得On Activate事件過後,在Panel1中的SpeedButton會正常顯示對應的Down 補充,某form On Close後顯示的form一樣也會觸發On Activate C Builder2007 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |