線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4168
推到 Plurk!
推到 Facebook!

請問BCB的mousewheel如何處理?

尚未結案
Cafia
一般會員


發表:6
回覆:12
積分:3
註冊:2003-03-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-22 00:05:18 IP:163.28.xxx.xxx 未訂閱
請問OnMouseWheelUp或是OnMouseWheelDown要如何使用? 我查過之前的文章了..都是delphi的.好像不太一樣..@@.. 如果使用的元件本身沒有這個事件. 那要如何才能把滾輪的功能附加上去呢? 我的情況是.我在Form裡面放一個openglPanel元件 希望滾輪的功能在openglPanel上作用~~ 謝謝指教..
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-22 00:35:00 IP:61.216.xxx.xxx 未訂閱
轉貼一篇給你,其他請自行參悟 ^^ 條條大路通羅馬,這只是方法之一... 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-22 01:31:18 IP:61.228.xxx.xxx 未訂閱
通往羅馬的第二條路: 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-22 01:34:24 IP:61.228.xxx.xxx 未訂閱
補充第三條路 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-22 01:44:13 IP:211.74.xxx.xxx 未訂閱
感恩~~ 學了很多..謝謝指教~~ 我明早試試實做看看..^^.
China Join
中階會員


發表:81
回覆:242
積分:89
註冊:2003-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-22 09:13:49 IP:218.170.xxx.xxx 未訂閱
謝謝 jessechan 大大讓小弟也獲益不少 
WhiteFang
一般會員


發表:9
回覆:23
積分:6
註冊:2002-11-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-06 17:42:03 IP:163.28.xxx.xxx 未訂閱
引言: 通往羅馬的第三條路: DYNAMIC void __fastcall MouseWheelHandler(Messages::TMessage &Message); 只要是繼承自 TControl 的元件都有以上的 function, 所以建立一個 class, 繼承自 OpenGLPanel, 然後 override 掉 MouseWheelHandler 也可以達到目的 Jesse Chan
請問一下,override onMouseWheel 是否也可以呢?
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-06 18:01:33 IP:203.75.xxx.xxx 未訂閱
onMouseWheel 是一個事件, 如果要從這裡下手, 你所要做的是判斷是否已有函數被指定在 onMouseWheel, 如果有的話把這個函數的指標存起來, 再放入自己的處理函數, 而且在自己的處理函數中最好先呼叫舊的函數再做你要做的事情, 比較保險.    Jesse Chan
------
Jesse Chan
系統時間:2024-05-08 7:02:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!