線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2267
推到 Plurk!
推到 Facebook!

MDI Child Form如何增加OnActivate事件功能?

答題得分者是:senso
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-11-16 08:45:54 IP:203.75.xxx.xxx 未訂閱
首先解釋一下我目前的視窗,是由一個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】有提到可能的解法,但是我做不出來........
編輯記錄
GrandRURU 重新編輯於 2010-11-15 17:59:54, 註解 無‧
GrandRURU 重新編輯於 2010-11-15 19:30:07, 註解 無‧
christie
資深會員


發表:28
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-11-16 10:01:18 IP:60.249.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-11-17 14:27:08 IP:61.219.xxx.xxx 訂閱
我覺得可能不是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
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-11-17 22:55:39 IP:111.249.xxx.xxx 未訂閱
我在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
系統時間:2017-10-24 10:07:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!