Как отменить щелчок мыши в TDbGrid.OnColumnMoved - PullRequest
6 голосов
/ 14 декабря 2011

В обработчике событий TDbGrid.OnColumnMoved я настраиваю некоторые цвета заголовков столбцов.

Я также использую событие сетки OnTitleClicked для вызова меню (сортировать столбец).

К сожалению, после того, как пользователь перетаскивает столбец и OnColumnMoved завершается, VCL вызывает OnTitleClicked.Это означает, что мое всплывающее окно порядка сортировки появляется после перетаскивания столбца.

Есть ли способ в OnColumnMoved Я могу очистить очередь событий мыши, чтобы OnTitleClicked не вызывался?

Этот поток имеет этот код, но у меня нет Msg в OnTitleClicked.

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

(Если нет способа сделать это, он не большойЯ могу установить флаг в OnColumnMoved, чтобы OnTitleClick игнорировал следующий вызов.)

1 Ответ

6 голосов
/ 14 декабря 2011

Как уже упоминалось в комментариях к вопросу, вы должны указать «Msg» для PeekMessage самостоятельно (var Msg: TMsg). Но отбросить сообщение, которое вызывает OnTitleClick, невозможно, потому что это одно и то же сообщение, которое запускает оба события. VCL выполняет перемещение столбца в ответ на сообщение WM_LBUTTONUP, если столбец был перемещен. Позже при обработке этого же сообщения вызывается OnTitleClick.

IOW, хотя вы можете удалять сообщения из очереди сообщений с помощью PeekMessage, сообщение, которое вызывает OnTitleClick, уже отправлено, поскольку мы находимся в обработчике OnColumnMoved.

Самый простой подход выглядит как установка флага, как вы сказали.

...