При разработке компонентов в Delphi 6 Pro может возникнуть проблема, когда при работе с дизайнером форм (Form Designer) появляется исключение "cannot assign NIL to a TFont". Это может произойти, если в компоненте используется свойство TFont для публикации, и при попытке его редактирования в дизайнере возникает указанная ошибка.
Описание проблемы
В вашем случае, при создании нового компонента, который имеет опубликованное свойство TFont, при добавлении компонента на форму и попытке редактирования свойства textAttr_1, вы столкнулись с исключением. Проблема заключается в том, как компонент обрабатывает создание и назначение свойства TFont.
Пример кода компонента
unit JvExtendedTextAttributes;
interface
uses
Windows, Messages, SysUtils, Classes, JvRichEdit, Graphics;
type
TJvExtendedTextAttributes = class(TComponent)
private
{ Private declarations }
protected
{ Protected declarations }
FTextAttr_1: TFont;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
property textAttr_1: TFont read FTextAttr_1 write FTextAttr_1;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('FAVORITES', [TJvExtendedTextAttributes]);
end;
constructor TJvExtendedTextAttributes.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FTextAttr_1 := TFont.Create;
end;
end.
Подтвержденный ответ
Основная проблема в том, что вы не добавили ключевое слово override в определение конструктора компонента. Это означает, что виртуальный конструктор TComponent не переопределяется, и, следовательно, экземпляр TFont не создается, оставаясь nil.
Кроме того, необходимо реализовать метод Set, который будет вызывать Assign для копирования свойств шрифта, вместо замены экземпляра, что может привести к ошибкам коррекции памяти.
В VCL есть множество примеров такого подхода. Вот пример реализации метода Set:
Устранение ошибки в Delphi 6 Pro, связанной с назначением значения NULL свойству TFont при работе с Form Designer.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.