Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.04;
Скачать: CL | DM;

Вниз

Как создать событие в компоненте?   Найти похожие ветки 

 
Юрий   (2002-10-22 22:53) [0]

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


 
Malder ©   (2002-10-22 23:20) [1]

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

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


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

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


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

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


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

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:45) [5]

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

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


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

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

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


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

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

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


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

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


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

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

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


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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.11.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
7-11505
new23
2002-08-29 14:23
2002.11.04
Как узнать запущено приложение с определенным именем или нет?


14-11487
Ketmar
2002-10-16 16:36
2002.11.04
господа, а есть среди вас любители игрушки Elite?


1-11141
Mr.D!
2002-10-24 01:25
2002.11.04
То ли ReadLn не ридит, то ли ListBox не листит. Или одно из семи?


14-11400
Mad_Ghost
2002-10-12 20:13
2002.11.04
Delphi 7 (.NET) C++ .NET


1-11224
Weare
2002-10-24 17:43
2002.11.04
Не работает печать