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

Combobox中每個item都顯示hint

答題得分者是:ys168
aconxu
一般會員


發表:18
回覆:41
積分:11
註冊:2006-12-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-22 17:08:00 IP:60.250.xxx.xxx 訂閱
大家好~
不知道有沒有什麼辦法~
可以讓combobox中的每個item都能顯示hint
謝謝~
ys168
初階會員


發表:3
回覆:24
積分:25
註冊:2005-10-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-09-03 23:18:10 IP:59.115.xxx.xxx 訂閱
因為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
系統時間:2024-05-03 15:40:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!