TListView控件是否具有每当滚动控件时都会触发的事件?
我不希望必须对TListView控件进行子类划分。
发布于 2011-03-30 05:02:17
这非常有效,但可能会违反您的问题的限制。
在包含使用TListView的表单(在TForm声明之前)的单元的interface部分中,添加
type
TListView = class(ComCtrls.TListView)
protected
procedure WndProc(var Message: TMessage); override;
end;然后,在同一单元的implementation部分中,定义
procedure TListView.WndProc(var Message: TMessage);
begin
inherited;
case Message.Msg of
WM_HSCROLL, WM_VSCROLL: beep;
end;
end;发布于 2011-03-30 06:17:30
您可以在不编写子类的情况下派生窗口的子类,当您希望更改的行为是一次性需求时,这是很有用的。像在Andreas's answer中一样编写一个TWndMethod函数,但是可以在您想要的任何类中编写它,比如拥有列表视图的窗体。将其分配给列表视图控件的WindowProc属性。在执行此操作之前,请存储该属性的先前值,以便您可以将所有其他消息推迟到该属性。
type
TNanikForm = class(TForm)
ListView: TListView;
private
FPrevListViewProc: TWndMethod;
procedure ListViewWndProc(var Msg: TMessage);
public
procedure Loaded; override;
end;
procedure TNanikForm.ListViewWndProc(var Msg: TMessage);
begin
case Msg.Message of
wm_VScroll: ;
else FPrevListViewProc(Msg);
end;
end;
procedure TNanikForm.Loaded;
begin
inherited;
FPrevListViewProc := ListView.WindowProc;
ListView.WindowProc := ListViewWndProc;
end;发布于 2011-03-30 05:12:46
或者,如果你只想捕获垂直滚动事件,你可以使用这个。代码与Andreas发布的代码几乎相同...
type
TListView = class(ComCtrls.TListView)
protected
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
end;
procedure TListView.WMVScroll(var Message: TWMVScroll);
begin
inherited;
Beep;
end;https://stackoverflow.com/questions/5478713
复制相似问题