Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.01.2012, 15:38
wrun wrun вне форума
Прохожий
 
Регистрация: 25.01.2012
Сообщения: 4
Репутация: 10
По умолчанию Создания события компоненту в консоле

Добрый день!

Никак не могу сообразить как сделать событие Результат закачки, но в консольном приложении. Раньше не сталкивался с подобным.
На данный момент ошибка:
access violation as 0x7c90e8e5: write of address 0x00030ff8. Proccess Stopped.

Код:
program WSms;
{$APPTYPE CONSOLE}

uses
  SysUtils,
  JvComponentBase,
  JvUrlListGrabber,
  JvUrlGrabbers,
  JvTypes,
  Classes;

type
  TObjectHandler = class(TObject)
    procedure HttpGrabberDoneStream(Sender: TObject; Stream: TStream;
      StreamSize: Integer; Url: string);
  end;

var
  tels, msg: string;
  HttpGrabber: TJvHttpUrlGrabber;
  FObjectEvent: TObjectHandler;
  ObjectEvent: TObjectHandler;

procedure TObjectHandler.HttpGrabberDoneStream(Sender: TObject;
  Stream: TStream; StreamSize: Integer; Url: string);
begin
  Writeln('Done:');
  Readln;
end;

begin
  try
    if true then
    begin
      FObjectEvent := TObjectHandler.Create;
      HttpGrabber.ProxyMode := pmManual;
      HttpGrabber.ProxyAddresses := 'proxy:8080';
      HttpGrabber.ProxyUserName := 'login';
      HttpGrabber.ProxyPassword := 'Pass';
      HttpGrabber.OutputMode := omStream;
      HttpGrabber.Url := 'http://url.ru';
      HttpGrabber.OnDoneStream := FObjectEvent.HttpGrabberDoneStream;
      HttpGrabber.Start;
    end;
    Writeln('Main:');
    Readln;
  except
    on E: Exception do
    begin
      Writeln(E.ClassName, ': ', E.Message);
      Readln;
    end;
  end;

end.
Ответить с цитированием
  #2  
Старый 25.01.2012, 16:08
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Да так же как и в написании компонента:
Код:
type
  TSomeEvent = procedure (SomeParams: ParamsType) of Object;

  TMyComp = class (ParentClass)
  private
    FSomeEvent: TSomeEvent;
    procedure SomeProc;
  public
    property OnSomeEvent: TSomeEvent read FOnEvent write FOnSomeEvent;
  end;

var
  Comp: TMyComp;

procedure  MyEvent(SomeParams: ParamsType);
begin
  ...
  Blah-Blah-Blah
  ...
end;

begin
  Comp := TMyComp.Create;
  Comp.OnSomeEvent := MyEvent;
  .......
  Blah-blah-blah
  ........
  Comp.Free;
end.
Что подчеркнуто - не уверен...не на чем проверить А мозг не варит...
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #3  
Старый 25.01.2012, 16:10
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

HttpGrabber не создан!
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 25.01.2012, 16:57
wrun wrun вне форума
Прохожий
 
Регистрация: 25.01.2012
Сообщения: 4
Репутация: 10
По умолчанию

Код:
program WSms;
{$APPTYPE CONSOLE}

uses
  SysUtils,
  JvComponentBase,
  JvUrlListGrabber,
  JvUrlGrabbers,
  JvTypes,
  Classes;

type
  TObjectHandler = class(TObject)
    procedure HttpGrabberDoneStream(Sender: TObject; Stream: TStream;
      StreamSize: Integer; Url: string);
  end;

var
  tels, msg: string;
  HttpGrabber: TJvHttpUrlGrabber;
  FObjectEvent: TObjectHandler;
  ObjectEvent: TObjectHandler;

procedure TObjectHandler.HttpGrabberDoneStream(Sender: TObject;
  Stream: TStream; StreamSize: Integer; Url: string);
begin
  Writeln('Done:');
  Readln;
end;

