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

Composants VCL Delphi Discussion :

Créer un évènement à la fin du timer


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut Créer un évènement à la fin du timer
    bonjour ,

    j'aimerai envoyer des fichier en ftp à l'interieur d'un timer , qui met à jours les fichiers à transmettre dans une TStringlist ; mais je recoit une exception 'ftp component not ready'. donc j'ai pensé à faire un evenement qui se declenche à chaque mise à jours dans le timer .

    comment faire pour créer un évenement ?

  2. #2
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Salut,

    tu peux utiliser les classiques "procedure of object" ou bien les interfaces.
    Akim Merabet

  3. #3
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    ca se fait comment ?
    vous pouvez me donner un exemple s'il vous plais ?

  4. #4
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Je n'ai pas compris ce que tu voulais faire néanmoins je peux te donner un exemple avec les interfaces car moins connu de ce que j'ai compris.

    voici l'unité et la form n'a que un memo.
    ce code colle des chiffre aléatoire dans le memo et s'arrête au bout de 10 itération.

    note que la form implémente l'interface.
    n'hesite a poser des questions et à m'expliquer mieux ton problème

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;
     
    type
      IEvents = interface
        ['{XXXXXX...}']
        procedure UpdateStringList;
        procedure OnFin(var Stop: Boolean);
      end;
     
      TMonTimer = class(TTimer)
      private
        fEvents: IEvents;
        fCount: integer;
        procedure Fake(Sender: TObject);
      protected
        procedure Timer; override;
      public
        constructor Create(const AEvents: IEvents); reintroduce;
      end;
     
      TForm1 = class(TForm, IEvents)
        mmo1: TMemo;
      private
        fMonTimer: TMonTimer;
        fStringList: TStringList;
      protected
        procedure UpdateStringList;
        procedure OnFin(var Stop: Boolean);
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    { TMonTimer }
     
    constructor TMonTimer.Create(const AEvents: IEvents);
    begin
      fEvents := AEvents;
      fCount := 0;
      inherited Create(nil);
      OnTimer := Fake;
    end;
     
    procedure TMonTimer.Fake(Sender: TObject);
    begin
    end;
     
    procedure TMonTimer.Timer;
    var
      Stop: Boolean;
    begin
      inherited;
      if assigned(fEvents) then
      begin
        fEvents.UpdateStringList;
        if fCount = 10 then
          fEvents.OnFin(Stop);
        if Stop then Enabled := False;
        Inc(fCount);
      end;
    end;
     
    { TForm1 }
     
    constructor TForm1.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      mmo1.Lines.Clear;
      fStringList := TStringList.Create;
      fMonTimer := TMonTimer.Create(Self);
      fMonTimer.Interval := 500;
    end;
     
    destructor TForm1.Destroy;
    begin
      fMonTimer.Free;
      inherited Destroy;
    end;
     
    procedure TForm1.OnFin(var Stop: Boolean);
    begin
      mmo1.Lines.Add('fin');
      Stop := True;
    end;
     
    procedure TForm1.UpdateStringList;
    begin
      mmo1.Lines.Add(IntToStr(Random(5000)));
    end;
    Akim Merabet

  5. #5
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    en faite dans mon timer je lit un tableau de paths qui es mis à jours en permanence , et ces paths correspondent au fichiers que je doit transférer en ftp . donc chaque fois que mon timer lis les nouveaux paths ,il doit déclencher un évenement qui va transférer les fichiers demandés par ftp .

    vous pouvez me donner l'exemple avec la méthode procedure of object s'il te plais?

  6. #6
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Ok, je vois que tu connais pas les interfaces

    L'idéal serais que tu post la portion de code en question...
    Akim Merabet

  7. #7
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    dans le code je simule l'appel de l'évenement par un click sur un bouton !
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      id : object_id;
      res : result;
      state : converter_project_task_state;
      input_filepaths   : converter_string_list;
      output_filepaths  : converter_string_list;
      taille , i : integer;
      exists : boolean;
      RqTxt : string;
    begin
    exists  :=false;
    state   := CONNECTING;
    res     :=2;
      SetLength(output_filepaths,2);
      SetLength(input_filepaths,2);
      for i:=0 to 1 do
      begin
            output_filepaths[i] :='';
            input_filepaths[i]  :='';
      end;
     
     
     
        if (state = PROCESSING) or (state = REPROCESSING) then
        begin
          if flist.Count = 0 then  begin
              AddList(output_filepaths[0]);
              AddList(output_filepaths[1]);
          end;
     
     
    // ici je simule l'appel d'un évenement par un click de bouton .
         Button1Click(nil); 
        end
     
     
      end;
    {**}
    end;

  8. #8
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Ok je te prépare le même exemple avec les evenements standards.
    Akim Merabet

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Petite question : penses tu à couper ton timer quand il est en cours de traitement ?

    [edit] oups avait aps vu

    Normal que ca bug tu n'arretes pas ton timer entre temps

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      id : object_id;
      res : result;
      state : converter_project_task_state;
      input_filepaths   : converter_string_list;
      output_filepaths  : converter_string_list;
      taille , i : integer;
      exists : boolean;
      RqTxt : string;
    begin
      TTimer(Sender).Enable := False;
      try
     
    exists  :=false;
    state   := CONNECTING;
    res     :=2;
      SetLength(output_filepaths,2);
      SetLength(input_filepaths,2);
      for i:=0 to 1 do
      begin
            output_filepaths[i] :='';
            input_filepaths[i]  :='';
      end;
     
     
     
        if (state = PROCESSING) or (state = REPROCESSING) then
        begin
          if flist.Count = 0 then  begin
              AddList(output_filepaths[0]);
              AddList(output_filepaths[1]);
          end;
     
     
    // ici je simule l'appel d'un évenement par un click de bouton .
         Button1Click(nil); 
        end
     
     
      end;
    {**}
    finally
      TTimer(Sender).enable := True;
    end;
    end;
    Je pense que ca buggera beaucoup moins.
    Modérateur Delphi

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

  10. #10
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Désolé, Je ne comprend pourquoi il te faut un evenement?

    l'appel à une méthode de la form ne suffit pas?
    Akim Merabet

  11. #11
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Je suis d'accord avec Malatar et j'imaginais que le timer etait couper durant le traitement dans le code de la "simulation d'evenement".
    moi j'aurais appelé une simple méthode de la form...
    Akim Merabet

  12. #12
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    avec une simple méthode de la forme dans mon timer , ca me crée une exception 'ftp component not ready'. c'est pour cela je crée un évenement extérieur qui bloque pas le timer , et fait le transfert à l'extérieur du timer .
    mais quand je fait un transfert ftp en dehors du timer tout se passe bien !!!
    apparament le timer n'attend pas la fin du transfert FTP .

  13. #13
    Membre du Club Avatar de coax81
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 180
    Points : 40
    Points
    40
    Par défaut
    oui ca marche bien en désactivant le timer .
    merci

    par contre pourriez vous me dire comment je crée un evenement avec procedure of object , juste pour l'entrainement ...ca doit me servire dans d'autres appli.

  14. #14
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 152
    Points
    10 152
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

Discussions similaires

  1. [VBA-Excel] Créer un événement à partir d'une cellule excel
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/01/2007, 11h36
  2. Comment créer un événement?
    Par Jayceblaster dans le forum Delphi .NET
    Réponses: 5
    Dernier message: 26/07/2006, 10h00
  3. Créer un événement
    Par Blo0d4x3 dans le forum Langage
    Réponses: 9
    Dernier message: 03/03/2006, 16h52
  4. Créer un événement à mon composant
    Par natie_49 dans le forum Composants VCL
    Réponses: 12
    Dernier message: 22/06/2005, 11h01
  5. Créer des événements
    Par thebeb dans le forum MFC
    Réponses: 8
    Dernier message: 04/02/2005, 16h45

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