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
    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
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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
    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
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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
    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
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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
    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 �m�rite
    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
    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
    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
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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
    Par d�faut
    Que me manque t'il je comprend pas l'evenement OnTimer du Timer et comment l'utiliser

  12. #12
    Membre �m�rite
    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
    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
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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
    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
    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
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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
    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
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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
    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
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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