![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Добрый день!
Никак не могу сообразить как сделать событие Результат закачки, но в консольном приложении. Раньше не сталкивался с подобным. На данный момент ошибка: 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
|
||||
|
||||
|
Да так же как и в написании компонента:
Код:
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. А мозг не варит... |
|
#3
|
||||
|
||||
|
HttpGrabber не создан!
|
|
#4
|
|||
|
|||
|
Код:
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
|
|||
|
|||
|
Вроде проблему решил, кому пригодится - выкладываю код:
Код:
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
|
|||
|
|||
|
Кто-нибудь знает как сделать ожидание консольного приложения, что-бы оно дожидалось результата загрузки:
HttpGrabber.OnDoneStream := FObjectEvent.HttpGrabberDoneStream; или HttpGrabber.OnError := FObjectEvent.HttpGrabberError; |
|
#7
|
||||
|
||||
|
while (condition) do ...
не? Да и потом, события - это procedure of object надо объект мутить. |