![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать событие в компоненте? [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]ммм... плохо понял, что ты хочешь сказать.
Попробуй еще раз объяснить...