Ваша главная проблема в том, что вы забыли добавить override
в конструктор вашего компонента.Это означает, что он не вызывается, потому что инфраструктура VCL использует преимущества виртуального конструктора TComponent
.Это объясняет, почему ваш экземпляр шрифта равен nil.
Вам также необходим метод set
, который вызывает Assign
для копирования свойств шрифта, а не заменяет экземпляр, который неизбежно приводит к ошибкам повреждения памяти.1007 *
Источник VCL имеет бесчисленное множество примеров этого паттерна.Это выглядит так:
property Font: TFont read FFont write SetFont;
...
procedure TMyComponent.SetFont(Value: TFont);
begin
FFont.Assign(Value);
end;