首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TListView滚动事件

TListView滚动事件
EN

Stack Overflow用户
提问于 2011-03-30 04:46:08
回答 4查看 4.5K关注 0票数 2

TListView控件是否具有每当滚动控件时都会触发的事件?

我不希望必须对TListView控件进行子类划分。

EN

回答 4

Stack Overflow用户

发布于 2011-03-30 05:02:17

这非常有效,但可能会违反您的问题的限制。

在包含使用TListView的表单(在TForm声明之前)的单元的interface部分中,添加

代码语言:javascript
复制
type
  TListView = class(ComCtrls.TListView)
  protected
    procedure WndProc(var Message: TMessage); override;
  end;

然后,在同一单元的implementation部分中,定义

代码语言:javascript
复制
procedure TListView.WndProc(var Message: TMessage);
begin
  inherited;
  case Message.Msg of
    WM_HSCROLL, WM_VSCROLL: beep;
  end;
end;
票数 7
EN

Stack Overflow用户

发布于 2011-03-30 06:17:30

您可以在不编写子类的情况下派生窗口的子类,当您希望更改的行为是一次性需求时,这是很有用的。像在Andreas's answer中一样编写一个TWndMethod函数,但是可以在您想要的任何类中编写它,比如拥有列表视图的窗体。将其分配给列表视图控件的WindowProc属性。在执行此操作之前,请存储该属性的先前值,以便您可以将所有其他消息推迟到该属性。

代码语言:javascript
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2011-03-30 05:12:46

或者,如果你只想捕获垂直滚动事件,你可以使用这个。代码与Andreas发布的代码几乎相同...

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5478713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档