2011-12-14 34 views
5

Trong trình xử lý sự kiện TDbGrid.OnColumnMoved, tôi điều chỉnh một số màu tiêu đề cột.Cách loại bỏ nhấp chuột trong TDbGrid.OnColumnMoved

Tôi cũng sử dụng sự kiện OnTitleClicked của lưới để bật menu (cột sắp xếp).

Thật không may, sau khi người dùng kéo một cột và OnColumnMoved hoàn tất, VCL gọi OnTitleClicked. Điều này có nghĩa là pop-up sắp xếp thứ tự xuất hiện sau khi kéo cột.

Có cách nào trong số OnColumnMoved Tôi có thể xóa hàng đợi sự kiện chuột để OnTitleClicked không được gọi?

This thread có mã này, nhưng tôi không có mã số Msg trong OnTitleClicked.

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

(Nếu không có cách nào để làm điều này, nó không phải là vấn đề lớn. Tôi có thể thiết lập một lá cờ trong OnColumnMoved để OnTitleClick bỏ qua các cuộc gọi bên cạnh nó.)

+2

Bạn biết mình có thể khai báo biến 'Msg: tagMsg' (hoặc' TMsg ') của riêng bạn và sử dụng nó trong lệnh gọi 'PeekMessage'? Đừng nghĩ rằng đó là câu trả lời ở đây, nhưng chỉ FYI ... –

+0

Hmmmm - không phải mọi sự kiện OnColumnMoved cũng gây ra một sự kiện OnTitleClick cho tôi (Delphi 10.1), vì vậy cờ là không đáng tin cậy. Tôi có thể sử dụng một bộ đếm thời gian, vì vậy nếu OnTitleClick xảy ra trong vòng (nói) 0,25 giây của OnColumnMoved, nó bị bỏ qua. Nhưng điều đó giống như sử dụng búa tạ để giết bọ chét. Có thêm suy nghĩ nào về điều này không? – DaveBoltman

Trả lời

5

Như đã đề cập trong ý kiến ​​cho câu hỏi , bạn sẽ tự cung cấp 'Msg' cho số PeekMessage (var Msg: TMsg). Tuy nhiên, việc loại bỏ thông báo kích hoạt OnTitleClick là không thể vì nó là cùng một thông báo kích hoạt cả hai sự kiện. VCL thực hiện cột di chuyển theo một thông điệp WM_LBUTTONUP nếu một cột đã được kéo. Sau đó trong quá trình xử lý cùng một thông báo, OnTitleClick được gọi.

IOW, trong khi bạn có thể xóa thư khỏi hàng đợi thư bằng PeekMessage, thông báo kích hoạt OnTitleClick đã được gửi đi vì chúng tôi đang xử lý OnColumnMoved.

Cách tiếp cận dễ nhất có vẻ như đặt cờ như bạn đã nói.

Các vấn đề liên quan