Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-11136
Gari
2002-10-22 14:49
2002.11.04
Скрыть свойства.


1-11151
lensky
2002-10-24 10:46
2002.11.04
kak sdelat check box s kartinkoi?... ili dashe proshe....


8-11344
Карлсон
2002-07-11 22:40
2002.11.04
Почему не получается использовать два таймера?


3-11101
Андрусь
2002-10-15 22:17
2002.11.04
---|Ветка была без названия|---


1-11332
DN
2002-10-24 11:26
2002.11.04
Неободимо удалить строку из MEMO,





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский