TListBox - 选定项目滚动速度

时间:2014-02-25 20:41:03

标签: delphi listbox scroll

我需要更改选择项目时滚动列表框的速度(按住鼠标左键)并将鼠标移动到列表框之外。要复制该行为,请执行以下操作:

  1. 在表单上删除一个列表框(+ - 250 x 200 odd)。不要太大,否则底部不会看到滚动条。
  2. 将列数设置为3。
  3. 将以下代码添加到FormCreate:

    var
      I: Integer;
    begin
      for I := 0 to 200 do
        ListBox1.Items.Add('Item '+IntToStr(I));
    end;
    
  4. 运行应用程序并确保底部的滚动条可见。现在,在列表中的任何项目上单击并按住鼠标左键。移动鼠标,所选项目将根据鼠标光标下的项目而改变。问题是当鼠标移动到列表框之外时,列表框将非常快速地滚动,这在我的情况下是必要的,以选择隐藏的项目。我试图减慢这种滚动速度。

  5. 我知道这不是列表框的正常用法,并且行为可能不完全符合标准UI准则。这是一个非常特殊的目的,问题是滚动速度使用户非常尴尬。

    我已经使用拖放和计时器将一些东西放在一起但这并不理想,因为控件周围的“击中”区域有点小。如果有一个开箱即用的方式,这将是很好的。

1 个答案:

答案 0 :(得分:1)

下面至少是尴尬。然而,这是我唯一能想到的。使用内插器进行演示,但您可以使用任何其他方式使用ApplicationEvents组件或子类。

type
  TListBox = class(stdctrls.TListBox)
  protected
    procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
  end;

procedure TListBox.WMMouseMove(var Message: TWMMouseMove);
begin
  if GetCapture = Handle then
    Sleep(250);
  inherited;
end;