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 en application console


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut Timer en application console
    Bonjour,

    je souhaite utiliser les timer dans une application console. J'ai lu qu'il fallait utiliser SetTimer et KillTimer.
    On ne peut vraiment pas utiliser le composant TTimer ?
    Cela m'étonne car si je n'affecte pas de parent à timer dans une application fenêtre, ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Timer2 := TTimer.Create(nil) ;
        Timer2.Interval := 1000 ;
        Timer2.OnTimer := Timer.TimerEnd ;
        Timer2.Enabled := true ;

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 158
    Par défaut
    Bonjour,

    Est ce vraiment une application console ?

    Où est ce simplement une application "cachée" ?


    A+

  3. #3
    Expert confirmé

    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 : 35
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Je ne vois pas ce qui pourrais t'empêcher d'utiliser un TTimer comme tu le proposes, en le créant avec nil en proprio.
    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.

  4. #4
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    C'est bien une application console et moi non plus je ne vois pas ce qui empêche d'utiliser TTimer pourtant ça ne fonctionne pas. Etrange.

  5. #5
    Expert confirmé

    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 : 35
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par bubulemaster Voir le message
    C'est bien une application console et moi non plus je ne vois pas ce qui empêche d'utiliser TTimer pourtant ça ne fonctionne pas. Etrange.
    Peux-tu montrer un peu le code de contexte, qu'on puisse trouver ce qui ne va pas
    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.

  6. #6
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    J'ai une classe contenant le timer :

    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
    unit MaxExecutiontimer;
     
    interface
     
    uses
      Classes, Functions, ExtCtrls, UnitMessages ;
     
    type
      TMaxExecutiontimer = class
      private
        { Déclarations privées }
        Timer : TTimer ;
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
        procedure TimerEnd(Sender: TObject);    
        procedure Enable(state : Boolean) ;
        constructor Create(TimeOfTheTime : Integer) ;
        destructor Free ;    
      published
        { Déclarations publiées }
      end;
     
    implementation
     
    {*******************************************************************************
     * Fonction appelée lorsque le timer est écoulé
     ******************************************************************************}
    procedure TMaxExecutiontimer.TimerEnd(Sender: TObject);
    begin
        Timer.Enabled := False ;
        ErrorMsg(sTimeIsEnd) ;
        FinishProgramm ;
        Halt ;
    end ;
     
    {******************************************************************************
     * Consructeur
     ******************************************************************************}
    constructor TMaxExecutiontimer.Create(TimeOfTheTime : Integer) ;
    begin
        inherited Create();
     
        Timer := TTimer.Create(nil) ;
        Timer.Interval := TimeOfTheTime ;
        Timer.OnTimer := TimerEnd ;
        Timer.Enabled := False ;
    end ;
     
    {******************************************************************************
     * Destructeur
     ******************************************************************************}
    destructor TMaxExecutiontimer.Free ;
    begin
        Timer.Free ;
    end ;
     
    procedure TMaxExecutiontimer.Enable(state : Boolean) ;
    begin
        Timer.Enabled := State
     end ;
     
    end.
    et le code dans l'application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaxExecutiontimerVar := TMaxExecutiontimer.Create(ElapseTime * 1000) ;
    MaxExecutiontimerVar.Enable(ElapseTime > 0) ;
    Je viens de modifier la classe pour utiliser SetTimer et KillTimer mais ça ne fonctionne pas :
    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
    unit MaxExecutiontimer;
     
    interface
     
    uses
      Classes, Functions, ExtCtrls, UnitMessages, UnitOS, Windows, SysUtils ;
     
    type
      TMaxExecutiontimer = class
      private
        { Déclarations privées }
        //Timer : TTimer ;
        Intervale : Cardinal ;
        Timer : Cardinal ;
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
        procedure TimerEnd ;    
        procedure Enable(state : Boolean) ;
        constructor Create(TimeOfTheTime : Cardinal) ;
        destructor Free ;    
      published
        { Déclarations publiées }
      end;
     
      procedure TimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWORD); stdcall;
     
    implementation
     
    Const NumTimer = 1 ;
     
    {*******************************************************************************
     * Fonction appelée lorsque le timer est écoulé
     ******************************************************************************}
    procedure TMaxExecutiontimer.TimerEnd ;
    begin
        OsKillTimer(timer) ;
        //Timer.Enabled := False ;
        ErrorMsg(sTimeIsEnd) ;
        FinishProgramm ;
        Halt ;
    end ;
     
    procedure TimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWORD); stdcall;
    begin
        KillTimer(NumTimer) ;
        writeln('erotyeoryot') ;
    end;
     
    {******************************************************************************
     * Consructeur
     ******************************************************************************}
    constructor TMaxExecutiontimer.Create(TimeOfTheTime : Cardinal) ;
    begin
        inherited Create();
        Intervale := TimeOfTheTime ;
        Timer := NumTimer ;
        {
        Timer := TTimer.Create(nil) ;
        Timer.Interval := TimeOfTheTime ;
        Timer.OnTimer := TimerEnd ;
        Timer.Enabled := False ;
        }
    end ;
     
    {******************************************************************************
     * Destructeur
     ******************************************************************************}
    destructor TMaxExecutiontimer.Free ;
    begin
        //Timer.Free ;
        KillTimer(timer)
    end ;
     
    procedure TMaxExecutiontimer.Enable(state : Boolean) ;
    begin
        //Timer.Enabled := State
        if state = true
        then
            SetTimer(0, timer, Intervale, @TimerProc) //TimerEnd)
        else
            KillTimer(0, timer) ;
    end ;
     
    end.
    A prioris il faut absolument un Handle.

Discussions similaires

  1. Utiliser un timer dans une application console
    Par chavers dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2005, 14h07
  2. [Kylix] une application console
    Par naili dans le forum EDI
    Réponses: 3
    Dernier message: 19/04/2004, 14h27
  3. [Delphi] Application "console" et caractères ASCII
    Par Yorys dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 31/07/2003, 09h50
  4. [Kylix] Kylix 3 et Applications console
    Par deniscm dans le forum EDI
    Réponses: 2
    Dernier message: 14/01/2003, 13h37
  5. [Kylix] application console avec kylix 3 ?
    Par Hakim dans le forum EDI
    Réponses: 4
    Dernier message: 15/11/2002, 22h45

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