gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:00:38 25 4
gpt4 key购买 nike

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

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

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

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

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

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

(如果没有办法做到这一点,也没什么大不了的。我可以在 OnColumnMoved 中设置一个标志,以便 OnTitleClick 忽略对其的下一次调用。)

最佳答案

正如问题评论中提到的,您将为 PeekMessage 提供“消息”你自己(var Msg: TMsg)。但丢弃触发OnTitleClick的消息这是不可能的,因为触发这两个事件的是同一条消息。 VCL 执行列移动以响应 WM_LBUTTONUP如果已拖动列,则显示消息。稍后在处理同一消息时 OnTitleClick被调用。

IOW,虽然您可以使用 PeekMessage 从消息队列中删除消息,触发 OnTitleClick 的消息已经发送,因为我们处于 OnColumnMoved处理程序。

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

关于delphi - 如何在 TDbGrid.OnColumnMoved 中放弃鼠标单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8498746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com