![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 02.07.2009
Сообщений: 7
|
![]()
Приветствую!
У меня есть класс для валидации введенных пользователем данных. В один из методов класса происходит передача виджета как TWidgetControl и некоторых параметров, отвечающих за его валидацию. Я выполняю runtime валидацию, то есть, сразу после окончания ввода происходит валидация данных. Для этого необходимо переопределение события OnChange. Я его переопределяю, но как это делается сейчас, мне не нравится. Дело в том, что я вначале определяю класс виджета, а потом устанавливаю OnChange, то есть: Код PHP код:
Но есть еще и TComboBox, TListBox и т.д. + мои собственные виджеты. Мне приходиться перечислять их все, а так же ссылать на них в секции Uses. Вопрос такой: можно ли определить у виджета наличие события без приведения к типу и установить? Ну или как-то сделать, чтобы не приходилось перечислять все виджеты, которые только могут быть? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
Использовать не конкретные приведенные классы, а общего предка
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#3 |
Регистрация: 02.07.2009
Сообщений: 7
|
![]()
Это ясно. Но дело в том, что предок у TEdit - TCustomEdit, у TComboBox - TCustomComboBox, TListBox - TCustomListBox. А они уже наследуются от TWidgetControl, у которого нет основных событий, то есть события определяются не у предка (TWidgetControl) а у потомков (TWidgetControl, TComboBox, TCustomListBox).
Все бы ничего, не так много встроенные виджетов, можно было бы всех их легко перечислить, даже вот эти три TCustomEdit, TComboBox, TCustomComboBox - и все различные поля ввода, маски и прочее уже обрабатываются как надо. Но у меня свои виджеты, которые представляют из себя микс, то есть наследуются от TPanel, а на нем уже разные специфические группы. Вот это я не могу так перечислить. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
Т.е. иерархия ваша собственная ? тогда практичней будет создать интерфейс, в который включить событие и реализовывать этот интерфейс классами, тогда рассматривайте объект не как объект некого класса, а как объект некого интерфейса. Либо же динамично проверять реализует ли объект некий интерфейс.
Ну или использовать RTTI FieldAddress или TypInfo.GetPropInfo
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи Последний раз редактировалось Квэнди; 02.07.2009 в 20:56. |
![]() |
![]() |
![]() |
#5 |
Регистрация: 02.07.2009
Сообщений: 7
|
![]()
Да, то что нужно. Так как стандартные виджеты не реализуют подобного интерефейса, а хотелось бы унифицированности, поэтому я воспользовался вторым вариантом.
Не знал что есть такой юнит TypInfo. Спасибо за помощь! Использую теперь его примено вот так: PHP код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проверит наличие програмы. | blackstersl | Общие вопросы Delphi | 5 | 24.06.2009 12:16 |
Наличие указателя в объекте Edit | El Fierro | Общие вопросы Delphi | 14 | 15.03.2009 13:47 |
проверяем наличие счета | Romuald | Microsoft Office Excel | 2 | 14.01.2009 12:44 |
Проверка на наличие таблицы в БД | Ramires | БД в Delphi | 3 | 18.12.2008 08:59 |
Определить наличие коммента | softrix | Microsoft Office Excel | 2 | 28.04.2008 23:01 |