Шаблоны форм и собственные события

 
0
 
Delphi, Kylix and Pascal
ava
Matrex | 30.10.2016, 10:22
Доброго дня!!

Есть в Delphi такое понятие как «Шаблоны форм». Хочу создать создать шаблон формы со своим событием. Делаю так:


unit TestEvent_f;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  tOnMyEvent = procedure() of object;

type
  TTestEventForm = class(TForm)
  private
    fOnMyEvent: tOnMyEvent;
    { Private declarations }
  public
    property OnMyEvent: tOnMyEvent read fOnMyEvent write fOnMyEvent;
    { Public declarations }
  end;

var
  TestEventForm: TTestEventForm;

implementation

{$R *.dfm}

end.


И добавляю форму в шаблон (правой кнопкой мыши на форме, затем "Add to Repository").

Вопрос. Как при использовании этой формы в своих проектах сделать так, что бы мое событие (OnMyEvent) выводилось в инспекторе событий?
[img]http://i057.radikal.ru/1610/46/243f1a1e401d.png[/img]



Ответы (6)
ava
testX | 31.10.2016, 10:08 #
Перенести событие из public в published
ava
Matrex | 31.10.2016, 16:54 #
Не работает и с published. Точнее не отображается в инспекторе объектов на вкладке "события", там где "OnCreate", "OnShow", если создать эту форму через шаблон. Если назначать событие в real-time все работает, впрочем как и с секцией public. Задача - вывести это событие в инспектор объектов для того что бы работать с событием в design-time...
ava
Sajtran | 31.10.2016, 21:56 #
Репозитории это просто папки шаблонов
Delphi не сможет найти информацию о типах без компиляции исходников в пакет (bpl), соответственно и объявленных вами свойств не будет в инспекторе объектов
ava
Matrex | 01.11.2016, 07:39 #
Плохо. Тогда нужен совет. Есть проект (много форм, работа с БД). Идея с шаблонами состояла в том, что бы создать одну форму-шаблон, в которой заложить все логику работы с БД (добавление, редактирование и т.д.) и достать такие события как «Перед добавлением записи», «Перед редактированием записи» и т.д. наружу.

В настоящий момент задача решена с помощью виртуальных процедур, но такое решение, да работает, но не очень «элегантно». Какие могут быть еще варианты? Может создать свой компонент с нужными событиями (типа «TAction»). Ведь события кнопки, размещенной на шаблоне, видны и без компиляции, кстати, интересно почему?
ava
Vas | 02.11.2016, 13:31 #
Ну наследуйте свои формы от общей и своим свойствам присваивайте процедуры нужные. Или обязательно надо видеть в инспекторе объектов свойства?
ava
Matrex | 03.11.2016, 07:32 #
Сейчас так и сделано - использую виртуальные процедуры в наследниках.

Как я понял (пообщавшись в том числе и на других форумах) - есть три решения:

1. Виртуальные методы
2. Свой компонент с событиями
3. Можно из формы сделать компонент а потом из него форму (пока не разобрался как)...

Всем спасибо за советы.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
ava  Vas   Matrex   Sajtran   testX
advanced
Отправить