Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
ВнизКак создать событие в компоненте? Найти похожие ветки
← →
Юрий (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c