2010-12-11 9 views
5

Benvenuto,indy GET velocità di download

Devo creare didascalia con informazioni sul download della velocità nella mia applicazione utilizzando indy http get compontent.

Nella mia mente ho trovato una soluzione semplice.

Durante l'evento onwork, otterrò l'effettivo avanzamento del download (dimensione) e lo confronterò con la lettura precedente. (ad esempio ogni 5 secondi). dimensione curenta meno precedente (5 secondi eariel, memorizzati in var globale) dividere per 5 secondi * 8 e otterrò velocità. Se la dimensione effettiva è uguale a quella precedente, allora la velocità è sempre 0.

Quindi voglio iniziare la codifica, ma ho trovato un problema nella semplice funzione chiamata odwork.

 
procedure TForm1.HttpWork(ASender: TObject; AWorkMode: TWorkMode; 
    AWorkCount: Int64); 
    begin 
    showmessage('hello im herre'); 
end; 

Il problema è che la funzione isnt chiamato ... non so perché.

che sto scaricando file di 100 MB, e non posso vedere alcun ShowMessage ...

ha qualche idea? Saluti

risposta

0

Assegnate anche il httpwork al componente? onprogress o onwork qualunque sia il nome?

Inoltre, utilizzare un'etichetta, non un componente modale che non verrà restituito finché non si fa clic, poiché ciò potrebbe interrompere il flusso di download.

+0

In questo momento, aggiungo manualmente l'avvio di onwork

 form1.Http := TIdHTTP.Create(nil); form1.Http.OnWork:=form1.HttpWork;
ma il compilatore non riesce
unit1.pas(356,36) Error: Wrong number of parameters specified for call to "HttpWork" 
Ho appena aggiunto che showmessage per sapere dove verrà attivata la funzione ... provo memo1.lines.add ('test'); ma anche non ha funzionato;) – marc

+0

viene visualizzato un numero errato di parametri quando il numero previsto di parametri per HttpWork è diverso dal numero di parametri del metodo assin. Per favore copia il codice qui, in modo che le persone possano aiutarti, altrimenti non ci sono molte informazioni. – ComputerSaysNo

+0

Errore compilatore ?? –

2

Gli eventi OnWork ... vengono attivati ​​solo se il metodo BeginWork() della connessione è stato chiamato in precedenza. Molti dei metodi di lettura/scrittura di Indy non lo chiamano automaticamente. Tuttavia, TIdHTTP legge/scrive i dati del corpo della richiesta/risposta usando gli oggetti TStream e i metodi TStream di lettura/scrittura della connessione chiamano BeginWork() internamente, quindi otterrete sicuramente gli eventi OnWork ... attivati ​​durante le operazioni HTTP.

0

Devo dire che l'evento HTTPWork non è collegato al componente. Se nel modulo è presente il componente HTTP, richiamare le proprietà e fare doppio clic sull'evento OnWork e quindi inserire ShowMessage ... dovrebbe essere visualizzato.

Problemi correlati