Combobox中每個item都顯示hint |
答題得分者是:ys168
|
aconxu
一般會員 發表:18 回覆:41 積分:11 註冊:2006-12-19 發送簡訊給我 |
|
ys168
初階會員 發表:3 回覆:24 積分:25 註冊:2005-10-14 發送簡訊給我 |
因為ComboBox 沒有MouseMove可用,
所以我用Mouse Hook 控制. 如下的程式碼參考看... [code cpp] // .cpp // 新增2個物件: ComboBox , Label //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int xpos; static HHOOK hHook; LRESULT CALLBACK hookProc(int nCode, WPARAM wParam, LPARAM lParam); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- LRESULT CALLBACK hookProc(int iCode, WPARAM wParam, LPARAM lParam) { TEventMsg msg; if (iCode < 0) { //必須將消息傳遞到消息鏈的下一個接受單元 return CallNextHookEx(hHook,iCode,wParam,lParam); } else if (iCode == HC_ACTION) { msg = *((TEventMsg*)(lParam)); if (msg.message == WM_MOUSEMOVE ) { POINT P; ::GetCursorPos(&P); ::ScreenToClient(Form1->ComboBox1->Handle,&P); RECT r; ::GetClientRect(Form1->ComboBox1->Handle,&r); if(Form1->DropDown_fg && P.x< (int)xpos && P.x > (int)r.left && P.y < ((int)r.top (int)r.bottom) (Form1->ComboBox1->ItemHeight*Form1->ComboBox1->DropDownCount) && P.y > (int)r.top (int)r.bottom) Form1->Label1->Visible=true; else Form1->Label1->Visible=false; } } return NULL; } //--------------------------------------------------------------------------- void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) { ((TComboBox *)Control)->Canvas->FillRect(Rect); ((TComboBox *)Control)->Canvas->TextOut(Rect.Left, Rect.Top 2, ((TComboBox *)Control)->Items->Strings[Index]); if(State.Contains(odFocused)) { Label1->Top=Rect.top 50; Label1->Left=ComboBox1->Left xpos 18; Label1->Caption=((TComboBox *)Control)->Items->Strings[Index]; Form1->Caption=((TComboBox *)Control)->Items->Strings[Index]; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { ComboBox1->ItemIndex=0; if(ComboBox1->Items->Count>ComboBox1->DropDownCount) xpos=ComboBox1->Width-16; else xpos=ComboBox1->Width; Label1->Visible=false; Label1->Color=(TColor)RGB(255,255,153); } //--------------------------------------------------------------------------- void __fastcall TForm1::ComboBox1DropDown(TObject *Sender) { DropDown_fg=true; hHook = ::SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)hookProc,HInstance,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { if (hHook != 0) { UnhookWindowsHookEx(hHook); hHook = 0; } } //--------------------------------------------------------------------------- void __fastcall TForm1::ComboBox1CloseUp(TObject *Sender) { Label1->Visible= false; DropDown_fg=false; UnhookWindowsHookEx(hHook); hHook = 0; } //--------------------------------------------------------------------------- // .h public: bool DropDown_fg;[/code]
------
yangshuh |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |