begin process at 2012 02 11 16:38:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Réseau & Internet

 > 

Autre

 > 

affecter une procedure OnWorkBegin


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

affecter une procedure OnWorkBegin

mercredi 8 avril 2009 à 10:29:33 | affecter une procedure OnWorkBegin

Gerard

Je voudrais avoir un bargraph qui montre la progression d'un transfert de fichier.
J'utilise les composants Indy10 avec Turbo Delphi.
Je n'arrive pas à affecter mes procédures OnWorkbegin et OnWork au IdTCPClient
le code suivant sort des erreurs:

  IdTCPClient1.OnWorkBegin:= IdTCPOnWorkBegin(Sender,wmRead,AWorkCount);
  OnWork:= IdTCPWork;

Le premier me dit que les types sont incompatibles (TWorkbeginEvent et procédure)
Le second que je n'ai pas assez de paramètres...
Bien sûr j'ai tourné tout cela dans tous les sens..avec, sans paramètres...
J'ai même essayé un transtypage d'un TworkBeginEvent....
mercredi 8 avril 2009 à 12:58:32 | Re : affecter une procedure OnWorkBegin

Bacterius

Membre Club
Ben evidemment ... un TWorkBeginEvent est une méthode d'objet avec plusieurs procédures, il te faut les respecter.

Exemple simple : tu as un événement, dans un composant lambda, qui te fournit un nom d'utilisateur et son mot de passe (en plus du traditionnel Sender). La déclaration de cette méthode d'objet est :

TMonEvenement = procedure (Sender: TObject; User, Password: String) of Object;

Quand tu vas déclarer une procédure pour répondre à cet événement, il te faudra la déclarer comme çela :

procedure TForm1.ReponseEvenement(Sender: TObject; User, Password: String);

Et voilà :)

Cordialement, Bacterius !
mercredi 8 avril 2009 à 13:02:35 | Re : affecter une procedure OnWorkBegin

Bacterius

Membre Club
Oups il fallait lire "paramètres" à la place de "procédures" dans la première phrase :)

Cordialement, Bacterius !
jeudi 9 avril 2009 à 10:10:01 | Re : affecter une procedure OnWorkBegin

Gerard

Merci de ta réponse, mais je ne dois pas être bien malin, ou mal réveillé...

je ne comprends pas tout.

1) Comment la première déclaration est-elle rattachée à ton objet lambda?

2) comment la procedure Réponse à l'évènement est-elle rattachée à la première déclaration?

J'ai bien sûr essayé, mais cela me sort toujours des erreurs...

jeudi 9 avril 2009 à 16:07:41 | Re : affecter une procedure OnWorkBegin

Bacterius

Membre Club
Pour lier, tu fais :

procedure TForm1.MonEvenement(LesParametresQuiCorrespondentACetEvenement);
begin
... Le code de l'événement ...
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
// On rattache l'événement
MonCompo.MonEvenement := MonEvenement;
end;

Et voilà !

Cordialement, Bacterius !
jeudi 9 avril 2009 à 22:24:18 | Re : affecter une procedure OnWorkBegin

Delphiprog

Administrateur CodeS-SourceS
Pour que ce soit plus clair pour notre ami et si je puis me permettre :
Il eût mieux valu écrire :
procedure TForm1.FormCreate(Sender: TObject);
begin
   // On rattache l'événement
  MonCompo.
OnMonEvenement := MonEvenement;
end;

Au lieu de :
procedure TForm1.FormCreate(Sender: TObject);
begin
  // On rattache l'événement
   MonCompo.MonEvenement := MonEvenement;
end;


Autrement, pour affecter une méthode à un évènement, il faut que la méthode soit conforme à la signature du type attendu. C'est ce qu'a essayé de t'expliquer maître Bacterius

May Delphi be with you
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
jeudi 9 avril 2009 à 22:31:35 | Re : affecter une procedure OnWorkBegin

Bacterius

Membre Club
Oui désolé j'ai oublié le On. Et voilà c'est la signature de la méthode, voilà c'est le mot que je cherchais :) merci DelphiProg :)

Cordialement, Bacterius !
vendredi 10 avril 2009 à 06:30:53 | Re : affecter une procedure OnWorkBegin

Gerard

Il me semble que c'est ce que j'ai fait.

