自製VCL關於Event的問題.. |
答題得分者是:lcsboy
|
trumpet
一般會員 發表:6 回覆:8 積分:2 註冊:2002-12-10 發送簡訊給我 |
|
trumpet
一般會員 發表:6 回覆:8 積分:2 註冊:2002-12-10 發送簡訊給我 |
|
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
trumpet
一般會員 發表:6 回覆:8 積分:2 註冊:2002-12-10 發送簡訊給我 |
謝謝你的回應...
可是我還不是很清楚要如何增加我要的Event
在H檔的
__private中
TShape *Shape1;
__fastcall Shape1MouseMove(.....
__publiched中
__property TNotifyEvent AShapeMouseMove = {read = Shape1MouseMove , write=Shape1MouseMove} 在CPP檔中
void __fastcall TWincontrol1::Shape1MouseMove(TObject *Sender, TShiftState Shift,int X, int Y)
{ TControl::MouseMove(Sender,Shift,X,Y);
} 這樣作果然不行....
那要如何寫才能把Shape的Event加到TWincontrol的Event上呢~~
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 各位大大: 我有一個新作的元件(TWinControl),這元件上有加入幾個原有VCL元件(TShape) ,請問如何將加入的元件(TShape)原來的Event,新增到我要作的元件的Event上呢?trumpet 你好: 有一個走後門的方法~~給你做參考< > 但是我並不確定可不可行~~試試看吧< > class TMyWinControl: public TWinControl { public: class TMyShape: public TShape { ................... }; TMyShape *MyShape; };-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
trumpet
一般會員 發表:6 回覆:8 積分:2 註冊:2002-12-10 發送簡訊給我 |
To Icsboy大大:
我看了
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23435
但是我還是有點不清楚
因為Shape是放在TWinControl上頭的,.
所以要攔Shape上的WM_MOUSEMOVE..
那我就要做一個新的MyShape:TShape..
然後再去MyShape中攔Message...
可是這樣不是直接用(TShape::OnMouseMove)就好了嗎...
我現在用這種方式有增加了WinControl的Event(ShapeOnMouseMove)
但是 X,Y 無法傳進新增的Event...
這個部分要怎麼作呢~~?
還是我這個方式不行呢>?
還有23245中的VCL串接的部份我沒有看懂...
可以再說清楚一點嗎
謝謝你
我把現在的狀況POP出來給大家參考
H檔中
private:
TNotifyEvent FSmallMouseMove;
void __fastcall SmallShapeMouseMove(TObject *Sender,
TShiftState Shift,int X, int Y);
__published:
__property TNotifyEvent FSmallShapeMMove={read
=FSmallMouseMove,write=FSmallMouseMove};
CPP檔中
void __fastcall TWinControl1::SmallShapeMouseMove(TObject *Sender,
TShiftState Shift,
int X, int Y)
{
/* 需要用作X,Y處理一些東東....*/
FSmallMouseMove(this); /// Event 發生,但 X.Y 無法傳入 ~>_<~
}
|
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
串接法的原理! 是把原來Event所在procedure的指標記錄下來, 然後將我
們自己要作的procedure, 接上去! 用我那種寫法, BCB Complier就會幫你把
指標接對地方! 至於你寫FSmallMouseMove(this); <---這種寫法跟本是在亂寫 山不轉! 路轉! 路不轉, 人轉! 不知道你要達成什麼樣的功能! 一定要好幾個Event都run過嗎?
目前為止還沒看過人家是這樣寫的, 雖然對你來說很簡單, 但是如果讓你
作成功了, 想必這樣的VCL效率一定很差!!! 你要的功能, 說不定多寫個一, 二個API就可以搞定了說 加油囉
|
trumpet
一般會員 發表:6 回覆:8 積分:2 註冊:2002-12-10 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
雖然完結了, 我仍來玩一下吧
如果沒誤會你的意思, 你要在一個新元件中加入一個TShape,希望能published TShape之Event, 其實這很平常, 很多組合元件都須如此寫. 以下主元件繼承TPanel, 內加一個Shape
class TMyClass : public TPanel { private: TShape *Shape1; //設定此新Event時直接設定到Shape1去 void __fastcall SetShapeMouseMove(TMouseMoveEvent Value){Shape1->OnMouseMove = Value;} //取此新Event時直接向Shape1取 TMouseMoveEvent __fastcall GetShapeMouseMove(){return Shape1->OnMouseMove;} public: __fastcall TMyClass(TComponent *Owner); __fastcall ~TMyClass(); //增一publshed Event,read write 如上 __property TMouseMoveEvent OnShapeMouseMove = {read=GetShapeMouseMove, write=SetShapeMouseMove}; }; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |