IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Composant dynamique et ajout d'un paramètre à une fonction ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut Composant dynamique et ajout d'un paramètre à une fonction ?
    Bonjour,

    J'utilise le composant TIdHTTP de manière dynamique comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    procedure TFGCenter.Telecharger(Lien:string;Fichier:TStream);
    var
         Waiting   : TWaiting;
         HTTP      : TIdHTTP;
    begin
         try
              Waiting := TWaiting.Create(nil);
              Waiting.LInformations.Caption := 'Transfert du fichier ' + ExtractFileNameFromUrl(Lien) + ' en cours...';
              Waiting.Show;
              Waiting.Refresh;
              try
                   HTTP := TIdHTTP.Create(Self);
                   HTTP.ProxyParams.ProxyServer := '217.x.x.x';
                   HTTP.ProxyParams.ProxyPort := 80;
                   HTTP.OnWorkBegin := HTTPWorkBegin;
                   HTTP.Get (Lien,Fichier);
              finally
                   HTTP.Free;
              end;
              Waiting.Free;
         except
              on E : Exception do
              begin
                   Log(E.Message);
              end;
         end;
    end;
    Je voudrais rajouter un paramètre à ma fonction HTTPWorkBegin comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TFGcenter.HTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Waiting:TWaiting);
    begin
         if AWorkMode = wmRead then
         begin
              Waiting.ProgressBarInformations.Max := AWorkCountMax;
              Waiting.ProgressBarInformations.Position := 0;
         end;
    end;
    Je déclare ma fonction comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    procedure HTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Waiting:TWaiting);
    Cependant, si je fais comme ça, j'ai l'erreur suivante :
    [Pascal Erreur] xxxx.pas(197): E2009 Types incompatibles : 'Les listes de paramètres diffèrent'
    Comment dois-je faire ?

    Merci,
    ZiP

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    he oui car OnWorkBegin est une variable de Type Procedure(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer) et non de type procedure(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Waiting:TWaiting)

    Pour faire cela tu doit creer une classe derivant de TidHttp et implementer ton evenement et rempalcer l'ancien, ou simplement creer un parametre de plus.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Citation Envoyé par Clorish
    ou simplement creer un parametre de plus.
    Comment dois-je faire pour créer un paramètre de plus ?
    Créer une fonction supplémentaire avec le paramètre en plus ?

    Merci,
    ZiP

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Normal que cela ne fonctionne pas, tu ne peux pas modifier la liste des paramètres d'un événement attendu par un composant comme cela.

    Il faut que tu te crées ton propre composant dérivé du TIdHttp et que tu te fasses ton évement avec ta liste de paramètres.

    Je suis pas spécialiste la dedans mais je pense pas me tromper sur la marche à suivre.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Creer un parametre de plus est simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TidHttpEx = Class(TidHttp)
    Private
      FWaiting : TWaiting;
    Public
      Property Waiting : TWaiting Read FWaiting Write FWaiting;
    End;
    Voir les tutos sur les property pour plus de subtilitées

    Pour les evenements c'est un peu plus complexe.
    L'ecenement est appelé generalement par une methode "Do<NomDeL'evenement>".

    donc le code serait plus ou moins proche de celui la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    // definition du type de la procedure utilisé.
    THttpWorkBeginEventEx = procedure(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Waiting:TWaiting);
     
    TidHttpEx = Class(TidHttp)
    Private
      FOnHttpworkBeginEx : THttpWorkBeginEventEx;
    Protected
      Proceure doHTTPWorkBegin(AWorkMode: TWorkMode; const AWorkCountMax: Integer); Override; // MEthode de TidHttp surchargée
      Procedure doHTTPWorkBeginex(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Waiting:TWaiting); // ta procedure lanceur d'evenemnt
    Public
      Property OnHttpWorkBegin : THttpWorkBeginEx Read FOnHttpworkBeginEx Write FOnHttpworkBeginEx;
    End;
     
    Procedure TidHttpEx.doHTTPWorkBegin(AWorkMode: TWorkMode; const AWorkCountMax: Integer);
    Begin
    Self.doHTTPWorkBeginex(AWorkMode, AWorkCountMax, <Valeur Waiting a transmettre>);
    End;
     
    Procedure TidhttpEx.Procedure doHTTPWorkBeginex(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Waiting:TWaiting);
    Begin
    If Assigned(Self.FOnHttpWotkBegin) Then 
      Self.FOnHttpWorkBegin(AWorkMode, AWorkCountMax, Waiting);
    End;
    Voila grosso modo la ligne a suivre ... a moduler avec le vrai nom des fonctions / Types de la classe TidHttp car je ne la connait pas.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer un paramètre à une fonction.
    Par Squalthor dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/10/2006, 17h40
  2. Passage de paramètre à une fonction dans un G_CALLBACK
    Par Dimitri_87 dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 15/09/2006, 11h04
  3. [PL/SQL] : Passage de paramètres à une fonction
    Par dcollart dans le forum Oracle
    Réponses: 5
    Dernier message: 13/07/2006, 10h17
  4. [VBA] Envoyer un listBox en paramètre à une fonction
    Par kissmytoe dans le forum Access
    Réponses: 8
    Dernier message: 13/03/2006, 20h28
  5. [VB6] Ajouter un commentaire à une fonction d'une DLL
    Par Ace303 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/06/2003, 08h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo