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 :

timer dans un composant


Sujet :

Delphi

  1. #1
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut timer dans un composant
    Bonjour ,

    je rencontre quelques soucis alors que j'essai d'incorporer un timer dans un composant. Je me demandais donc s'il y avait quelques renseignements à savoir avant de continuer ce que j'essai d'entreprendre.

    Ce composant n'a pas de form: je ne fais que déclarer le timer, il n'y a pas de composant. Je pense que le problème vient de là...

    aide svp...

    ludo

  2. #2
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Var MonTimer : TTimer;
     begin
       MonTimer := TTimer.Create(Self);
       MonTimer.Interval := 1000;
       MonTimer.OnTimer := (une priocedure TNotifyEvent)
       MonTimer.Enabled := True;
     
     end;

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Salut,

    regardes bien ce que dit l'aide Delphi à propos du TTimer, c'est très important :
    Description

    TTimer est utilisépour simplifier l'appel des fonctions SetTimer et KillTimer de l'API Windows et le traitement des messages WM_TIMER.Utilisez un composant timer pour chaque timer de l'application.

    L'exécution du timer se produit au travers de son événement OnTimer.TTimer possède une propriétéInterval qui détermine la périodicitéde l'événement OnTimer du timer.Interval correspond au paramètre de la fonction SetTimer de l'API Windows.

    Attention : La limitation du nombre total de timers système actifs simultanément dépend du système
    celà devrait t'amener à te poser la question de savoir si c'est le meilleur choix à faire pour ton implémentation (est ce que mon composant est censé se retrouver une seule fois sur ma fiche ou plusieurs fois ? Si la réponse est une seule fois, pas de problêmes, tu peux l'utiliser, mais ça se trouve, implémenter directement les fonctions de l'API Windows serait peut être pas plus difficile°

    A la rigueur tu as peut être à ta disposition d'autres alternatives au TTimer. je pense par exemple à l'utilisation de la fonction API GetTickCount.

    Mais sinonb, ce serais bien, en plus de décrire un petit peu plus quel genre de difficulté tu rencontre pour intégrer le TTimer. Est-ce que celà a voir avec comment le déclarer dans la classe de ton composant ?

    Si ce n'est que ça, il faut que tu oublie le coté visuel du composant (considère le plutot comme une classe normale au même titre qu'un TStringList :
    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
    Type
    TTonComposant=class(TJeNeSaisQuoi)
    private
      FTonTimer:TTimer; //on le déclare ici
    public
      constructor create;
      destructor destroy; override;
    end;
     
    ...
    constructor TTonComposant.Create;
    begin
      inherited Create;
      FTonTimer:=TTimer.Create; //le timer est créé au moment où Ton composant est créé
      //initialisation du TTimer
      FTonTimer.enabled:=false;
      FTonTimer.interval:=5000;
    end;
     
    destructor TTonComposant.Destroy;
    begin 
       FTonTimer.Free; //le timer est détruit au moment où Ton composant est créé
       inherited Destroy;
    end;
    Après tu as peut être besoin que ton utilisateur puisse modifier les propriétés de ton timer, pour ce faire tu crées des propriétés qui vont servir de passerelles avec ce dernier.

    Etape 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Type
    TTonComposant=class(TJeNeSaisQuoi)
    private
      FTonTimer:TTimer; //on le déclare ici
    public
      constructor create;
      destructor destroy; override;
    published 
      property Enabled:boolean read GetEnabled write SetEnabled;
      property Interval:Integer read GetInterval write SetInterval;
    end;
    Donc ici, on propose de creer des propriétés, qui, lorsqu'elle seront modifiées, utiliseront une fonction pour renvoyer une valeur, et une procedure pour mettre à jour la valeur.

    Un petit coup de "[Ctrl]+[Shift]+C" devant les propriétés et delphi te sort 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
    29
    30
    31
    32
    33
    34
    TTonComposant=class(TJeNeSaisQuoi)
    private
      FTonTimer:TTimer;
        function GetEnabled: boolean;
        function GetInterval: Integer;
        procedure SetEnabled(const Value: boolean);
        procedure SetInterval(const Value: Integer); //on le déclare ici
    public
      constructor create;
      destructor destroy; override;
    published
      property Enabled:boolean read GetEnabled write SetEnabled;
      property Interval:Integer read GetInterval write SetInterval;
    end;
    ...
    function TTonComposant.GetEnabled: boolean;
    begin
     
    end;
     
    function TTonComposant.GetInterval: Integer;
    begin
     
    end;
     
    procedure TTonComposant.SetEnabled(const Value: boolean);
    begin
     
    end;
     
    procedure TTonComposant.SetInterval(const Value: Integer);
    begin
     
    end;
    Il n'y a plus qu'à remplir les de code :
    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
    function TTonComposant.GetEnabled: boolean;
    begin
      if Assigned(FTonTimer) then //si ton timer est crée ou n'a pas encore été
                                            //détruit alors on peut y accéder
                                            //sinon, "access violation" avec le code qui suit
      result:=FTonTimer.Enabled;
    end;
     
    function TTonComposant.GetInterval: Integer;
    begin
       if Assigned(FTonTimer) then //même remarque qu'avant
      result:=FTonTimer.Interval;
    end;
     
    procedure TTonComposant.SetEnabled(const Value: boolean);
    begin
       if Assigned(FTonTimer) then //même remarque qu'avant
       FTonTimer.enabled:=value;
    end;
     
    procedure TTonComposant.SetInterval(const Value: Integer);
    begin
      if Assigned(FTonTimer) then //même remarque qu'avant
       FTonTimer.interval:=value;
    end;
    Et voilà
    Bidouilleuse Delphi

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Et j'ai oublié, si tu veux implémenter dans ton composant le "OnTimer", il faut que tu crées une propriété "passerelle", de type TNotifyEvent :

    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
     
    private 
       ...
       function GetOnTimer: TNotifyEvent;
       procedure SetOnTimer(const Value: TNotifyEvent);
       ...
    published
      property OnTimer:TNotifyEvent read GetOnTimer write SetOnTimer;
    end;
     
     
    unction TTonComposant.GetOnTimer: TNotifyEvent;
    begin
       result:=nil;
       if Assigned(FTonTimer) then //toujours la même précaution
       result:=FTonTimer.OnTimer;
    end;
     
    procedure TTonComposant.SetOnTimer(const Value: TNotifyEvent);
    begin
        if Assigned(FTonTimer) then //toujours la même précaution
        FTonTimer.OnTimer:=Value;
    end;
    Bidouilleuse Delphi

  5. #5
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut
    Merci pour ces indications!

    Je créé mon composant corectement à priori, mais mon problème venait du fait que j'assimilais à l'évènement "OnTimer" une procedure normale...

    merci je vaisd voir ça

    ludo

  6. #6
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Ludo_360
    Merci pour ces indications!

    Je créé mon composant corectement à priori, mais mon problème venait du fait que j'assimilais à l'évènement "OnTimer" une procedure normale...

    merci je vaisd voir ça

    ludo
    Bah en fait, il faut que tu arrive à t'imaginer que les procédures et les fonctions peuvent être stockées dans des variables (d'accord, un peut spéciales, mais ça se gère pratiquement pareil). On appelle celà des variables procédurales.
    Et effectivement, selon qu'il s'agisse d'une procédure "normale" comme tu dis, ou d'une méthode (un procédure qui fait partie d'une classe), ça ne se déclare pas de la même façon.

    Pour plus d'infos, je t'engage à consulter la FAQ, m^me s'y tout ne te concerne pas elle te permettra tout du moins d'y voir plus clair (enfin j'espère ):
    Un tableau de procédures ? Comment et pourquoi ?
    Bidouilleuse Delphi

  7. #7
    Membre habitué Avatar de Ludo_360
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 295
    Points : 191
    Points
    191
    Par défaut
    ok je vais y faire un tour,

    merci!

    au fait ça marche très bien...

    ludo

  8. #8
    Membre chevronné
    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
    Points : 2 158
    Points
    2 158
    Par défaut
    Au passage, je pousse jusqu'a te conseiller d'aller un peu plus loin jusqu'aux chapitres de creation d'evenements ... car ca t'apprendra un peu plus le fonctionneement interne des evenements

    N'hesite pas, si tu possede une version suffisante, a jetter un coup d'oeil dans les sources Delphi .... on y apprends beaucoup !
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

Discussions similaires

  1. Utilisation composant timer dans module de classe
    Par MaximeM dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/06/2007, 13h35
  2. Creer un composant non visuel(Timer) dans une DLL
    Par hugobob dans le forum Composants VCL
    Réponses: 1
    Dernier message: 06/06/2006, 16h20
  3. Timer dans une feuille excel
    Par bbkenny dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 28/01/2005, 10h43
  4. Ecrire du texte en couleurs dans un composant
    Par wutang dans le forum Composants
    Réponses: 11
    Dernier message: 12/07/2004, 10h55
  5. Une image dans un composant ?
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/03/2003, 11h28

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