2010-12-11 18 views
5

Bienvenido,indy GET velocidad de descarga

Tengo que crear subtítulos con información sobre la velocidad de descarga en mi aplicación usando indy http get compotent.

En mi mente, encontré una solución simple.

En el evento de trabajo obtendré el progreso real de la descarga (tamaño) y lo compararé con la lectura anterior. (por ejemplo, cada 5 segundos). tamaño de secado menos anterior (5 segundos eariel, almacenado en var global) dividir por 5 segundos * 8 y obtendré velocidad. Si el tamaño real es igual a la anterior, entonces la velocidad es siempre 0.

Así que quiero empezar a codificar, pero encontré un problema en la función simple llamada odwork.

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

El problema es que isnt función llamada ... no sé qué.

estoy descargando el archivo 100 MB, y no puedo ver ninguna ShowMessage ...

tiene alguna idea? Saludos

Respuesta

0

¿También le asigna el httpwork al componente? ¿progreso o trabajo como se llame?

Además, utilice una etiqueta, no un componente modal que no volverá hasta que haga clic, ya que podría interrumpir el flujo de descarga.

+0

En este momento, agrego manualmente la incorporación de onwork

 form1.Http := TIdHTTP.Create(nil); form1.Http.OnWork:=form1.HttpWork;
pero el compilador falla
unit1.pas(356,36) Error: Wrong number of parameters specified for call to "HttpWork" 
Solo agrego ese mensaje para saber dónde se desencadenará la función ... pruebo memo1.lines.add ('test'); pero tampoco funcionó;) – marc

+0

aparece una cantidad incorrecta de parámetros cuando el número esperado de parámetros para HttpWork es incluso diferente de la cantidad de parámetros que tiene el método que usted asigna. Copie y pegue el código aquí para que las personas puedan ayudarlo, de lo contrario no hay mucha información. – ComputerSaysNo

+0

¿El compilador falla? –

2

Los eventos OnWork ... solo se activan si el método BeginWork() de la conexión se ha llamado de antemano. Muchos de los métodos de lectura/escritura de Indy no lo llaman automáticamente. Sin embargo, TIdHTTP lee/escribe datos del cuerpo de solicitud/respuesta utilizando objetos TStream, y los métodos TStream de lectura/escritura de la conexión llaman a BeginWork() internamente, por lo que definitivamente obtendrá OnWork ... eventos disparados durante las operaciones HTTP.

0

Tendría que decir que su evento HTTPWork no está enganchado en el componente. Si tiene el componente HTTP en el formulario, abra las propiedades y haga doble clic en el evento OnWork y luego ponga ShowMessage ... debería aparecer.

Cuestiones relacionadas