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

C++Builder Discussion :

repeter une action avec un timer


Sujet :

C++Builder

  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut repeter une action avec un timer
    Je voudrais utiliser un timer pour la prise de photo par une webcam, mais je n'arrive qu'a prendre une seule photo. J'aimerais que periodiquement la webcam prenne une photo, tant que l'on arrete pas le timer, mais que l'utilisation du timer ne me bloque pas le programme.
    Code de demarrage du timer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    // For an example of the callback function OneShotCallback, see Writing
    // a Timer Callback Function.
    Timer1->Interval = 5000; //5 secondes
    (Timer1->Enabled == true);
    )
    if (Timer1->Enabled == true)
    {
    ShowMessage(AnsiString("timer "));
    }
    }
    code d'arret du timer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
     
    // et dans ton Timer:
    Timer1->Enabled = false;
    ShowMessage(AnsiString("Arret timer "));
    }

  2. #2
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    En tout ca sle code que tu nous as montré est bon, sauf que dans ton ShowMessage, ceci suffi :
    Montre nous plutot ce que tu as mis dans l'evenement OnTimer de ton Timer, c'est la que doit venir le probleme

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci pour ta reponse pottiez
    Pour l'instant il n'y a que ca je n'ai fait qu'un teste je voulez voir si le message se repetait
    ShowMessage("timer ");
    Je teste avec ce que j'ai trouve sur le Forum mais je ne sais pas utiliser l'evenement "OnTimer".

  4. #4
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Tout ce que tu veut faire se répéter est a placer dans l'evenement OnTimer du Timer, sinon il y a eu un poste sur comment prendre des photos avec la web cam il y a environ trois quatre jours sur ce forum.

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Oui mais il ne parlait que de la gestion image de la Webcam
    titre du poste
    comment connecter une webcam sous builder c++
    mouchie82
    J'en ai fait un aussi pour pouvoir prendre une seriee de photos qui ne s'ecrase les une les autres.
    titre du poste
    [Résolu] [Débutant(e)] convertion de chaine de caracteres ( 1 2 )
    blondelle
    mais on ne parle pas de timer comme je n'ai pas d'exemple j'ai du mal a y arriver.

  6. #6
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    c'est simple tu demarre la web cam comme 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
     
    #include <vfw.h>
     
    void __fastcall TFicheVideo::FormShow(TObject *Sender)
    {
                                        //Lier le handle à l'animate.
       Handle = Animate->Handle;
                                        //Créer une capture video de 640*480.
       Handle = capCreateCaptureWindow( NULL,                
                                                        WS_CHILD|WS_VISIBLE,
                                                        0,
                                                        0,
                                                        640,
                                                        480,
                                                        Handle,
                                                        0                                  );
                                        //Connecter le driver.
       capDriverConnect(Handle, 0);
                                        //Initialiser le taux de rafraichissement a 66ms.
       capPreviewRate  (Handle, 66);
                                        //Démarer la preview video.
       capPreview      (Handle, true);
    }
    Et tu ajoute se code dans la fonction OnTimer de ton Timer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void __fastcall TFicheVideo::Timer1Timer(TObject *Sender)
    {
        AnsiString nom = Application->Name + "\\..\\ ;
            nom += FormatDateTime("ddmmyyyyhhnnss",Now()) ;
            nom += ".bmp" ;
            capCaptureSingleFrameOpen(Handle);
        capCaptureSingleFrame(Handle) ;
        capCaptureSingleFrameClose(Handle) ;
     
        capFileSaveDIB(Handle, "C:\TOTO.BMP");
    }
    Comme ca tu as une photo des que ton timer est enclenché, et le nom du fichier sera la date et l'heure (donc différent a chaque fois)

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    J'ai oublie de mettre le code qui sera repete par 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
     
    {
    AnsiString Fichier;
    char photo[1024];
    AnsiString chaine;
    AnsiString date_aujourdui;
    AnsiString heure;
    	capCaptureSingleFrameOpen(Handle);
    	capCaptureSingleFrame(Handle) ;
    	capCaptureSingleFrameClose(Handle) ;
    // on ajoute un index entre "photo et .bmp" afin d'avoir un nom different
    // afin de ne pas ecraser le nom precedent il y est inclu l'heure et la
    // date sous forme
    // heure, minute, seconde, sans separateur
    // jour, mois, annee, sans separateur
    // il ne faut aucun separateur dans la chaine que l'on
    // envoye comme nom de fichier
    date_aujourdui = FormatDateTime("DDMMYYYY",Now());
    heure = FormatDateTime("HHMMSS",Now());
    Fichier = ("photo" + IntToStr(i) + heure + date_aujourdui + ".bmp");
    chaine = ("C:\\Documents and Settings\\blondelle\\Mes documents\\PHOTO_WEBCAM\\" + Fichier);
    // copier la photo
    capFileSaveDIB(Handle, chaine.c_str());
    i++;
    }

  8. #8
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,
    un petit truc, ton timer se lance si Enabled=true dans ta fonction, lorsque ton évènnement OnTimer s'exécute (donc quand ton timer à fini de compter) tu met Enabled=false. Donc il ne se relance pas, alors que si tu n'y touche pas, le timer repartira de 0, et recomptera.
    Donc ton évènement se lancera bien à chaque interval.

  9. #9
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Code de demarrage du timer.
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    // For an example of the callback function OneShotCallback, see Writing
    // a Timer Callback Function.
    Timer1->Interval = 5000; //5 secondes
    (Timer1->Enabled == true);

    if (Timer1->Enabled == true)
    {
    ShowMessage("timer ");// ici je vais mettre ma routine de capture automatique
    }

    code d'arret du timer
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {

    // et dans ton Timer:
    Timer1->Enabled = false;
    ShowMessage("Arret timer ");
    }
    Les deux evenements mise en route et arret du timer sont commandes par un bouton chacun j'ai reverifié je ne remet pas mon timer a Enabled=false sauf si j'appuis sur le bouton arret "Button4Click" mais mon timer semble s'arreter le message "ShowMessage("timer ");" ne s'affiche qu'une fois puis plus rien ne se passe je ne comprend pas

  10. #10
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    C'est normal, ton ShowMessage est dans le click du bouton, pas dans l'evenement OnTimer du Timer, donc comme tu ne clique qu'une fois sur le bouton il ne s'affiche qu'une fois

  11. #11
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Que me manque t'il je comprend pas l'evenement OnTimer du Timer et comment l'utiliser

  12. #12
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Essaye plutôt ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
        ShowMessage("timer ");
    }
    Double clic sur le timer de ta Form, tu y aura accès ou comme tous les évènnements des composants, tu clics une fois sur ton composant, puis tu fais F11 et dans l'onglet évènements, ils sont tous listé

  13. #13
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Un Timer est un composant qui déclanche un evenement de facon réguliere (c'est à dire qu'il y a toujours le meme temps entre deux declanchement) ce temps est defini par la propriété Interval du Timer, dans l'evenement OnTime tu met donc le code dont tu veut qu'il se declanche régulierement. Donc dans l'evenement OnTimer tu peut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage("timer ");// ici je vais mettre ma routine de capture automatique
    pour afficher le message "timer" de maniere réguliere

  14. #14
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci bandit boy Merci pottiez je viens de tester ca fonctionne, je n'avais pas compris qu'il fallait utiliser l'evenement du timer dans le panneaux de proprietes, l'aide bcb a ce sujet n'est pas tres claire je termine le projet puis je posterais le programme complet.

  15. #15
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Le programme fonctionne, sauf que dans l'evenement OnTimer tous mes boutons apparaissent, comment faire pour qu'il n'y ait que les boutons necessaires dans l'evenement On Timer, ou alors est il possible de les enlever de la liste.

  16. #16
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Euh... j'ai pas bien compris la, tu peut montrer le code que tu as mis dans le OnTimer ?

  17. #17
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    merci pottiez pour ta reponse, voici le code du On Timer, lancé des que l'on active 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
     
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    AnsiString Fichier;
    char photo[1024];
    AnsiString chaine;
    AnsiString date_aujourdui;
    AnsiString heure;
    	capCaptureSingleFrameOpen(Handle);
    	capCaptureSingleFrame(Handle) ;
    	capCaptureSingleFrameClose(Handle) ;
    // on ajoute un index entre "photo et .bmp" afin d'avoir un nom different
    // afin de ne pas ecraser le nom precedent il y est inclu l'heure et la
    // date sous forme
    // heure, minute, seconde, sans separateur
    // jour, mois, annee, sans separateur
    // il ne faut aucun separateur dans la chaine que l'on
    // envoye comme nom de fichier
    date_aujourdui = FormatDateTime("DDMMYYYY",Now());
    heure = FormatDateTime("HHMMSS",Now());
    Fichier = ("photo" + IntToStr(i) + heure + date_aujourdui + ".bmp");
    chaine = ("C:\\Documents and Settings\\blondelle\\Mes documents\\PHOTO_WEBCAM\\" + Fichier);
    // copier la photo
    capFileSaveDIB(Handle, chaine.c_str());
    i++;
    // ShowMessage("timer ");
    }
    Actuellement la forme contient 5 boutons, et dans l'évenement OnTimer du composent Timer les 5 boutons plus le Timer sont dans la liste des événements, seulement je ne voudrais déclencher le Timer avec un seule bouton, je n'arrive pas a retirer de la liste les boutons inutiles.

  18. #18
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Je ne comprend pas l'aspect de liste de bouton.
    Si c'est afficher seulement le bouton qui sert à demarrer le timer, puis seulement celui qui sert à l'arréter, il faut utilisé la propriété Visible du bouton (pour afficher ou cacher) ou la propriété Enabled (pour activer ou désactiver)

  19. #19
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Dans l'inspecteur d'objet du Timer, dans la partie Events il y a On Timer et a droite une liste deroulante dans cette liste apparaissent automatiquement tous les boutons de la forme "Button1Click, Button2Click, Button3Click, Button4Click, Button5Click, Timer1Timer", seulement je n'ai besoin de déclencher le Timer qu'avec le "Button3Click", et je l'arrete avec "Button4Click", comment enlever les autres boutons de la liste, ou ne sélectionner que le "Button3Click" car le Timer se déclanche aussi avec le boutons de fermeture de la Forme de plus ce programme va etre integré dans un programme qui contient un multipages avec plus de 125 boutons de commande. j'ai bien peur que l'événement du Timer se répéte sur tous ces boutons.
    Il y a bien la solution de désactiver le Timer sur chaque bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Timer1->Enabled = false;
    mais si je dois gérer plus de 125 boutons ca va devenir l'enfer surtout que je vais utiliser un autre Timer j'ai bien peur qu'il y est melange de commande.

  20. #20
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Cette liste déroulante definie qu'elle est la fonction qui est utilisé pour l'evenement associé, pour le OnTimer, tu met Timer1Timer, si c'est l'evenement OnClick du bouton 5 tu met Bouton5Click ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. déclencher une action avec un timer
    Par leeloo95 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/11/2009, 15h30
  2. Déclencher une action avec un chrono
    Par Oberown dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/09/2005, 14h22
  3. [JTextField] Déclencher une action avec la touche ENTER
    Par tchoukapi dans le forum Composants
    Réponses: 10
    Dernier message: 19/09/2005, 14h37
  4. Réponses: 7
    Dernier message: 20/06/2005, 17h00
  5. Réponses: 4
    Dernier message: 27/04/2004, 14h45

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