|
Вопрос # 3 017/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Необходимо описать класс - наследник TIdTCPServer (Из Indy 10). Вопрос: Как в наследнике описать обработчики событий родительского класса? То есть примерчик нужен где что писать и как.
 |
Вопрос задал: Roman Novikov (статус: Посетитель)
Вопрос отправлен: 21 июля 2009, 14:49
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Roman Novikov!
в этом случае наследование себя не оправдывает. Потом будут вопросы "а как скрыть такое - то свойство" и тому подобное. В этом случае лучше применять делегирование. Суть заключается в том, что создаем компонент, у которого приватным полем будет TIdTCPServer. Если надо, что бы компонент можно было положить на форму, просто наследуемся от TComponent.
Что бы сделать свой обработчик, надо просто вначале поставить TIdTCPServer на форму, создать нужный обработчик и посмотреть, какую сигнатуру создала делфи. потом просто её копируем и переносим в приватную часть нашего компонента.
Ну и после создания TIdTCPServer не забываем связать с обработчиком в виде tcpserver.OnEvent = MyEvent;
Для того, что бы делфи для данного обработчика создала заготовку метода, просто нужно нажать Ctrl+Shift+C.
Если нужен доступ к какому то свойству извне, просто создаем метод/свойство посредник.
Вначале кажеться сложно и громоздко, но потом когда появляются приимущеста...
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 21 июля 2009, 15:11
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 21 июля 2009, 23:56; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 21 июля 2009, 15:00 [#1]:
то есть "описать"? - дать возможность наследнику самому обработать события предка или что?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Roman Novikov (статус: Посетитель), 21 июля 2009, 15:04 [#2]:
Ну к примеру есть событие OnExecute или OnConnect у TIdTCPServer, нужно обработчики как-то описать. Но не хочется бросать на форму компоненты, хочется описать свой класс-сервер, а потом просто добавлять его в проект и использовать.
|
|
Roman Novikov (статус: Посетитель), 21 июля 2009, 20:00 [#3]:
Описываю: Обычно приходится кидать на форму компонент и в инспекторе объектов по даблклику на нужном событии описывать обработчик, в том же юните что и код формы. Мне по сути нужно почти то же самое... описать класс-наследник (потом может будет компонент) в котором также нужно описать обработчик и плюс свои свойства и методы. Как это сделать?
|
|
Вадим К (статус: Академик), 21 июля 2009, 20:27 [#4]:
ещё раз внимательно читаем мой ответ. там всё написано. Информации более, чем достаточно. Или надо писать готовый пример, разжевать?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Roman Novikov (статус: Посетитель), 21 июля 2009, 22:40 [#5]:
Пардон муа, я ответ прошляпил.
Что такое сигнатура?
>Ну и после создания TIdTCPServer не забываем связать с обработчиком в виде tcpserver.OnEvent = MyEvent;
В смысле после создания самого объекта проинициализировать событие?
У меня вот с этим и возник вопрос - воде бы конда писал обработчик, то видел как автоматически добавлялась в код формы процедура в интерфейсной части и в расделе реализации, а инициализацию как описано в теории не замечал.
Со свойствами все ясно, а в событиях не ясно для чего нужно поле процедурного типа помимо самого свойства процедурного типа с методами... то есть там 3 переменные с одним типом.
|
|
Вадим К (статус: Академик), 21 июля 2009, 23:56 [#6]:
когда компонент ставиться на форму, делфи сама связывает события с методами. они хранятся в файле формы.
Когда именно инициализировать - интересный вопрос. На самом деле никто не мешает завести три - четыре обработчика и динамически их менять.
"сигнатура" - в данном случае это список типов параметров процедуры. Если подумать немножко, то станет понятно, что имя параметра роли не играет, а только его тип. А также кол-во параметров и их порядок.
Последняя фраза непонятна.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|