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. #21
    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
    A chaque nouveau bouton, il s'est retrouve automatiquement dans la liste Events sans mon intervention, une fois qu'il sont dans la liste je n'arrive plus a les enlever

  2. #22
    Membre expérimenté
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Par défaut
    Citation Envoyé par blondelle
    A chaque nouveau bouton, il s'est retrouve automatiquement dans la liste Events sans mon intervention, une fois qu'il sont dans la liste je n'arrive plus a les enlever
    C'est normal, c'est juste une liste de choix.
    Seul celui dans la zone de texte correspond a la fonction qui va etre executé.

    lanonyme

  3. #23
    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
    Il ne faut pas les retiré de la liste, seul celui qui est selectionné fera office pour l'evenement, exemple si dans OnTimer de ton Timer est selectionné Timer1Timer, alors ce sera la fonction Timer1Timer qui s'executera lors de l'evenement OnTimer, par contre si tu selectionne la fonction Button1Click, se sera la fonction Button1Click qui se declanchera lors de l'evenement OnTimer (mais pas les autre fonctions, juste celle selectionné)

  4. #24
    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
    Alors comment sélectionner que la commande d'un seul bouton car tous les boutons déclanchent le Timer

  5. #25
    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 enfin compris comment marche le On Timer a partir de Events.
    Est il possible de gérer cette événement par programme si oui comment faire.

  6. #26
    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 trouve ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    property  void TTimer::OnTimer(_fastcall*(_closure)(TObject*))(TObject*)
    dans la partie initialisation j'ai ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TTimer->OnTimer(_fastcall*(_closure)(TObject*))(TObject*);
    ca me donne les erreurs suivantes
    [C++ Error] FicheVideo.cpp(28): E2108 Improper use of typedef 'TTimer'
    [C++ Error] FicheVideo.cpp(28): E2188 Expression syntax
    si j'ecrit ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Timer1->OnTimer(_fastcall*(_closure)(TObject*))(TObject*);
    ca me donne l'erreur suivante
    [C++ Error] FicheVideo.cpp(28): E2188 Expression syntax
    que me manque t'il pour pouvoir initialiser le OnTimer par programme

  7. #27
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Salut,
    Désolé mais, comme je suis zin peu un abruti (c'est l'avis de ma femme), je ne saisi pas bien ce que tu entends par 'initialisé le OnTimer par programme'...
    Pour lancer le timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TaForm->TonTimer->Enabled = true;
    Sinon on pourrait toujours imaginer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TForm1::Button24Click(TObject *Sender)
    {
    Form1->HammerTimer(Sender);
    }
    void __fastcall NewEventTimer(TObject *Sender)
    NB : Dans cet exemple, mon TTimer s'appelle 'Hammer'...désolé...

    Sinon pour affecter un évènement par le biais du code a OnEvent du TTimer, tu dois respecter le prototype de la fonction que cet évènement attends et tu ne peut pas rajouter de paramètres...
    On peut imaginer écrire :
    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
     
    //dans le .h:
    void __fastcall NewEventTimer(TObject *Sender);
     
     
    //dans le .cpp:
    void __fastcall TaForm::NewEventTimer(TObject *Sender)
    {
    //ton code...bla , bla, bla...
    }
    //--------------------------------------------
     
     
    //dans un évènement de ton choix :
    TaForm->TonTimer->OnTimer = NewEventTimer;
    @ +

  8. #28
    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 Cantrelle.
    Désolé mais, comme je suis zin peu un abruti (c'est l'avis de ma femme),
    Je te rassure là c'est une reflextion typique, la mienne est pareil.

    Je vais essayer de me débrouiller pour intégrer cela dans mon programme.
    Je te tiens au courant

  9. #29
    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
    La gestion OnTimer est trop compliquee pour moi je laisse cela pour plus tard quand j'aurais progressé.
    Le programme fonctionne comme je veux.
    voici le code
    dans le .h
    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
     
    //---------------------------------------------------------------------------
     
    #ifndef FicheVideoH // #ifndef FVideoH
    #define FicheVideoH // #define FVideoH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ComCtrls.hpp>
    #include <SysUtils.hpp>
    #include "dstring.h"
    #include "Graphics.hpp"
    #include <ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// IDE-managed Components
            TButton *Button1;
            TAnimate *Animate1;
            TButton *Button2;
            TButton *Button3;
            TTimer *Timer1;
            TButton *Button4;
            TEdit *Edit1;
            TLabel *Label1;
            TButton *Button5;
            TEdit *Edit2;
            TEdit *Edit3;
            TLabel *Label2;
            TLabel *Label3;
            TLabel *Label4;
            TLabel *Label5;
            TLabel *Label6;
     
            void __fastcall Button1Click(TObject *Sender);// prise d'une photo
            void __fastcall Button2Click(TObject *Sender);// arret de la camera
            void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
            void __fastcall Button4Click(TObject *Sender);// arret Timer
            void __fastcall Button3Click(TObject *Sender);// demarrer le Timer
            void __fastcall Timer1Timer(TObject *Sender);
            void __fastcall Edit1KeyPress(TObject *Sender, char &Key);
            void __fastcall Button5Click(TObject *Sender);
            void __fastcall Edit2KeyPress(TObject *Sender, char &Key);
            void __fastcall Edit3KeyPress(TObject *Sender, char &Key);
     
    private:	// User declarations
            HWND Handle; //Handle pour la capture video.
            int i;
            AnsiString temps_calcule;
    public:		// User declarations
            __fastcall TForm1(TComponent* Owner);
     
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    dans le .cpp
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
    #include <vfw.h>
    #include "FicheVideo.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    //Lier le handle à l'animate.
       Handle = Animate1->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);
    // ces deux boutons ne s'affichent qu'aprés la saisie d'un temps
    Button3->Visible = false;
    Button4->Visible = false;
    }
    //---------------------------------------------------------------------------
     
    //Si tu cré un bouton en cliquant dessus tu vas sauvegarder une photo .bmp.
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    // prendre une seule photo
    AnsiString Fichier;
    char photo[1024];
    AnsiString chaine;
    AnsiString date_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_heure = FormatDateTime("HHMMSSDDMMYYYY",Now());
    Fichier = ("photo" + IntToStr(i) + date_heure + ".bmp");
    chaine = ("C:\\Documents and Settings\\blondelle\\Mes documents\\PHOTO_WEBCAM\\" + Fichier);
    // copier la photo a l'adresse chaine
    capFileSaveDIB(Handle, chaine.c_str());
    i++;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    // on arrete la WebCam
            // arret de la webcam
    capDriverDisconnect(Handle);
            // effacer Animate
    Animate1->Visible = false;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
    // on arrete la WebCam au cas ou on n'a pas arrete la WebCam
            // arret de la webcam
    capDriverDisconnect(Handle);
            // effacer Animate
    Animate1->Visible = false;
    }
    //---------------------------------------------------------------------------
     
     
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
     
    Label5->Caption = "";
    Label6->Caption = "Timer Arreté";
    // et dans ton Timer:
    Timer1->Enabled = false;
    // ShowMessage("Arret timer "); utilise pour les testes
    // ShowMessage("Arret timer ");
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    // For an example of the callback function OneShotCallback, see Writing
    // a Timer Callback Function.
    Label6->Caption = "";
    Label5->Caption = "Timer Demarré";
    // on n'admet pas de temps inférieur a 5 secondes
    if (temps_calcule <= 5)
    {
    temps_calcule = 5000;
    }
    Timer1->Interval = StrToInt (temps_calcule); //60 secondes
    Form1->Label1->Caption = "";
    Form1->Label1->Caption = temps_calcule;
    Timer1->Enabled = true;
     
    if (Timer1->Enabled == true)
    {
    // ShowMessage("timer"); utilise pour les testes
    // ShowMessage("timer");
    }
    }
    //---------------------------------------------------------------------------
     
    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"); utilise pour les testes
    // ShowMessage("timer ");
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
    {
    // on ne peux saisir que des chiffres sans decimale
    //if ((Key < '0' || Key >'9') && Key != 8 && (Key != DecimalSeparator ||
    //((TEdit *)Sender)->Text.Pos(DecimalSeparator)!=0))
    //Key = NULL;
     
    if ((Key < '0' || Key >'9') && Key != 8 && (Key == DecimalSeparator)) Key = NULL;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    // on soisi le temps du Timer
    AnsiString heures;
    AnsiString minutes;
    AnsiString secondes;
     
    heures = Edit1->Text;
    if (heures != 0);
    {
    heures = heures * 3600;
    }
    minutes = Edit2->Text;
    if (minutes != 0);
    {
    minutes = minutes * 60;
    }
    secondes = Edit3->Text;
    if (secondes != 0);
    {
    secondes = secondes;
    }
    temps_calcule = 1000 * (StrToInt (heures) + StrToInt (minutes) + StrToInt (secondes));
    Label1->Caption = temps_calcule;
    // un temps a été choisi alors on affiche les deux boutons
    Button3->Visible = true;
    Button4->Visible = true;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
    {
    if ((Key < '0' || Key >'9') && Key != 8 && (Key == DecimalSeparator)) Key = NULL;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Edit3KeyPress(TObject *Sender, char &Key)
    {
    if ((Key < '0' || Key >'9') && Key != 8 && (Key == DecimalSeparator)) Key = NULL;
    }
    //---------------------------------------------------------------------------
    dans Events du Timer c'est button3 qui est utilisé pour déclancher le Timer.

  10. #30
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Par défaut
    Salut tout le monde,je tiens vraiment à vous remercier!! j'ai testé les codes chez moi et ça marche. SVP comment faire pour que je puisse copier les images sur mon répertoire de travail?

  11. #31
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Par défaut
    Encore une autre question!! SVP le but de mon projet et de détecter une personne sur une vidéo.pour celà je compte opter pour la différence entre frames( en utilisant une image de référence,mais aprés l'avoir construit en utilisant une moyenne pondérée entre les images)!maintenant que j'ai pu récupérer ces image et les sauvegarder comment je pour les appeler une aprés l'autres pour que je fasses la différence!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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