Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Устранение ошибки назначения NULL свойству TFont в Delphi 6 Pro

Delphi , Компоненты и Классы , Свойства и События

При разработке компонентов в 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:

property Font: TFont read FFont write SetFont;
...
procedure TMyComponent.SetFont(Value: TFont);
begin
  FFont.Assign(Value);
end;

Альтернативный ответ не требуется, так как проблема уже описана в контексте.

Комментарии

Не забудьте добавить обработчик события OnChange, чтобы ваш компонент мог реагировать на изменения в подсвойствах шрифта.

Выводы для исправления ошибки

  1. Добавьте ключевое слово override в определение конструктора компонента.
  2. Реализуйте метод Set для свойства TFont, который будет использовать метод Assign для копирования свойств шрифта.

Применение этих шагов позволит избежать возникновения ошибки "cannot assign NIL to a TFont" в дизайнере форм в Delphi 6 Pro.

Создано по материалам из источника по ссылке.

Устранение ошибки в Delphi 6 Pro, связанной с назначением значения NULL свойству TFont при работе с Form Designer.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Свойства и События ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 09:55:47/0.0034608840942383/0