Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何在TDbGrid.OnColumnMoved中放弃鼠标单击_Delphi_Delphi 2010 - Fatal编程技术网

Delphi 如何在TDbGrid.OnColumnMoved中放弃鼠标单击

Delphi 如何在TDbGrid.OnColumnMoved中放弃鼠标单击,delphi,delphi-2010,Delphi,Delphi 2010,在TDbGrid.OnColumnMoved事件处理程序中,我调整了一些列标题的颜色 我还使用网格的OnTitleClicked事件弹出一个(排序列)菜单 不幸的是,在用户拖动列并完成OnColumnMoved之后,VCL调用OnTitleClicked。这意味着在拖动列后会出现“我的排序顺序”弹出窗口 在OnColumnMoved中是否有方法可以清除鼠标事件队列,以便不会调用OnTitleClicked 有此代码,但我在OnTitleClicked中没有Msg while PeekMessag

TDbGrid.OnColumnMoved
事件处理程序中,我调整了一些列标题的颜色

我还使用网格的
OnTitleClicked
事件弹出一个(排序列)菜单

不幸的是,在用户拖动列并完成
OnColumnMoved
之后,VCL调用
OnTitleClicked
。这意味着在拖动列后会出现“我的排序顺序”弹出窗口

OnColumnMoved
中是否有方法可以清除鼠标事件队列,以便不会调用
OnTitleClicked

有此代码,但我在
OnTitleClicked
中没有
Msg

while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, 
  PM_REMOVE or PM_NOYIELD) do;

(如果没有办法,那也没什么大不了的。我可以在
OnColumnMoved
中设置一个标志,这样
OnTitleClick
就会忽略对它的下一个调用。)

如问题的评论中所述,您可以为自己提供
peek消息的“Msg”(
var Msg:TMsg
)。但是不可能丢弃触发
OnTitleClick
的消息,因为触发这两个事件的是同一条消息。如果列被拖动,VCL将根据
WM_LBUTTONUP
消息执行列移动。稍后在处理同一消息的过程中,将调用
OnTitleClick

注意,虽然您可以使用
PeekMessage
从消息队列中删除消息,但触发
OnTitleClick
的消息已被调度,因为我们处于
OnColumnMoved
处理程序中


最简单的方法看起来像是按照您所说的那样设置标志。

您知道您可以声明自己的
Msg:tagMsg
(或
TMsg')变量,并在调用
PeekMessage`时使用它?不要认为这是答案,但仅供参考…嗯-不是每个OnColumnMoved事件都会为我触发OnTitleClick事件(Delphi 10.1),因此该标志不可靠。我可以使用计时器,因此如果OnTitleClick在OnColumnMoved的0.25秒内发生,它将被忽略。但这就像用大锤杀死跳蚤一样。对此有进一步的想法吗?