W procedurze obsługi zdarzeń TDbGrid.OnColumnMoved
dostosowuję kolory niektórych nagłówków kolumn.Odrzucanie kliknięcia myszą w TDbGrid.OnColumnMoved
Używam również zdarzenia siatki OnTitleClicked
do wyskakiwania menu (kolumna sortowania).
Niestety, po tym, jak użytkownik przeciągnie kolumnę i zakończy się OnColumnMoved
, VCL wywołuje OnTitleClicked
. Oznacza to, że moje okno pop-up sortowania pojawia się po przeciągnięciu kolumny.
Czy jest jakiś sposób w OnColumnMoved
Czy mogę wyczyścić kolejkę zdarzeń myszy, aby OnTitleClicked
nie został wywołany?
This thread ma ten kod, ale nie mam Msg
w OnTitleClicked
.
while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST,
PM_REMOVE or PM_NOYIELD) do;
(Jeśli nie ma sposobu, aby to zrobić, to nie jest wielka sprawa. Mogę ustawić flagę w OnColumnMoved
tak że OnTitleClick
ignoruje następną rozmowę z nim.)
Czy wiesz, że możesz zadeklarować własną zmienną 'Msg: tagMsg' (lub' TMsg ') i użyć jej w wywołaniu 'PeekMessage'? Nie sądzę, że jest to odpowiedź tutaj, ale po prostu FYI ... –
Hmmmm - nie każde zdarzenie OnColumnMoved wyzwala również dla mnie zdarzenie OnTitleClick (Delphi 10.1), więc flaga nie jest wiarygodna. Mógłbym użyć timera, więc jeśli OnTitleClick wystąpi w ciągu (powiedzmy) 0.25 sekund od OnColumnMoved, zostanie zignorowany. Ale to jak użycie młota do zabicia pchły. Jakieś dalsze przemyślenia na ten temat? – DaveBoltman