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 :

Petit test sur séquence d'un Timer !


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 468
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 468
    Points : 1 342
    Points
    1 342
    Par défaut Petit test sur séquence d'un Timer !
    Bonjour à toutes et à tous,

    Avec une ancienne source D3, j'ai voulu recréer le comportement d'un timer et à la fin du comptage, j'obtiens une erreur.

    Le but est d'afficher un TLabel pour un temps donné.

    Timer1.Enabled := False;


    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
     
    Var
    Counter : Integer;
    StrData : Array[0..12] Of String;
     
    //Form onactivate :
     
    Label1.Visible := True;
    Timer1.Enabled := True;
     
    //OnTimer
     
    StrData[0] := '1';
    StrData[1] := '';
    StrData[2] := '2';
    StrData[3] := '';
    StrData[4] := '3';
    StrData[5] := '';
    StrData[6] := '4';
    StrData[7] := '';
    StrData[8] := '5';
    StrData[9] := '';
    StrData[10] := '6';
    StrData[11] := '';
    StrData[12] := 'OFF';
     
    Counter := Counter + 1;
     
    Label1.Caption := StrData[Counter - 1];
     
    If Counter > 12 Then 
    Begin
    Timer1.Enabled := False;
    Label1.Visible := False;
    End;
    Je ne vois pas ou l'erreur se situe.

    Merci d'une aide éventuelle.

    @+,

    Cincap

  2. #2
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Points : 1 935
    Points
    1 935
    Par défaut
    Bonjour,

    Faudrait déjà initialiser la variable Counter, non ?

    @+

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 468
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 468
    Points : 1 342
    Points
    1 342
    Par défaut
    @ Droïde Système7, Hello,

    En fait je me suis mal exprimé, dans le oncreate cela fonctionne correctement, mais j'aurai bien voulu placer ce code dans le MouseMove d'un TComposant puisque le but c'est d'afficher un TComposant un bref instant au survol de la souris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
    Timer1.Enabled := True;
    Label1.Visible := True;
     
    end;
    Et c'est la que cela coince.

    Merci de ton intervention.

    @+,

    Cincap

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    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 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Bonjour,
    Citation Envoyé par cincap Voir le message
    Avec une ancienne source D3, j'ai voulu recréer le comportement d'un timer et à la fin du comptage, j'obtiens une erreur.
    Qu'entendez vous par erreur ?

    Enfin, sachant que l'évènement MouseMove est déclenché à tout mouvement de souris (soit plusieurs fois), j'écrirais plutôt ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
      if not Timer1.Enabled then
      begin
        Timer1.Enabled := True;
        Label1.Visible := True;
        Counter := 0;
      end;
    end;
    --
    Philippe.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 468
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 468
    Points : 1 342
    Points
    1 342
    Par défaut
    @ Ph. B., Bonsoir, merci de ta solution, cela fonctionne si je survole le TButton et que je reviens sur la fiche après en jouant sur son "FormMouseMove",

    Mais si je reste sur le TButton, le cycle se déclenche et ensuite redémarre alors que le but serait de copier le comportement d'un Hint, soit se déclenche au survol du TButton puis rend le TLabel invisible après le temps donné.

    @+,

    Cincap

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    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 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Tu pourrais essayer de t'appuyer sur les caractéristiques de la propriété Hint (shorthint et longhint) et sur l'évènement TApplication.OnShowHint.

    Ci-après un bout de code pour expliquer cela.
    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
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        Edit1: TEdit;
        ListBox1: TListBox;
        RadioGroup1: TRadioGroup;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo);
      private
        { Déclarations privées }
        FOldShowHint: Boolean;
        FOldOnShowHint: TShowHintEvent;
        procedure ManageInfo(Control: TControl);
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    const
      SPECIAL_HINT = '...';
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      // Contrôle à gérer
      Button1.Hint := SPECIAL_HINT;
      Edit1.Hint := SPECIAL_HINT;
      ListBox1.Hint := SPECIAL_HINT;
      // Contrôle à gérer avec (long)Hint à afficher
      RadioGroup1.Hint := SPECIAL_HINT + '|Bulle d''aide sur le RadioGroup1';
     
      FOldShowHint := Application.ShowHint;
      FOldOnShowHint := Application.OnShowHint;
      Application.OnShowHint := FormShowHint;
      Application.ShowHint := True;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Application.ShowHint := FOldShowHint;
      Application.OnShowHint := FOldOnShowHint;
    end;
     
    procedure TForm1.FormShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo);
    var
      Hint2Display: String;
    begin
      // HintStr correspond à shorthint
      if HintStr = SPECIAL_HINT then
      begin
        ManageInfo(HintInfo.HintControl);
        // y a-t-il un hint à afficher ?
        Hint2Display := GetLongHint(Application.Hint);
        if HintStr = Hint2Display then
          // Non
          CanShow := False
        else
          // Oui on met à jour HintStr en conséquence
          HintStr := Hint2Display;
      end;
    end;
     
    procedure TForm1.ManageInfo(Control: TControl);
    begin
      // Gestion de l'affichage des informations
      // Ici peut être géré l'affichage dans le TLabel (timer...)
      Memo1.Lines.Add(Control.Name);
    end;
    --
    Philippe.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 468
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 468
    Points : 1 342
    Points
    1 342
    Par défaut
    @ Ph. B., evidemment mais ce n'est pas mon but, j'ai suivi attentivement les discussions sur la création d'un hint personnalisé par Gilbert Geyer et forcément très documenté à ce sujet.

    En fait ce n'est pas tellement l'objet que j'en ai besoin mais si on peut le faire avec un TTimer.

    Merci de ta suggestion.

    @+,

    Cincap

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 885
    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 885
    Points : 11 403
    Points
    11 403
    Billets dans le blog
    6
    Par défaut
    si tu souhaites qu'il ne puisse se lancer qu'une seule fois, il doit suffire de jouer sur le tag du bouton en le passant à 1 pour interdire de relancer le compte-à-rebours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
      if Button1.Tag>0 then Exit; 
      if not Timer1.Enabled then
      begin
        Timer1.Enabled := True;
        Label1.Visible := True;
        Counter := 0;
        Button1.Tag:=1;
      end;
    end;

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 468
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 468
    Points : 1 342
    Points
    1 342
    Par défaut
    @ Tourlourou, evidemment la propriété "tag", mais alors en remettant dans le onmousemove son "tag" à zéro pour être à nouveau sollicité (comme un hint).

    Encore merci de ta suggestion.

    @+,

    Cincap

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

Discussions similaires

  1. [XL-2007] petit test sur dates alimentées par variable tableau
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/02/2012, 12h21
  2. Réponses: 4
    Dernier message: 07/04/2008, 16h33
  3. Petit test sur les listes
    Par Erwane dans le forum Scheme
    Réponses: 6
    Dernier message: 20/02/2008, 00h55
  4. Petite question sur timer
    Par nou366 dans le forum Delphi
    Réponses: 2
    Dernier message: 12/05/2006, 19h50
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 14h49

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