Hallo.
Ich habe einen TMonthCalendar. Wenn ich den mit der Maus bediene, wird ein OnClick-Event ausgelöst.
Wenn man TabStop auf True setzt und mit der Tastatur das Ding fokussiert (es ist nicht möglich, die Maus zu benutzen, um einen TMonthCalendar zu fokussieren!) kriege ich das nicht mit. Dass TabStop standardmäßig False ist und dass man das Ding nur mit der Tastatur fokussieren kann, sagt schon viel aus. Aber auch im Standardzustand besitzt das Ding ein Kontextmenü mit "Gehe zu Heute", von dessen Nutzung und der resultierenden Änderung ein Programm ebenfalls nichts mitbekommen kann.
Nun könnte man sagen: „Ja, aber es ist ja ein On
Click-Event.“ Stimmt, aber bei TCheckBox wird das Event auch per Tastatur ausgelöst. Bei TComboBox existiert ein OnClick-Event, dessen Benennung zu den größten ungeklärten Fragen der Menschheit gehört, da es zwar in allen möglichen Fällen ausgelöst wird – aber nicht beim Klicken auf das Steuerelement.
Ich habe mir dann einen Fix für die Methode
procedure TMonthCalendar.CNNotify(var Message: TWMNotifyMC);
geschrieben, wo das Event (falls zugewiesen) beim Fall
MCN_SELECT, MCN_SELCHANGE:
aufgerufen wird. Windows löst dieses neue OnChange-Event dann aus, wenn man die Tastatur benutzt oder besagtes Kontextmenüitem benutzt. Programmatische Änderungen an Date lösen es nicht aus.
Ich finde das aber von Delphi aus nicht normal. Wäre das ein Fall für
QC?
(Getestet mit Delphi 2010 und 10.4.)