請問BCB的mousewheel如何處理? |
尚未結案
|
Cafia
一般會員 發表:6 回覆:12 積分:3 註冊:2003-03-17 發送簡訊給我 |
|
China Join
中階會員 發表:81 回覆:242 積分:89 註冊:2003-03-12 發送簡訊給我 |
轉貼一篇給你,其他請自行參悟 ^^ 條條大路通羅馬,這只是方法之一... 1. 在「class Explorer」想抓事件的物件類別上按滑鼠右鍵
2. 選擇「new Method...」
3. 「Method Name」隨便給個名字
4. 「Arguments」一般設為該事件的型態(隨便!甚至可不設。)
5. 在「Directives」中將「Message Handler」打勾並選取欲攔截的 message
6. 按下「OK」
7. 在新增的函數中輸入處理事件的 code 範例:
1. 在「class Explorer」TForm1上按滑鼠右鍵
2. 選擇「new Method...」
3. 「Method Name」輸入【func1】(隨你高興)
4. 在「Directives」中將「Message Handler」打勾並選取「WM_MOUSEWHEEL」(註1)
5. 「Arguments」輸入【TWMMouseWheel msg】(註2)
6. 確認「Method type」為「Function」
7. 設定「Method type」的「function Result」為【void】(隨你高興)
6. 「Visibility」設為「public」(隨你高興)
7. 「Directives」將「__fastcall」打勾(隨你高興)
8. 按下「OK」
9. 在新增的「void __fastcall TForm1::func1(TWMouseWheel msg)」函數中輸入【Beep();】
10. Run
每當在該Form上轉動滑鼠滾輪,喇叭就會嗶一聲。(函數中若需用到傳入的資訊請參考說明檔。) 註1:WM_MOUSEWHEEL 為滑鼠滾輪轉動的 message,其他 message 請參考說明檔。或者輸入自建的 message。 註2:在BCB中,Arguments 的型態一般為 message 的名字去掉底線,在字首加個「T」,再配合適當的大小寫。例如「WM_MOUSEWHEEL」對應「TWMMouseWheel」;「WM_KEYDOWN」對應「TWMKeyDown」。詳細請參考說明檔。
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
通往羅馬的第二條路:
China Join 兄的方法是作用 Form 上面, 可能還要判斷在那個 Control, 我用 TPanel 代替 OpenGLPanel
TWndMethod OldWndProc; __fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
...
OldWndProc = Panel1->WindowProc;
Panel1->WindowProc = PanelWndProc;
...
} void __fastcall TForm1::PanelWndProc(Messages::TMessage &Message)
{
if (Message.Msg == WM_MOUSEWHEEL)
{
// 做你要做的事
}
else
OldWndProc(Message);
} 這個方法用在內定無法得到 Focus 的元件要將 TabStop 設為 true, WM_MOUSEWHEEL 的用法,
WParamLo
按鍵資訊其值可能是
MK_CONTROL CTRL 被按下
MK_LBUTTON 左鍵被按下
MK_MBUTTON 中鍵被按下
MK_RBUTTON 右鍵被按下
MK_SHIFT SHIFT 被按下 WParamHi
輪子的旋轉量
LParamLo
X 座標
LParamHi
Y 座標 通往羅馬的第三條路:
DYNAMIC void __fastcall MouseWheelHandler(Messages::TMessage &Message);
只要是繼承自 TControl 的元件都有以上的 function, 所以建立一個 class, 繼承自 OpenGLPanel, 然後 override 掉 MouseWheelHandler 也可以達到目的 Jesse Chan
------
Jesse Chan |
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
補充第三條路
class TPanelX : public TPanel
{
public:
__fastcall TPanelX(TComponent* Owner);
protected:
DYNAMIC void __fastcall MouseWheelHandler(Messages::TMessage &Message);
}; ....
//---------------------------------------------------------------------------
__fastcall TPanelX::TPanelX(TComponent* Owner)
: TPanel(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TPanelX::MouseWheelHandler(Messages::TMessage &Message)
{
// 做你要做的事
} Jesse Chan
------
Jesse Chan |
Cafia
一般會員 發表:6 回覆:12 積分:3 註冊:2003-03-17 發送簡訊給我 |
|
China Join
中階會員 發表:81 回覆:242 積分:89 註冊:2003-03-12 發送簡訊給我 |
|
WhiteFang
一般會員 發表:9 回覆:23 積分:6 註冊:2002-11-22 發送簡訊給我 |
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |