Delphi, как создать компонент от TForm

Рейтинг: 1Ответов: 1Опубликовано: 22.01.2023

Необходимо все формы в проекте создавать от формы потомка. Как это делается понятно. Но хочется чтобы в Object Inspector для форм можно было менять свои(дополнительные свойства).

Я пробовал создать компонент:

unit FjForm;

interface

uses Forms, Classes;


type
  TFjForm = class(TForm)
  private
    FSelected: boolean;
  published
    property Selected: Boolean read FSelected write FSelected;
  end;

implementation
procedure Register;
begin
  RegisterComponents('Fj', [TFjForm]);
end;

end.

Он компилируется, но в Tool Palette не появляется. Потом я создаю форму и делаю вот так

unit FramworkFjForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, FjForm,
  Dialogs;

type
  TForm3 = class(TFjForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation

{$R *.dfm}

end.

В Object Inspector ничего не меняется.

Исправляю dfm вместо object пишу inherited

После этого форма перестает открываться, пишет Error creating form: Ancestor for 'TFjForm' not found.

Конечно можно свойства прописать в форме и инициализировать их в FormCreate, но удобнее это делать в Object Inspector. Как сделать чтобы в Object Inspector для формы можно задавать свои свойства?

Ответы

▲ 0Принят

Нашел на форумах, но не проверял. Попробуйте

  1. Сделайте своство или событие публичным

    ...
    published
        property Selected: Boolean read FSelected write FSelected;
    ...
    
  2. Добавьте форму в Object repository.

  3. Создать пакет и добавить форму в пакет.

  4. Добавить в пакет следующую процедуру

    interface
    ...
    procedure Register;
    implementation
    uses dsgnIntf;
    ...
    procedure Register;
    begin
      RegisterCustomModule(TMyCustomForm, TCustomModule);
    end;
    
  5. Установите пакет

  6. Создайте новую форму, которая наследуется от вашей. Откройте Object inspector и проверьте появилось ли свойство.