如何截获这个消息(ListView)?(50分)

  • 主题发起人 主题发起人 airlenllq
  • 开始时间 开始时间
A

airlenllq

Unregistered / Unconfirmed
GUEST, unregistred user!
各位仁兄请指点:
如何截获ListView滚动时的消息?谢谢
 
子类化技术,例,捕获ListBox的WM_VSCROLL消息:
TfrmMain = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;

implementation

var
ListBoxOldWProc : TFNWndProc;

function ListBoxNewWndProc(Handle: HWND; Msg: Integer; wParam, lParam: Longint):
Longint; stdcall;
begin
Result := CallWindowProc(ListBoxOldWProc, Handle, Msg, wParam, lParam);
if Msg=WM_VSCROLL then beep;//这里让它发声
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
inherited;
ListBoxOldWProc := TFNWndProc(SetWindowLong(ListBox1.Handle, GWL_WNDPROC,
Longint(@ListBoxNewWndProc)));
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ListBoxOldWProc<>nil then //还原,别忘了
SetWindowLong(ListBox1.Handle, GWL_WNDPROC,
Longint(ListBoxOldWProc));
inherited;
end;
 
你看一下这个贴子就了解了
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1206962
 
TO:轻舞肥羊
直接用消息过程不能处理这个消息吗?为什么要用了类化技术呢?
 
为什么不用消息而用子类化技术?
因为消息要重新继承一个控件,如果要在设计期放在窗体上还得注册,仅为了处理一个消息,子类化技术相对来说比较方便,而且比较通用.
 
后退
顶部