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

如何不讓滑鼠滾輪影響ComboBox呢?

答題得分者是:China Join
b8201056
一般會員


發表:11
回覆:7
積分:3
註冊:2002-11-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-06 10:15:32 IP:61.222.xxx.xxx 未訂閱
Dear all : 我的Form中有許多ComboBox,且每個ComboBox都有下拉選項. 目前的困擾是若ComboBox取得Focus時,若是使用滑鼠滾輪的話, ComboBox的內容也會跟著改變.請問如何讓ComboBox的內容不會 因為滾動滑鼠滾輪的滾動而改變?謝謝各位!
jessechan
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-06 10:47:40 IP:203.75.xxx.xxx 未訂閱
可以建立一個繼承自 TComboBox 的元件,    class TMyCombo : public TComboBox { private:   void __fastcall OnMouseWheel(TMessage &Message); public:   BEGIN_MESSAGE_MAP     VCL_MESSAGE_HANDLER(WM_MOUSEWHEEL,TMessage,OnMouseWheel);   END_MESSAGE_MAP(TComboBox);   __fastcall TMyCombo(TComponent* Owner); };    在 OnMouseWheel 中不作任何事就可以了. TMyCombo * MyCombo[3]; //--------------------------------------------------------------------------- __fastcall TMyCombo::TMyCombo(TComponent* Owner)   : TComboBox(Owner) {    } //--------------------------------------------------------------------------- void __fastcall TMyCombo::OnMouseWheel(TMessage &Message) { } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner)   : TForm(Owner) {   int nI,nJ;   for (nI = 0;nI < 3;nI++)   {     MyCombo[nI] = new TMyCombo(this);     MyCombo[nI]->Parent = this;     for (nJ = 0;nJ < 5;nJ++)       MyCombo[nI]->Items->Add(nJ);     MyCombo[nI]->ItemIndex = 0;     MyCombo[nI]->Left = 30;     MyCombo[nI]->Top = 30 + nI * 50;   } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) {   int nI;   for (nI = 0;nI < 3;nI++)     delete MyCombo[nI]; } //---------------------------------------------------------------------------    Jesse Chan
------
Jesse Chan
China Join
中階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-06 11:08:55 IP:218.170.xxx.xxx 未訂閱
如果簡單一點可以直接把滾輪事件拿掉作法如下: 在 .h 檔先宣告 void __fastcall TForm1::MyWindowProc(TMessage &Message); 以下為原始程式碼: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; TWndMethod ComboBox_WindowProc; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ComboBox_WindowProc=ComboBox1->WindowProc; ComboBox1->WindowProc=MyWindowProc; } //--------------------------------------------------------------------------- void __fastcall TForm1::MyWindowProc(TMessage &Message) { if (Message.Msg==WM_MOUSEWHEEL) //WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_NCLBUTTONDOWN { return; } // 呼叫-原始訊息處理程序 ComboBox_WindowProc(Message); }
b8201056
一般會員


發表:11
回覆:7
積分:3
註冊:2002-11-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-06 11:40:23 IP:61.222.xxx.xxx 未訂閱
感謝兩位大大的熱心回應,兩位的方法我都用過了,可是可行方案. 不過 China Join 大大的方法比較符合我 , 不管怎樣還是要感謝 大家的幫忙 , 謝謝!
系統時間:2024-04-30 0:30:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!