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 :

le composant timer


Sujet :

Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Points : 157
    Points
    157
    Par défaut le composant timer
    bonsoir voila je suis entrain de faire une application et je suis bloqué
    voila le petit exemple que je veux résoudre


    quand j’appuie une fois sur le bouton j''insère a dans le mémo
    et si j’appuie deux fois sur le bouton j’insère b dans le mémo
    et si j’appuie trois fois sur le bouton j’insère b dans le mémo

    je pense qu'il faut que j'utilise le composant timer alors je sais pas comment faire
    voila j’espère que vous me répondez et s'il y a moyen un cours qui explique bien ce composant
    salut

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 469
    Points : 24 905
    Points
    24 905
    Par défaut
    Le TTimer à la base permet de lancer régulièrement une tache mais on peut aussi s'en servir comme un "retardateur"

    Je suppose que c'était
    1 Clic -> a
    2 Clics -> b
    3 Clics -> c

    Cela doit être possible avec OnClick et OnDblClick
    On peut utiliser le Tag du Timer comme compteur
    Sur un OnClick, tu l'incrémentes de 1
    Sur un OnDblClick, tu l'incrémentes de 2
    Avant l'incrémentation, tu mets Timer Enabled à False, tu le repasses à True après
    Dans le OnTimer, tu regarde le Tag pour connaître la lettre à ajouter !

    Je pense que mettre 2 fois GetDoubleClickTime() comme Interval de TTimer serait une bonne idée !

    Si OnClick et OnDblClick se montre capricieux, utilise OnMouseUp
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    @ShailLeTroll : un OnDblClick sut un TButton ?

    Sinon, Je ferais comme suit :

    Un Timer avec un délai de 500 ms (à ajuster suivant test) qui est démarré au 1° clic sur le bouton. A la création de la fiche, le Timer est désactivé (Enabled = False) et le délai est placé à 500.
    Un Button avec un évènement sur le OnClick incrémentant un compteur si le timer est Enabled, sinon initialisant le Timer et le compteur à 1
    Lors de l'évènement OnTimer, je désactive le Timer et j'affiche dans le mémo la lettre correspondant à la valeur du compteur.
    --
    Philippe.
    Philippe.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 469
    Points : 24 905
    Points
    24 905
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    @ShailLeTroll : un OnDblClick sut un TButton ?
    Euh, oui ça existe mais dans TSpeedButton
    J'avais jamais fait attention que OnDblClick n'existait pas dans un TButton normal ! oups !
    Faut dire que j'ai jamais cherché à utiliser un double clic sur un bouton !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Euh, oui ça existe mais dans TSpeedButton
    Ah ben là, je ne serais pas allé le chercher !
    --
    Philippe.
    Philippe.

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 859
    Points : 11 307
    Points
    11 307
    Billets dans le blog
    6
    Par défaut
    dans Lazarus, il me semble avoir vu sur le TButton un OnTripleClick !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 469
    Points : 24 905
    Points
    24 905
    Par défaut
    C'est même l'ancêtre : TControl.OnTripleClick
    et pour le fun TControl.OnQuadClick
    Ils sont fous !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    tu peux faire la même chose sans utiliser de 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
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     btABC.tag  := 0;
     FLastClick := 0;
    end;
     
    procedure TForm1.btABCClick(Sender: TObject);
    begin
     
     if GetTickCount-FLastClick<500 then
      btABC.tag := btABC.Tag + 1
     else
      btABC.tag := 0;
     
     FLastClick := GetTickCount;
     
     
     case btABC.tag of
      0 : memo1.seltext := 'A';
     
      1 : begin
           memo1.SelStart  := memo1.selstart-1;
           memo1.selLength := 1;
           memo1.seltext   := 'B';
          end;
     
      2: begin
           memo1.SelStart  := memo1.selstart-1;
           memo1.selLength := 1;
           memo1.seltext   := 'C';
          end
     
      else begin
            btABC.tag  := 0;
            FLastClick := 500;
           end;
     
     end;
    end;

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Points : 157
    Points
    157
    Par défaut
    merci beaucoup pour vos réponses
    je vais essayer de les faire

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Points : 157
    Points
    157
    Par défaut
    salut voila une solution de mon prof mais c'est un exemple qui change la caption du bouton alors que moi je dois par exemple écrire un message dans le mémo,pour vous expliquez la situation c'est comme les touches d'un gsm
    c la meme chose que je dois faire
    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
    unit Unit1;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        Timer1: TTimer;
        procedure Button1Click(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
      var   nouveauClick:boolean;
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var c: Char;
    begin
      If nouveauClick Then Begin
        Button1.Caption := 'A';
        nouveauClick := False;
      End
      Else Begin
        c := Button1.Caption[1];
        Inc(c);
        Button1.Caption := c
      End;
      Timer1.Enabled :=  True;
     
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     nouveauClick := True;
      Timer1.Enabled:= False;
    end;
    Initialization
      nouveauClick := True;
    end.
    quand essai de remplacer button.caption par memo.text ça fonctionne pas
    j'aimerais aussi que vous m'expliquer ce programme par ce que vraiment je suis un peu perdu avec ce composant

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    voici une solution toujours sans 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
     
    procedure TForm1.btGSMClick(Sender: TObject);
    var i,len : integer;
        bt  : TButton;
    begin
     
     if (sender is TButton) then
     begin
     
      bt  := (Sender as TButton);
     
      len := length(bt.caption);
     
      if len = 0 then exit;
     
      if (GetTickCount - bt.Tag < 500 ) then
      begin
     
        memo1.SelStart   := memo1.selstart-1;
        memo1.selLength := 1;
     
       if (bt.Hint='')or(bt.Hint=bt.Caption[len]) then
        bt.Hint := bt.caption[1]
       else
        for i:=0 to len-1 do
         if bt.Hint=bt.Caption[i] then
         begin
          bt.Hint := bt.Caption[i+1];
          break;
         end;
     
     
      end
     
      else
     
      begin
        bt.Tag  := 0;
        bt.Hint := bt.caption[1];
      end;
     
     
      memo1.seltext   := bt.hint;
     
      bt.Tag := GetTickCount;
     
     end;
     
    end;
    tu peux assigner cette procedure à tous tes boutons, les lettres n'ont même pas besoin d'être dans l'ordre cela va fonctionner aussi bien avec 'ABC' qu'avec 'TYHJ'

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. timer dans un composant
    Par Ludo_360 dans le forum Delphi
    Réponses: 7
    Dernier message: 11/06/2007, 14h32
  3. Réponses: 10
    Dernier message: 07/06/2007, 10h48
  4. 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
  5. [][Timer] Créer un Timer sans utiliser le composant
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 01/10/2003, 11h04

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