求高人指点迷津,如何截获TComboBox的下拉列表滚动的消息。

yubufeng 2005-01-13 05:42:55
如题,请注意我是想截获那个消息。
一、常规的想法我都试了,就是截不到。
(WM_VSCROLL,EN_VSCROLL,难道上下滚动的时候不是这两个消息,另有其它?)
二、挂钩子就不要说了。

谢谢!
...全文
156 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yubufeng 2005-01-14
  • 打赏
  • 举报
回复
to zswang(伴水清清)(专家门诊清洁工):
多谢,你的方法确实可以实现。可以截到WM_VSCROLL消息。

to Kshape(伟大的大伟//给我一个机会、我想做好人!)
你说的不是消息,那些是Window Styles,谢谢参与。

随便也感谢merkey2002(小样的)帮我顶。
就此结帖。
王集鹄 2005-01-13
  • 打赏
  • 举报
回复
//给你提供一个思路~~
//先找到弹出来的列表窗体,然后截获它的消息~~
//实现代码如下,不过此方法并不妥当~~
//或者你先说想实现的目的~~

var
vOldWndProc: Pointer = nil;

function NewWndProc(hWnd: HWND; uMsg: UINT;
wParam: WPARAM; lParam: LPARAM): Integer; stdcall;
begin
{ TODO : 处理hWnd消息 }
Result := CallWindowProc(vOldWndProc, hWnd, uMsg, wParam, lParam);
end; { NewWndProc }

procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
Timer1.Enabled := not Assigned(vOldWndProc);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
vRect: TRect;
vHandle: THandle;
begin
Timer1.Enabled := False;
GetWindowRect(ComboBox1.Handle, vRect);
vRect.Top := vRect.Top + ComboBox1.Height + 2;
vHandle := WindowFromPoint(vRect.TopLeft);
vOldWndProc := Pointer(GetWindowLong(vHandle, GWL_WNDPROC));
SetWindowLong(vHandle, GWL_WNDPROC, Integer(@NewWndProc));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 100;
end;
Kshape 2005-01-13
  • 打赏
  • 举报
回复
很有可能不是这个消息
我觉得一般TCombobox的消息就以下几种,不知道对不对
WS_TABSTOP, WS_GROUP, WS_VSCROLL, and WS_DISABLED........
merkey2002 2005-01-13
  • 打赏
  • 举报
回复
不会,帮顶~
yubufeng 2005-01-13
  • 打赏
  • 举报
回复
下班了,不知道明天早上会不会看到答案。
走人。
yubufeng 2005-01-13
  • 打赏
  • 举报
回复
自己定。
我可是第一次提问啊,不会这么悲惨吧。
yubufeng 2005-01-13
  • 打赏
  • 举报
回复
沉的够快,自己顶!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