自己寫 VCL 如(MyButton)元件如何在Form或其它物件的 OnCreate 及 OnCl |
答題得分者是:wameng
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
請教各位前輩 自己寫 VCL 如(MyButton)元件如何在Form或其它物件的 OnCreate 及 OnClick 事件加入程式 ?? 自己寫的 VCL 元件,如 MyButton
1.如何為加入這元件的Form 在OnCreate 及 OnClick 加入事件
例:如Form加入 VCL 元件後, 當FORM 的 OnClick 事件會先執行 VCL的程式再執行本自的程式 2.和上面相同但是要控制 Form 上的其它元件 的 OnClick 謝謝各位前輩!!
有了你這世界變的更美好!!
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
引言: 請教各位前輩 自己寫 VCL 如(MyButton)元件如何在Form或其它物件的 OnCreate 及 OnClick 事件加入程式 ?? 自己寫的 VCL 元件,如 MyButton 1.如何為加入這元件的Form 在OnCreate 及 OnClick 加入事件 例:如Form加入 VCL 元件後, 當FORM 的 OnClick 事件會先執行 VCL的程式再執行本自的程式 2.和上面相同但是要控制 Form 上的其它元件 的 OnClick 謝謝各位前輩!! 有了你這世界變的更美好!!剛才想到 DosMove 因該也是這樣作,所以去看一下 http://delphi.ktop.com.tw/topic.php?topic_id=25454 原來是在執行期改變 TKeyEvent 但在新的 TKeyEvent 也要先執行原TKeyEvent procedure TDosMove.SetKeyEvent; begin // Intercept with OnKeyDown event and OnKeyPress event of 'Owner' // Run Time if not (csDesigning in ComponentState) then begin if FActive then begin // 設定 FOwnerKeyDown := (Self.Owner as TForm).OnKeyDown; (Self.Owner as TForm).OnKeyDown := NewKeyDown; FOwnerKeyPress := (Self.Owner as TForm).OnKeyPress; (Self.Owner as TForm).OnKeyPress := NewKeyPress; end else begin // 還原 (Self.Owner as TForm).OnKeyDown := FOwnerKeyDown; (Self.Owner as TForm).OnKeyPress := FOwnerKeyPress; end; end; end;真是太神奇了,有很多想要功能都能能做了,, 再請教各位前輩還有其它的作法嗎?? 發表人 - jeffreck 於 2004/11/30 15:15:14 |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
引言: 大概是如此吧! 只不過使用這種方法,需要顧慮的地方有很多。 這種狸貓換太子的作法, 需注意在替換後在替換的事件仍然要呼叫原事件。 由於非直接繼承該元件,只能間接使用Form公開的方法或事件。 應該是沒有其他的作法。 事實上,換各角度。 本身元件的 Load 與 Form的 Create 事件,沒什麼兩樣。 使用物件本身CM_CancelMode 與 Form的 OnClick 有異取同工之妙。 僅提供參考。謝謝前輩 ,又學到了一招 CM_CancelMode http://delphi.ktop.com.tw/topic.php?topic_id=58592 但 OnClick 及 OnCreate 只是舉例, 是我想要把自己的BaseForm做的更方便 再前感謝 wameng 及 hahalin 前輩, 我真的感覺自己不會寫程式了,一堆程式都是抄別人的< >< > |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
如果您要接管所有物件的 OnClick 事件。
倒不如透過 Application.OnMessage 事件。
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin Handled := false; { MouseDown } if Msg.message=WM_LBUTTONDOWN then begin ListBox1.Items.add(inttostr(Msg.hwnd)); end; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |