tatsu
|
Дата: Воскресенье, 20.12.2015, 13:53 | Сообщение # 1
|
Частый гость
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 27
Статус: Offline
|
Всем привет, пилю консольный IRC-клиент. Столкнулся с проблемой - описание событий.
При наличии формы она является классом и процедуры, назначенные на обработку событий, декларируются в описании класса, как его методы.
Однако в консольном приложении для использования компонента я добавляю его в перечень uses.
Подскажите, как при этом нужно обрабатывать события компонента?
С вызовом методов - ничего сложного, обращаюсь через переменную экземпляра класса, а вот с событиями - ляпсус вышел.
Ибо маст дай!
|
|
|
|
ms301
|
Дата: Понедельник, 21.12.2015, 09:26 | Сообщение # 2
|
Постоянный
Зарегистрирован: 28.11.2012
Группа: Пользователи
Сообщений: 100
Статус: Offline
|
Версия делфи?
Код
program Project1;
uses
SysUtils,
idirc,
IdContext;
Type
TObjMetods = Class
Procedure ServerWelcome(ASender: TIdContext; const AMsg: String);
End;
var
irc1: TIdIrc;
oMetods: TObjMetods;
{ TObjMetods }
procedure TObjMetods.ServerWelcome(ASender: TIdContext; const AMsg: String);
begin
Writeln(AMsg);
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
oMetods := TObjMetods.Create;
irc1 := TIdIrc.Create(nil);
try
irc1.Nickname := 'testNick';
irc1.Host := '*-*****';
irc1.Port := 6667;
irc1.OnServerWelcome := oMetods.ServerWelcome; // Вот что тебе нужно
sleep(20000);
finally
oMetods.Free;
irc1.Free;
end;
end.
|
|
|
|
tatsu
|
Дата: Понедельник, 21.12.2015, 12:33 | Сообщение # 3
|
Частый гость
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 27
Статус: Offline
|
ms301, ога, спасибо. Я так понял, что консольное приложение получается линейным. Выходит, что для ожидания события и его обработки придётся описывать петлю. Не приведёт ли это к строго последовательной обработке событий?
К тому же не до конца понял, что здесь происходит --
Код
irc1.OnServerWelcome := oMetods.ServerWelcome;
Это аналогично созданию слушателя события и продолжению работы? или программа встанет колом на этой строке, пока это событие не произойдёт и процедура не выполнится?
Ибо маст дай!
|
|
|
|
ms301
|
Дата: Понедельник, 21.12.2015, 17:31 | Сообщение # 4
|
Постоянный
Зарегистрирован: 28.11.2012
Группа: Пользователи
Сообщений: 100
Статус: Offline
|
Цикл нужен. Не станет - если не будете все повторять. Для начала - есть ли в TIdIrc метод ReadLn(ну или что то похожее) и свойсто Connected |
|
|
|