|
|
Регистрация | << Правила форума >> | 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. Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#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 надо объект мутить. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |