Das kommt darauf an, was du erreichen willst. Solange du immer nur TMyButton.Create aufrufst, funktioniert das. Sobald aber das Streaming-System oder der
IDE-Formular-Designer ins Spiel kommen, ist dein Constructor außen vor und wird nicht aufgerufen. Wie gesagt, das kann so gewünscht sein - ist es in der Regel aber nicht.
Der Sinn von virtuellen Konstruktoren ist ja genau der, daß sie auch aufgerufen werden können, wenn dem Aufrufenden die tatsächliche Klasse nicht bekannt ist.