Delphi назначает событие в классе

Мне нужно изменить сопоставление типов данных для моего пользовательского класса запросов (я использую FireDAC). Это не проблема, я уже создал процедуру, которая выполняет эту работу. Но я врезался в стену, когда реализовывал это в больших масштабах. Я создал процедуру в своем классе, которая получает свойство self.FormatOptions.MapRules из своего компонента подключения к базе данных (который имеет правильные правила сопоставления типов данных). Теперь я хочу изменить свой класс, чтобы каждый компонент этого класса выполнял мою процедуру OnOpen, но я не могу найти способ назначить процедуру событию в классе.

Есть ли способ сделать это или «наследовать» это свойство от моего компонента подключения к базе данных, когда он не является родителем моего компонента запроса?

Я уже пытался сделать это с помощью конструктора, но поскольку я не создаю компонент запроса во время выполнения, конструктор не вызывается

Поскольку компонент запроса используется в проекте более 500 раз, я не хочу каждый раз вручную назначать процедуру событию...


person Paul    schedule 07.08.2018    source источник
comment
Ну а правила карты (собственно все настройки, если они не изменены в объектах набора данных) уже наследуются от назначенного объекта соединения. Я не вижу смысла что-то здесь делать.   -  person Victoria    schedule 07.08.2018
comment
Как сказала Виктория, правила карты уже унаследованы. Вы получите лучшие ответы, если покажете свой код, демонстрирующий проблему. Мне непонятно, что вы подразумеваете под пользовательским классом запроса и всеми объектами - даже компоненты, переброшенные в форму или модуль данных, вызывают конструктор. Возможно, вам придется подумать о переопределении определенного метода вместо того, чтобы пытаться установить обработчик событий, но это всего лишь предположение, не видя никакого кода.   -  person Mark Elder    schedule 07.08.2018
comment
@Victoria изначально я думал, что это должно быть так, как вы предложили, но я / был сбит с толку, потому что я получил бы нарушение прав доступа, когда попытался получить доступ к dat.formatoptions.maprules.items[0] (это мой запрос, соединение имеет его правильно установить в этом случае). Итак, я начал возиться с TMy (Queryclass). теперь я вернул все по умолчанию в свой TMy (Queryclass). Путем тестирования я обнаружил, что ownmaprules имеет значение true по наследству, как и предполагалось. Но, похоже, это не maprules.items, это должно быть так или это мое непонимание отладки унаследованных свойств...?   -  person Paul    schedule 08.08.2018


Ответы (1)


Хорошо, я просто "решил" это. Проблема была внутри моего класса hiracy. Это было как;

  • Верхний слой: TMyCustomClass
  • Середина: TMygeneralClass
  • Внизу: TStandardClass

В среднем классе по умолчанию для Dataset.formoptions.ownmaprules было установлено значение true, что нарушило наследие. По сути, я не понимал, как работает наследие;)

person Paul    schedule 08.08.2018