[Delphi] Indy 10 - dziwny błąd

0

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.

Delphi napisał(a)

[Error] uDownloadFile.pas(297): Incompatible types: 'Parameter lists differ'
I tak dla keż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ą z helpa:

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.

0

[Error] uDownloadFile.pas(297): Incompatible types: 'Parameter lists differ'

Możesz zrobic tak:

@Objekt.onZdarzenie:=@TwojaProcka

jeśli nie to:

Zauważ, że chodzi mu o to, że nie jest taka sama lista parametrów:

Zobacz jakiego typu jest zdarzenie do którego chcesz przypisać prockę
Zdefiniuj

var procka:TTypZdarzenia

Zrób

@procka:=@twojaprocka

Zrób

Objekt.onZdarzenie:=procka
0

Nie doczytałeś do końca.
Przecież wcześniej wyedytowałem posta i napisałem, dlaczego miałem jak mi się wtedy wydawało dziwny błąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1