DragMode为dmAutomatic时如何使TScrollBox自动滚动?

问题描述 投票:1回答:1

我有一个ScrollBox,其中有一个GridPanel,其中有按钮。我将所有按钮的DragMode设置为dmAutomatic,以便可以左右移动按钮(拖放)。

但是我有一个问题:因为GridPanel大于ScrollBox,所以ScrollBox的垂直滚动条可见。我想使ScrollBar自动向下滚动,以便可以将底部从可见(顶部)行放到底部无法访问的行中(这是所有Windows程序的典型行为,对吗?)

我有执行此操作的简单代码:在MouseMove中,我检测到鼠标何时靠近ScrollBox的底部,并调整ScrollBox.VertScrollBa.Position向下滚动。仅当我不处于“拖放”模式(如果我不拖动按钮)时,此方法才有效。

如果我开始拖放操作NO mouse events are fired

即使我处于“拖放”模式,我该怎么办才能接收MouseMove事件?解决方案是不使用dmAutomatic并实现我自己的拖放替代方案(基于mousedown,mousemove,mouseup)。这些是更快的解决方法吗?

delphi mouseevent c++builder onmouseover
1个回答
4
投票

在拖放操作期间,VCL将创建一个TDragObject来管理所述拖放操作。只要拖动持续,此TDragObject-或派生类-将开始接收和处理鼠标事件。反过来,它将生成特定于拖放的事件,例如TDragObjectOnDragOver,这些事件可以由-潜在目标-当前鼠标位置下的控件处理。

这将使您在无拖放发生时都处理OnDragOver。另外,以类似方式处理OnDragDrop来捕获当前拖动时的鼠标移动。

© www.soinside.com 2019 - 2024. All rights reserved.