2010-12-11 34 views
5

Bienvenue,indy vitesse GET TELECHARGEMENT

Je dois créer légende avec des informations sur la vitesse de téléchargement dans mon application à l'aide indy http get compontent.

Dans mon esprit, j'ai trouvé une solution simple.

Lors de l'événement onwork, j'obtiendrai une progression réelle du téléchargement (taille) et je le comparerai avec la lecture précédente. (par exemple toutes les 5 secondes). taille curent moins les précédents (5 secondes eariel, stocké en var global) diviser par 5 secondes * 8 et j'obtiendrai de la vitesse. Si la taille réelle est égale à la précédente, alors la vitesse est toujours 0.

Donc, je veux commencer le codage, mais j'ai trouvé un problème dans la fonction simple appelée odwork.

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

Le problème est que isnt fonction appelée ... Je ne sais pas pourquoi.

Je télécharge le fichier de 100 Mo, et je ne peux pas voir tout ShowMessage ...

une idée? Cordialement

Répondre

0

Affectez-vous également le httpwork au composant? onprogress ou onwork quel que soit ce qu'on appelle? De plus, utilisez une étiquette, et non un composant modal qui ne retournera pas jusqu'à ce que vous cliquiez dessus, car cela pourrait interrompre le flux de téléchargement.

+0

En ce moment, j'ajoute manuellement l'initialisation du travail

 form1.Http := TIdHTTP.Create(nil); form1.Http.OnWork:=form1.HttpWork;
mais le compilateur échoue
unit1.pas(356,36) Error: Wrong number of parameters specified for call to "HttpWork" 
J'ajoute juste ce showmessage pour savoir où la fonction sera déclenchée ... j'essaie memo1.lines.add ('test'); mais aussi n'a pas fonctionné;) – marc

+0

mauvais nombre de paramètres apparaît lorsque le nombre attendu de paramètre pour HttpWork est même différent du nombre de paramètres de la méthode que vous assignez. Veuillez copier-coller le code ici pour que les gens puissent vous aider, sinon il n'y a pas beaucoup d'informations. – ComputerSaysNo

+0

Echec du compilateur? –

2

Les événements OnWork ... ne sont déclenchés que si la méthode BeginWork() de la connexion a été appelée au préalable. Beaucoup de méthodes de lecture/écriture d'Indy ne l'appellent pas automatiquement. Cependant, TIdHTTP lit/écrit des données de corps de requête/réponse en utilisant des objets TStream, et les méthodes TStream en lecture/écriture de la connexion appellent BeginWork() en interne, donc vous aurez certainement des événements OnWork ... déclenchés pendant les opérations HTTP.

0

Je dois dire que votre événement HTTPWork n'est pas accroché dans le composant. Si vous avez le composant HTTP sur le formulaire, affichez les propriétés et double-cliquez sur l'événement OnWork, puis placez le ShowMessage ... il devrait apparaître.