Cela marche pour OnConnected et OnDisconnected (qui n'ont que Sender comme paramètre) mais pas pour OnWorkBegin et on work qui ont d'autres paramètres.
Voilà mon code:
Déclaration dans la partie publique de la déclaration de la form.
  public
    { Déclarations publiques }
    IdTCPClient1: TIdTCPClient;
    procedure IdTCPClient1OnConnected(Sender: Tobject);
    procedure IdTCPWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
    procedure IdTCPOnWorkBegin(Sender: Tobject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
  end;
Partie dans la création de la form...
procedure TForm1.FormCreate(Sender: TObject);
begin
  IdTCPClient1:= TIdTCPClient.Create(self);
With IdTCPClient1 do
Begin
  Port:=3000;
  Host:='localhost';
  OnConnected:= IdTCPClient1OnConnected;
  OnDisconnected:= IdTCPClient1OnConnected;
  IdTCPClient1.OnWorkBegin:= IdTCPOnWorkBegin(Sender,wmRead,AWorkCount);
  OnWork:= IdTCPWork;
  ReadTimeout:=10000;
end;

Et bien sûr la déclaration des procédures que je n'ajoute pas: cela n'est pas le problème.
Donc: On connected et OnDisconnected marchent, mais pas OnWorkBegin et Onwork.
J'ai essayé sans paramètre (ex OnWork) ou avec paramètres (OnWorkBegin)
Dans le premier cas le compilateur me signale pas assez de paramètres, dans le second
E2010 Types incompatibles : 'TWorkBeginEvent' et 'procedure, untyped pointer or untyped parameter'
(Le type des paramètres est bien déclaré en partie commune... et on ne peut pas les redéclarer ici: syntaxe incorrecte..)

vendredi 10 avril 2009 à 14:42:46 | Re : affecter une procedure OnWorkBegin

Bacterius

Membre Club
En général, si tu reçois l'erreur "procedure, untyped pointer or untyped parameter" c'est que tu essaies de filer à un événement une procédure "flottante", c'est-à-dire qui n'est pas une méthode. Il faut que ta procédure à rattacher à l'événement soit déclarée après le "public" de la fiche, par exemple.

Cordialement, Bacterius !
vendredi 10 avril 2009 à 14:48:50 | Re : affecter une procedure OnWorkBegin

Bacterius

Membre Club
Et euh ça c'est pas bon du tout :

IdTCPClient1.OnWorkBegin:= IdTCPOnWorkBegin(Sender,wmRead,AWorkCount);

Essaye ça ?

IdTCPClient1.OnWorkBegin := IdTCPOnWorkBegin;

Si ça ne fonctionne pas c'est que tu n'as pas les bons paramètres pour OnWorkBegin, réfère-toi à la doc.

Cordialement, Bacterius !

1 2

Cette discussion est classée dans : procedure, affecter, onwork, onworkbegin, tworkbeginevent


Répondre à ce message

Sujets en rapport avec ce message

Ou placer les procedures [ par magicvinni ] J'ai fait une procedure init ( qui initialise un certain nombre de variables comme son nom l'indique.) Cette procedure doit etre lancée dès le début d Savoir si une procedure est en cours d'exécution [ par Jos ] Bonjour, J'aimerais donc savoir si une procedure est en cours d'éxécution, de façon à déterminer si celle-ci a lancé l'exécution d'une autre.Merci. appel de procedure entre fenetre [ par bdv ] quelqu'un connait il la manière d'appeler une procedure appartenant à une fenetre X depuis une fenetre Y. cette procedure est dans la unit de X. en ut Messages windows [ par Gysmo ] Salut, Je n'arrive pas a faire d'operation logic sur les messages de windows de cette maniere:procedure TForm1.FormCreate(Sender: TObject);begin App pb avec les composants reseaux [ par dampeel ] Je réalise un petit programme en ce moment et j'ai une question a poser à ce propos...J'utilise des composants serversocket et clientsocket pour réali Evenement = toujours procedure [ par MasterJ ] Bonjour,Un petit test comme ca me porte a croire que les evenement ne peuvent etre pris en charge que par des procedures. Je voulais savoir si c'est Je pensais faire un Keylogger mais c pas si simple... [ par Youyou0214 ] je voudrais faire un keylogger mais je viens a peine de commencer et des problemes se posent deja. Je voulait que mon application demarre au demarrage Je pensais faire un Keylogger mais c pas si simple... [ par Youyou0214 ] je voudrais faire un keylogger mais je viens a peine de commencer et des problemes se posent deja. Je voulait que mon application demarre au demarrage THREADS ERREUR [ par w38 ] Bonjour,Étant donné que j'ai une application qui met un temps fou, j'ai décidéd'utiliser des threads.Toutefois, le bouquin que j'ai stipule une formul Hints dans une DLL [ par almi ] J'ai une fenêtre (TForm) qui fonctionne parfaitement dans mon executable.Si je la place dans une DLL, j'obtiens le message :Ne peut assigner TFont à T


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales