Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2013, 19:53   #1
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию TICQClient в Console Application

нашел на форуме вот такой способ использовать TICQClient в консольке

Код:
program icq;

uses
  Messages, Windows, sysutils, ICQClient;

type
  TFNTimeCallBack = procedure(uTimerID, uMessage: UINT;
    dwUser, dw1, dw2: DWORD) stdcall;

type
  Ticq = class
    ICQClient1: TICQClient;
    procedure MessageRecv(Sender: TObject; Msg, UIN: string);
  public
    constructor Create;
    destructor Destroy; override;
  end;

var
  Msg: tmsg;
  ICQClient1: TICQClient;
  Server1: Ticq;

  tmr2: integer;

function timeSetEvent(uDelay, uResolution: UINT; lpFunction: TFNTimeCallBack;
  dwUser: DWORD; uFlags: UINT): UINT; stdcall; external 'winmm.dll' name
  'timeSetEvent';

function timeKillEvent(uTimerID: UINT): UINT; stdcall; external 'winmm.dll' name
  'timeKillEvent';

procedure Ontmr2(uTimerID, uMessage: uint; dwUser, dw1, dw2: dword) stdcall;
begin
  if server1.ICQClient1.LoggedIn then
    server1.ICQClient1.SendKeepAlive;
end;

procedure timer_create;
begin
  tmr2 := timesetevent(120000, 0, @Ontmr2, 0, 1)
end;

procedure timer_destroy;
begin
  timeKillEvent(tmr2)
end;

procedure ticq.MessageRecv(Sender: TObject; Msg, UIN: string);
begin
  if server1.ICQClient1.LoggedIn then
    server1.ICQClient1.SendMessage(strtoint(uin), '333');
end;

constructor ticq.Create;
begin
  inherited Create;
  ICQClient1 := TICQClient.Create(nil);
  ICQClient1.OnMessageRecv := MessageRecv
end;

destructor ticq.Destroy;
begin
  ICQClient1.Free;
  inherited Destroy
end;
{------------------------------------------------------------------------------}
begin
  timer_create;
  Server1 := ticq.Create;

  with server1.ICQClient1 do
  begin
    ConvertToPlaintext := true;
    ConnectionTimeout := 0;
    ICQPort := 5190;
    ICQServer := 'login.icq.com';
    SecureLogin := true;
    TypingNotifications := false;
    UIN := ;
    Password := '';
    try
      Login($10000000);
    except
    end
  end;

  try
    while GetMessage(Msg, 0, 0, 0) do
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg)
    end
  finally
    Server1.Free;
    timer_destroy;
  end
end.
вопрос собственно в следующем... а нет ли другого варианта, более рационального?

Последний раз редактировалось unbanned; 15.12.2013 в 18:17.
unbanned вне форума Ответить с цитированием
Старый 14.12.2013, 20:43   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

критерий рациональности не озвучен. что не нравится в приведеном коде?
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 14.12.2013, 21:06   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

http://programmersforum.ru/showthread.php?p=373464

Да, мне тоже интересен критерий ...только консоли тут я не вижу.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 14.12.2013, 21:11   #4
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

да вообщем то все нравится. работает и ладно... просто интересно есть ли другой способ, возможно более наглядный.

здесь создан класс в котором объявлен другой класс, чтобы обращаться к методам объявленного класса. ыыы... объяснил не очень... ну вообщем может есть другой способ?

я пробовал как-то так...
Код:
var
icq:TICQClient;
procedure ICQMessage(Sender:TObject);
begin
end;

begin
icq:=TICQClient.Create();
TICQClient.onMessageRecv:=ICQMessage;
....
end.
но так не работает) позже понял, что и не могло сработать...

еще интересно каким образом работает вот эта конструкция)

Код:
 try
    while GetMessage(Msg, 0, 0, 0) do
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg)
    end
  finally
    Server1.Free;
    timer_destroy;
  end
P.S. возможно не корректо выразился... я имел ввиду console application.
unbanned вне форума Ответить с цитированием
Старый 14.12.2013, 22:00   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Что за бред с классами? Зачем он?
Объяви переменную типа ICQ-клиент, объяви процедуру-событие. Дальше все просто: создай экземпляр в эту переменную, назначь событие и используй.
Человек_Борща вне форума Ответить с цитированием
Старый 14.12.2013, 22:38   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

to TC: http://www.vsokovikov.narod.ru/New_M...getmessage.htm

Цитата:
Что за бред с классами? Зачем он?
це скелет-заготовка для возможности использования VCL-методов в приложении без формы без привязки к чужим классам.

Цитата:
P.S. возможно не корректо выразился... я имел ввиду console application.
и продолжаете, нет тут консольного приложения.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 14.12.2013, 23:18   #7
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
и продолжаете, нет тут консольного приложения.
вы имеете ввиду что нет директивы {$APPTYPE CONSOLE}?

Последний раз редактировалось unbanned; 15.12.2013 в 03:04.
unbanned вне форума Ответить с цитированием
Старый 15.12.2013, 13:58   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...оно самое
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 15.12.2013, 14:43   #9
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

есть такая штука как TMethod... к самой процедуре добавляешь первым параметром self
Код:
procedure MessageRecv(self,Sender: TObject; Msg, UIN: string);
...

var Method:TMethod;


ICQClient1 := TICQClient.Create(nil);
Method.Code:=@MessageRecv;
Method.Data:=ICQClient1 ;
 ICQClient1.OnMessageRecv := Method;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 15.12.2013, 15:28   #10
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

2 Человек_Борща, можете небольшой пример привести...
Код:
var
icq:TICQClient; //создал переменную

procedure onMessage(Sender: TObject; Msg, UIN: string); //процедура .... или процедура-событие задается по другому?
begin

end;

begin
icq:=TICQCLient.Create();//создал экземпляр класса
....
end.
а как назначить событие то? что-то я не очень понял

2 Slym благодарю

2 raxp
почитал по вашей ссылке про getmessage спасибо.
но вот эта ссылка больше подойдет, если кому-то еще будет интересно.

P.S. выдержка со статьи по вашей ссылке :D
Цитата:
Предупреждение !
Поскольку величина возвращаемого значения функции может быть не нуль, нуль или - (минус)1, не применяйте примерно такой код:

Код:
while (GetMessage( lpMsg, hWnd, 0, 0)) ...
Возможность возврата значения -(минус)1 означает, что такой код, может привести к фатальным ошибкам приложения. Вместо этого, используйте код подобно приведенному ниже:

Код:
BOOL bRet;

while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{  
    if (bRet == -1)
    {
        // Обработка ошибки и возможный выход из программы
    }
    else
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
}

Последний раз редактировалось unbanned; 15.12.2013 в 15:46.
unbanned вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с console application delphi dubailand Помощь студентам 4 31.01.2012 22:24
Создание console application... xC0der Помощь студентам 1 08.11.2011 10:28
С++ win32 console application pancak Помощь студентам 3 31.05.2011 19:00
Дайте-ка совет.[Console Application] sawer5 Помощь студентам 1 13.01.2010 11:59
Console->Form Application Maxs Общие вопросы C/C++ 1 07.04.2009 16:54