Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать событие в компоненте? [D5]


Юрий ©   (2002-10-22 22:53:00) 

Всем привет.
Есть вопрос - как имплементировать событие в компоненте? Ситуация такая:
TMyComp = Class(TComponent)
UDP : TNMUDP;
..........
У элемента UDP есть событие DataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);
Как сделать так, что бы это событие принадлежало бы моему TMyComp и обрабатывало событие элемента UDP?
Спасибо. Юрий.


Юрий Зотов   (2002-10-23 03:08:00) [1]

Не знаю толком Вашей задачи, но, похоже, это правильное решение.


Юрий   (2002-10-23 03:02:00) [2]

Вообще-то, я сейчас пересмотрел свой план и решил переставить местами слагаемые: компонент сделаю на основе TNMUDP атцестора, а не TComponent. И добавлю все свои функции в TNMUDP, а все необходимое события унаследую от "родителя" и "не буду себе портить жизнь".


Юрий   (2002-10-23 02:53:00) [3]

Я пишу свой компонент, который использует TNMUDP из палитры Delphi FastNet...


Юрий Зотов   (2002-10-23 02:39:00) [4]

Уточните, FUDP - это ссылка на ВНУТРЕННИЙ или ВНЕШНИЙ компонент? То есть, он создается внутри Вашего компонента, или лежит где-то совершенно отдельно от Вашего?

От этого многое может зависеть. Потому что для внешнего задача усложняется (понадобится Set, Notification, да и вообще нельзя цепляться на события внешнего компонента).


Юрий   (2002-10-23 02:28:00) [5]

Значит, если я напишу TBlaBLaEvent, то мне придется его каким-то образом описывать, что бы Delphi знала как его есть и на какой именно ивент его цеплять. Тогда действительно лучше использовать то что есть.
Спасибо Вам большое. Юрий.


Юрий Зотов   (2002-10-23 02:04:00) [6]

Да, можете написать все, что угодно, Delphi все съест и даже сама у себя зарегистрирует (точнее, сгенерит RTTI).

НО!!! Скорее всего, событие такого типа уже определено в UDP. Тогда есть смысл не плодить новый тип, а использовать готовый.


Юрий   (2002-10-23 00:58:00) [7]

Да. Спасибо большое. Сейчас попробую. А вот в этой части
type
TDataReceivedEvent = procedure (Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer) of object;

TDataReceivedEvent - это что-то из зарезервированных событий или я могу написать что-нибудь типа TBlaBLaEvent?


Юрий Зотов   (2002-10-23 00:45:00) [8]

Может стоит вместо TMyComp = Class(TComponent)
написать TMyComp = Class(TNMUDP)

Может, и стоит. Это зависит от логики построения и работы Вашего компонента. Т.е., сначала нужно ТОЧНО определиться, ЧТО он будет делать и КАК он будет это делать. Решить можете только Вы.


Юрий Зотов   (2002-10-23 00:41:00) [9]

type
TDataReceivedEvent = procedure (Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer) of object;
// Скорее всего, такой тип уже есть, надо использовать

TMyComp = class(TComponent)
private
FUDP : TNMUDP;
function GetOnDataReceived: TDataReceivedEvent;
procedure SetOnDataReceived(const Value: TDataReceivedEvent);
..........
published
property OnDataReceived: TDataReceivedEvent
read GetOnDataReceived write SetOnDataReceived;
end;

function TMyComp.GetOnDataReceived: TDataReceivedEvent;
begin
Result := FUDP.DataReceived
end;

procedure TMyComp.SetOnDataReceived(const Value: TDataReceivedEvent);
begin
FUDP.DataReceived := Value
end;


Юрий   (2002-10-23 00:11:00) [10]

Может стоит вместо TMyComp = Class(TComponent)
написать TMyComp = Class(TNMUDP), тогда мой компонент унаследует свойства и события TNMUDP?


Юрий   (2002-10-23 00:03:00) [11]

Пишу Компонент. Называется TMYComp. Использоваться он будет в другой APP (типа MyComp : TMyComp). Этот мой компонент использует другой компонент TNMUDP для передачи и приема данных.
Идеальный вариант был бы если бы TMyComp делал все от начала до конца - кодировал, отправлял, получал, раскодировал... 1,2 и 4 позиции работают. В 3-ей нужно поймать событие - вот тут-то и не стыкуется. DataReceived(Sender: TComponent... откликается только в исходной проге, а когда я пытаюсь из проги сделать компонент событие перестает работать.
Кажется теперь сам запутался. Краткость - сестра таланта...


Malder   (2002-10-22 23:20:00) [12]

ммм... плохо понял, что ты хочешь сказать.

Попробуй еще раз объяснить...


Наверх

Титульная страница Поиск, карта сайта Написать письмо