1

在 Delphi 中,我在表单的右侧添加了一个滚动条组件(垂直方向)。

我添加了一个 Scrollbar OnChange 事件,因此当用户用鼠标单击 UpArrow 或 DownArrow 按钮时,我可以更改表单的视图和滚动条拇指的位置,这很好用。

但是 OnChange 事件似乎仅在最初在箭头上按下鼠标按钮时才会触发。

我注意到所有滚动条控件都重复命令并继续滚动,而鼠标仍然按下箭头,我想实现这种行为。

那么如何轻松检测用户是否没有移动鼠标并在鼠标停留在箭头上方时继续按下鼠标按钮?


结论。不知何故,我项目中滚动条中的某些内容已损坏。在我删除 ScrollBar 并再次添加后,问题就消失了。

这是我花了很多时间解决的棘手问题之一。谢谢你的帮助。我要结束这个问题。

4

3 回答 3

4

使用OnScroll事件。

只要鼠标按住滚动条箭头按钮,以下代码就会将“xxx”添加到备忘录中。用德尔福 6 测试。

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
    Memo1.Lines.Add( 'xxx' );
end;
于 2009-03-28T15:46:23.197 回答
3

处理自动重复的常用方法是启用TTimer并在OnTimer()事件处理程序中检查是否需要再次执行操作,如果不需要,则停用计时器。如果您需要示例代码,我似乎记得SynEdit控件在拖放操作中使用了类似的自动滚动技术。

于 2009-03-28T16:30:25.477 回答
0

如果一个组件没有封装您正在寻找的行为,并且您无法使用可用的方法轻松地模拟该行为,那么您实际上应该将最接近的组件子类化为您需要的大部分功能并添加缺少的行为。

我知道这涉及到一些额外的工作,但这确实是更好的方法。现在使用 Delphi,我似乎记得子类化组件还需要一些额外的工作才能从 IDE 中用于表单设计,也许从版本 7 开始这已经改变了。

于 2009-03-28T16:42:10.143 回答