攔截訊息的寫法可以嗎? |
尚未結案
|
a_mi
一般會員 發表:43 回覆:43 積分:22 註冊:2003-12-07 發送簡訊給我 |
void __fastcall myWindowProc(TMessage &Message, int index); TWndMethod myWindowProc[4]; myParentWindowProc[3] = Shape1->WindowProc; Shape1->WindowProc = myWindowProc(Message, 0); <= 這個有錯小弟的想法是,有多個相同元件都用同一個攔截訊息式去抓(因為要做的事都一樣),所以改成這樣;宣告時沒問題..但在串接時就不知道怎麼給值了 感謝回答 |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言:void __fastcall myWindowProc(TMessage &Message, int index); TWndMethod myWindowProc[4]; myParentWindowProc[3] = Shape1->WindowProc; Shape1->WindowProc = myWindowProc(Message, 0); <= 這個有錯小弟的想法是,有多個相同元件都用同一個攔截訊息式去抓(因為要做的事都一樣),所以改成這樣;宣告時沒問題..但在串接時就不知道怎麼給值了 感謝回答 >>< face="Verdana, Arial, Helvetica">a_mi 你好: (1)有關串接法的使用,請參考以下的連結文章 > > < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
a_mi
一般會員 發表:43 回覆:43 積分:22 註冊:2003-12-07 發送簡訊給我 |
引言:看完了..但這2個連結無法提供解答< > 我已經會串接了< > 我的問題是,我要攔截5個SHAPE的CM_MOUSEENTER,但又不想寫5個a_mi 你好: (1)有關串接法的使用,請參考以下的連結文章 > > < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing -- void __fastcall HookShapeWindowProc(TMessage &Message); TWndMethod ShapeParentWindowProc;所以才想看能不能用這招 void __fastcall HookShapeWindowProc(TMessage &Message,int index); TWndMethod ShapeParentWindowProc[4];用indexd來辨別現在是在那一個shape中,並用FindComponent來對該shape做變化 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
a_mi您好:
應該是可以的,不知下面的code是不是您要的
.h //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TShape *Shape1; TShape *Shape2; TShape *Shape3; void __fastcall FormCreate(TObject *Sender); private: // User declarations void __fastcall MyMessage(TMessage & Message); TWndMethod OldWinProc; public: // User declarations __fastcall TForm1(TComponent* Owner); }; .cpp void __fastcall TForm1::FormCreate(TObject *Sender) { for(int i=0;i<Form1->ComponentCount;i ) if(Form1->Components[i]->ClassNameIs("TShape")) { ShowMessage(Form1->Components[i]->Name); OldWinProc=((TControl*)Form1->Components[i])->WindowProc; ((TControl*)Form1->Components[i])->WindowProc =MyMessage; } } //--------------------------------------------------------------------------- void __fastcall TForm1::MyMessage(TMessage & Message) { if (Message.Msg == CM_MOUSEENTER) { ShowMessage("CM_MOUSEENTER"); OldWinProc(Message); return; } OldWinProc(Message); }順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> |
a_mi
一般會員 發表:43 回覆:43 積分:22 註冊:2003-12-07 發送簡訊給我 |
引言: a_mi您好: 應該是可以的,不知下面的code是不是您要的.h //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TShape *Shape1; TShape *Shape2; TShape *Shape3; void __fastcall FormCreate(TObject *Sender); private: // User declarations void __fastcall MyMessage(TMessage & Message); TWndMethod OldWinProc; public: // User declarations __fastcall TForm1(TComponent* Owner); }; .cpp void __fastcall TForm1::FormCreate(TObject *Sender) { for(int i=0;i<Form1->ComponentCount;i ) if(Form1->Components[i]->ClassNameIs("TShape")) { ShowMessage(Form1->Components[i]->Name); OldWinProc=((TControl*)Form1->Components[i])->WindowProc; ((TControl*)Form1->Components[i])->WindowProc =MyMessage; } } //--------------------------------------------------------------------------- void __fastcall TForm1::MyMessage(TMessage & Message) { if (Message.Msg == CM_MOUSEENTER) { ShowMessage("CM_MOUSEENTER"); OldWinProc(Message); return; } OldWinProc(Message); }順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> >>< face="Verdana, Arial, Helvetica"> 呃..應該是我表達的不夠清楚 我要表達的重點是 < class="code"> void __fastcall HookShapeWindowProc(TMessage &Message,int index); TWndMethod ShapeParentWindowProc[4]; 我須要的是紅字部份的index來得知我現在是Enter在那一個shape,這樣我就可以用FindComponent("Shape" String(indxe)) 來對該元件做大小或顏色等的控制 taishyang大可以對特定的幾個指定,但沒有Sender或是其他變數能讓我找到該元件並對其做單一設定 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
a_mi
一般會員 發表:43 回覆:43 積分:22 註冊:2003-12-07 發送簡訊給我 |
引言: a_mi您好: 請問一下您實際所要的功能是什麼? 是當滑鼠點到某個 > >>< face="Verdana, Arial, Helvetica"> 速滴< >< >< >< >< >< > 其實不限Shape;要是可行的話,那就可以套用到其他的component;這樣對程式的美化有很大的幫助哦,也可以順便增加自己的能力< > 隨然說有很多第三方元件,但我個人是覺得能不用就不要用..不然重灌或分發時一有問題就很麻煩滴< > 發表人 - a_mi 於 2004/02/27 15:45:15 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
a_mi您好:
那您可以試試下面的code
void __fastcall TForm1::Shape1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Sender->ClassNameIs("TShape")) { ((TShape*)Sender)->Brush->Color=clRed; ((TShape*)Sender)->Width = ((TShape*)Sender)->Width 10; ((TShape*)Sender)->Height = ((TShape*)Sender)->Height 10; } }並將想要控制的Shape的MouseDown都指定為Shape1MouseDown 若想知道是哪一個Shape被按下,可以利用其Name或是Tag屬性 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> |
a_mi
一般會員 發表:43 回覆:43 積分:22 註冊:2003-12-07 發送簡訊給我 |
引言: a_mi您好: 那您可以試試下面的codevoid __fastcall TForm1::Shape1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (Sender->ClassNameIs("TShape")) { ((TShape*)Sender)->Brush->Color=clRed; ((TShape*)Sender)->Width = ((TShape*)Sender)->Width 10; ((TShape*)Sender)->Height = ((TShape*)Sender)->Height 10; } }並將想要控制的Shape的MouseDown都指定為Shape1MouseDown 若想知道是哪一個Shape被按下,可以利用其Name或是Tag屬性 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> >>< face="Verdana, Arial, Helvetica"> 假日不工作..所以沒上K TOP回文 我是希望用陣列的方式來取代做一個新的有 > |
jammar
一般會員 發表:2 回覆:18 積分:4 註冊:2003-10-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |