Ĺadny brzuch
Witam,
Piszę klasę TDownloadFile do pobierania plików w wątku za pomocą HTTP opartą na komponentach Indy 10 i mam taki problem. Przed pobraniem pliku muszę sie zalogować (to wiem jak zrobić) a sam proces pobierania pliku chcę pokazać w ProgressBar aby to zrobić potrzebuję obsłużyć zdarzenia OnWork, OnWorkBegin, OnWorkEnd komponentu IdHTTP.
Wszystko by było pięknie ładnie gdyby nie to że muszę w trakcie działania programu przypisać wspomniane zdarzenia aby się nie wykonywały podczas logowania.
Więc wymyśliłem to sobie tak:
procedure TDownloadFile.IdDownloadFileThreadRun(Sender: TIdThreadComponent); begin //Tu logowanie więc nie potrzebna mi obsługa zdarzeń fIdHTTP.OnWorkBegin:= nil; fIdHTTP.OnWork:= nil; fIdHTTP.OnWorkEnd:= nil; //... //Tu wszystko do zalogowania ale to nie ważne //... //Tu zaczynam pobieranie pliku wiec muszę obsługiwać te zdarzenia fIdHTTP.OnWorkBegin:= DownloadFileWorkBegin; //<-- Tu jest błąd fIdHTTP.OnWork:= DownloadFileWork; //<-- Tu jest błąd fIdHTTP.OnWorkEnd:= DownloadFileWorkEnd; //<-- Tu jest błąd //... //Tu wszystko do pobrania pliku //... end; procedure TDownloadFile.DownloadFileWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin //Tu ma być obsługa wszystkiego co muszę zrobić przed rozpoczęciem pobierania end; procedure TDownloadFile.DownloadFileWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin //To muszę obsługiwac dla obsługi ProgressBar-a end; procedure TDownloadFile. DownloadFileWorkEnd(Sender: TObject; AWorkMode: TWorkMode); begin //Tu ma być obsługa wszystkiego co muszę zrobićpo zakończeniu pobierania end;Teoretycznie kod wydaje się poprawny tylko, że Delphi (chodzi o Delphi 6 na innych nie sprawdzałem, bo nie mam, ale podejrzewam, że pewnie to samo), gdy próbuję przypisać zdarzenia wywala mi błąd.
[Error] uDownloadFile.pas(297): Incompatible types: 'Parameter lists differ' I tak dla każdej linii przypsania zdarzenia. Oczywiście to samo jest gdy próbuję przypisać obsługę zdarzenia do komponetu IdHTTP będącego na formularzu.
Ktoś wie o co chodzi? Bo siedzę nad tym od wczoraj i nic nie mogę wymyślić.
EDIT//
Już (a raczej dopiero) sobie poradziłem. Problem okazał sie banalny - jak zwykle najciemniej pod latarnią.
Wszystko wina helpa.
Gdy zaznaczałem OnWork i F1 help proponował mi TIdTCPConnection.OnWork [!!!]
Ja sądząc że jest to takie samo zadeklarowne (bo jest bardzo podobne) zdarzenie napisałam sobie zgodnie z deklaracją:
TWorkEvent = procedure (Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer) of object;
procedure obsługi zdarzenia:
procedure DownloadFileWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
Co jest oczywistym błędem bo ma być:
procedure DownloadFileWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
Jeszcze nie sprawdziłem ale sądzę, że w innych zdarzeniach popełniłem ten sam głupi bład.
Sorry, za bezsensowny temat.
Użytkownik kAzek edytował ten post 13 luty 2006, 12:35
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Piszę klasę TDownloadFile do pobierania plików w wątku za pomocą HTTP opartą na komponentach Indy 10 i mam taki problem. Przed pobraniem pliku muszę sie zalogować (to wiem jak zrobić) a sam proces pobierania pliku chcę pokazać w ProgressBar aby to zrobić potrzebuję obsłużyć zdarzenia OnWork, OnWorkBegin, OnWorkEnd komponentu IdHTTP.
Wszystko by było pięknie ładnie gdyby nie to że muszę w trakcie działania programu przypisać wspomniane zdarzenia aby się nie wykonywały podczas logowania.
Więc wymyśliłem to sobie tak:
procedure TDownloadFile.IdDownloadFileThreadRun(Sender: TIdThreadComponent); begin //Tu logowanie więc nie potrzebna mi obsługa zdarzeń fIdHTTP.OnWorkBegin:= nil; fIdHTTP.OnWork:= nil; fIdHTTP.OnWorkEnd:= nil; //... //Tu wszystko do zalogowania ale to nie ważne //... //Tu zaczynam pobieranie pliku wiec muszę obsługiwać te zdarzenia fIdHTTP.OnWorkBegin:= DownloadFileWorkBegin; //<-- Tu jest błąd fIdHTTP.OnWork:= DownloadFileWork; //<-- Tu jest błąd fIdHTTP.OnWorkEnd:= DownloadFileWorkEnd; //<-- Tu jest błąd //... //Tu wszystko do pobrania pliku //... end; procedure TDownloadFile.DownloadFileWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin //Tu ma być obsługa wszystkiego co muszę zrobić przed rozpoczęciem pobierania end; procedure TDownloadFile.DownloadFileWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin //To muszę obsługiwac dla obsługi ProgressBar-a end; procedure TDownloadFile. DownloadFileWorkEnd(Sender: TObject; AWorkMode: TWorkMode); begin //Tu ma być obsługa wszystkiego co muszę zrobićpo zakończeniu pobierania end;Teoretycznie kod wydaje się poprawny tylko, że Delphi (chodzi o Delphi 6 na innych nie sprawdzałem, bo nie mam, ale podejrzewam, że pewnie to samo), gdy próbuję przypisać zdarzenia wywala mi błąd.
[Error] uDownloadFile.pas(297): Incompatible types: 'Parameter lists differ' I tak dla każdej linii przypsania zdarzenia. Oczywiście to samo jest gdy próbuję przypisać obsługę zdarzenia do komponetu IdHTTP będącego na formularzu.
Ktoś wie o co chodzi? Bo siedzę nad tym od wczoraj i nic nie mogę wymyślić.
EDIT//
Już (a raczej dopiero) sobie poradziłem. Problem okazał sie banalny - jak zwykle najciemniej pod latarnią.
Wszystko wina helpa.
Gdy zaznaczałem OnWork i F1 help proponował mi TIdTCPConnection.OnWork [!!!]
Ja sądząc że jest to takie samo zadeklarowne (bo jest bardzo podobne) zdarzenie napisałam sobie zgodnie z deklaracją:
TWorkEvent = procedure (Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer) of object;
procedure obsługi zdarzenia:
procedure DownloadFileWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
Co jest oczywistym błędem bo ma być:
procedure DownloadFileWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
Jeszcze nie sprawdziłem ale sądzę, że w innych zdarzeniach popełniłem ten sam głupi bład.
Sorry, za bezsensowny temat.
Użytkownik kAzek edytował ten post 13 luty 2006, 12:35