Ich zitiere mal kurz die englische Delphi Hilfe zum Thema Message Handler
Zitat von
Delphi:
A message handler does not have to include the override directive to override an inherited message handler. In fact, it doesn’t have to specify the same method name or parameter type as the method it overrides. The message ID alone determines which message the method responds to and whether it is an override.
Kurz: Methoden mit einer Message ID werden automatisch in die virtuelle Tabelle aufgenommen. Ein Handler für den virtuellen Bereich wird in dem Moment eingeführt, wenn es bereits eine Methode in vorhergenden Klassen für das gleiche Event gibt
Das heisst - virtuell ist "illegal" für Event Handler. Warum der jetzt nicht funktioniert hat ...