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

 
0
 
Delphi, Kylix & 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]



Kommentare (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. Можно из формы сделать компонент а потом из него форму (пока не разобрался как)...

Всем спасибо за советы.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
ava  Vas   Matrex   Sajtran   testX
advanced
Absenden