全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1385
推到 Plurk!
推到 Facebook!

攔截訊息的寫法可以嗎?

尚未結案
a_mi
一般會員


發表:43
回覆:43
積分:22
註冊:2003-12-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-27 11:42:16 IP:61.218.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-27 13:20:46 IP:203.73.xxx.xxx 未訂閱
引言:
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-27 14:14:01 IP:61.218.xxx.xxx 未訂閱
引言:
a_mi 你好:
(1)有關串接法的使用,請參考以下的連結文章
    >
   >    < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --
看完了..但這2個連結無法提供解答< > 我已經會串接了< > 我的問題是,我要攔截5個SHAPE的CM_MOUSEENTER,但又不想寫5個
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-27 15:08:49 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-27 15:29:20 IP:61.218.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-27 15:37:25 IP:140.135.xxx.xxx 未訂閱
a_mi您好:    請問一下您實際所要的功能是什麼? 是當滑鼠點到某個 >
a_mi
一般會員


發表:43
回覆:43
積分:22
註冊:2003-12-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-27 15:43:58 IP:61.218.xxx.xxx 未訂閱
引言: a_mi您好: 請問一下您實際所要的功能是什麼? 是當滑鼠點到某個 > < face="Verdana, Arial, Helvetica"> 速滴< >< >< >< >< >< > 其實不限Shape;要是可行的話,那就可以套用到其他的component;這樣對程式的美化有很大的幫助哦,也可以順便增加自己的能力< > 隨然說有很多第三方元件,但我個人是覺得能不用就不要用..不然重灌或分發時一有問題就很麻煩滴< > 發表人 - a_mi 於 2004/02/27 15:45:15
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-27 16:02:57 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-01 13:57:22 IP:61.218.xxx.xxx 未訂閱
引言: 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屬性 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ < face="Verdana, Arial, Helvetica"> 假日不工作..所以沒上K TOP回文 我是希望用陣列的方式來取代做一個新的有 >
jammar
一般會員


發表:2
回覆:18
積分:4
註冊:2003-10-26

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-03 11:47:32 IP:210.59.xxx.xxx 未訂閱
或許你可以考慮用動態物件的方式來製作物件陣列, 參考這篇 【分享】心得分享系列(BCB) - Tag & Hint 屬性的妙用 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=18760 或者可以參考小弟的拙作 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=45033 知識大多來自於 KTop
系統時間:2024-05-18 14:31:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!