begin
  try
    if true then
    begin
      HttpGrabber := TJvHttpUrlGrabber.Create(nil,'google.com',nil);
      FObjectEvent := TObjectHandler.Create;
      HttpGrabber.ProxyMode := pmManual;
      HttpGrabber.ProxyAddresses := 'proxy:8080';
      HttpGrabber.ProxyUserName := 'login';
      HttpGrabber.ProxyPassword := 'Pass';
      HttpGrabber.OutputMode := omStream;
      HttpGrabber.Url := 'http://url.ru';
      HttpGrabber.OnDoneStream := FObjectEvent.HttpGrabberDoneStream;
      HttpGrabber.Start;
    end;
    Writeln('Main:');
    Readln;
  except
    on E: Exception do
    begin
      Writeln(E.ClassName, ': ', E.Message);
      Readln;
    end;
  end;

end.

Создание HttpGrabber сделал. Вроде правильно.

По остальному никак не пойму (
Ответить с цитированием
  #5  
Старый 25.01.2012, 17:22
wrun wrun вне форума
Прохожий
 
Регистрация: 25.01.2012
Сообщения: 4
Репутация: 10
По умолчанию

Вроде проблему решил, кому пригодится - выкладываю код:

Код:
program WSms;
{$APPTYPE CONSOLE}

uses
  SysUtils,
  JvComponentBase,
  JvUrlListGrabber,
  JvUrlGrabbers,
  JvTypes,
  Classes;

type
  TObjectHandler = class(TObject)
    procedure HttpGrabberDoneStream(Sender: TObject; Stream: TStream; StreamSize: Integer; Url: string);
    procedure HttpGrabberError(Sender: TObject; ErrorMsg: string);
  end;

var
  tels, msg: string;
  HttpGrabber: TJvHttpUrlGrabber;
  prop: TJvCustomUrlGrabberDefaultProperties;
  FObjectEvent: TObjectHandler;

procedure TObjectHandler.HttpGrabberDoneStream(Sender: TObject;
  Stream: TStream; StreamSize: Integer; Url: string);
begin
  Writeln('Done:');
  Readln;
end;

procedure TObjectHandler.HttpGrabberError(Sender: TObject; ErrorMsg: string);
begin
  Writeln('Error:');
  Readln;
end;


begin
  try
    if true then
    begin
      prop := TJvCustomUrlGrabberDefaultProperties.Create(nil);
      HttpGrabber := TJvHttpUrlGrabber.Create(nil,'google.com',prop);
      FObjectEvent := TObjectHandler.Create;
      HttpGrabber.ProxyMode := pmManual;
      HttpGrabber.ProxyAddresses := 'proxy:8080';
      HttpGrabber.ProxyUserName := 'login';
      HttpGrabber.ProxyPassword := 'Pass';
      HttpGrabber.OutputMode := omStream;
      HttpGrabber.Url := 'http://url.ru';
      HttpGrabber.OnDoneStream := FObjectEvent.HttpGrabberDoneStream;
      HttpGrabber.Start;
    end;
    Writeln('Main:');
    //Readln;
  except
    on E: Exception do
    begin
      Writeln(E.ClassName, ': ', E.Message);
      Readln;
    end;
  end;

end.


Но теперь вопрос, как сделать что бы не закрывалось приложение до результата загрузки?
Ответить с цитированием
  #6  
Старый 25.01.2012, 19:10
wrun wrun вне форума
Прохожий
 
Регистрация: 25.01.2012
Сообщения: 4
Репутация: 10
По умолчанию

Кто-нибудь знает как сделать ожидание консольного приложения, что-бы оно дожидалось результата загрузки:
HttpGrabber.OnDoneStream := FObjectEvent.HttpGrabberDoneStream;
или
HttpGrabber.OnError := FObjectEvent.HttpGrabberError;
Ответить с цитированием
  #7  
Старый 25.01.2012, 20:06
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

while (condition) do ...
не?
Да и потом, события - это procedure of object надо объект мутить.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter