首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TListView和鼠标滚轮滚动

TListView和鼠标滚轮滚动
EN

Stack Overflow用户
提问于 2011-03-14 18:14:38
回答 1查看 3.8K关注 0票数 7

我在表单中有一个TListView组件。它相当长,我希望用户能够滚动它,如果鼠标在组件上,滚轮是滚动的。我找不到TListView对象的任何OnMouseWheel、OnMouseWheelDown或OnMouseWheelUp事件。我该怎么做呢?

向你致敬,伊维隆

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-14 18:21:30

下面是我完成此操作的代码:

代码语言:javascript
复制
type
  TMyListView = class(TListView)
  protected
    function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
    function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
  end;

type    
  TMouseWheelDirection = (mwdUp, mwdDown);

function GenericMouseWheel(Handle: HWND; Shift: TShiftState; WheelDirection: TMouseWheelDirection): Boolean;
var
  i, ScrollCount, Direction: Integer;
  Paging: Boolean;
begin
  Result := ModifierKeyState(Shift)=[];//only respond to un-modified wheel actions
  if Result then begin
    Paging := DWORD(Mouse.WheelScrollLines)=WHEEL_PAGESCROLL;
    ScrollCount := Mouse.WheelScrollLines;
    case WheelDirection of
    mwdUp:
      if Paging then begin
        Direction := SB_PAGEUP;
        ScrollCount := 1;
      end else begin
        Direction := SB_LINEUP;
      end;
    mwdDown:
      if Paging then begin
        Direction := SB_PAGEDOWN;
        ScrollCount := 1;
      end else begin
        Direction := SB_LINEDOWN;
      end;
    end;
    for i := 1 to ScrollCount do begin
      SendMessage(Handle, WM_VSCROLL, Direction, 0);
    end;
  end;
end;

function TMyListView.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  //don't call inherited
  Result := GenericMouseWheel(Handle, Shift, mwdDown);
end;

function TMyListView.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  //don't call inherited
  Result := GenericMouseWheel(Handle, Shift, mwdUp);
end;

GenericMouseWheel是相当不错的。它适用于任何带有垂直滚动条的控件。我在树状视图、列表视图、列表框、备忘录、丰富编辑等方面使用它。

您将会错过我的ModifierKeyState例程,但是您可以使用您自己的方法来检查轮子事件是否被修改。你想这样做的原因是,例如,CTRL+mouse滚轮意味着缩放而不是滚动。

不管它有什么价值,它看起来是这样的:

代码语言:javascript
复制
type
  TModifierKey = ssShift..ssCtrl;
  TModifierKeyState = set of TModifierKey;

function ModifierKeyState(Shift: TShiftState): TModifierKeyState;
const
  AllModifierKeys = [low(TModifierKey)..high(TModifierKey)];
begin
  Result := AllModifierKeys*Shift;
end;
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5297234

复制
相关文章

相似问题

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