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 :

TDateTimePicker "before update"?


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Points : 34
    Points
    34
    Par défaut TDateTimePicker "before update"?
    Chers tous,

    j'ai un formulaire avec un TDateTimePicker. (BCB6 enterprise) Lorsque l'on change la date, je voudrais effectuer un certain traitement (enregistrer ce qui concerne la date qui était sélectionnée) et annuler la modif en cas d'erreur (remettre la date d'origine dans le TDateTimePicker).
    Malheureusement, ca ne marche pas, je ne sais pas remettre la date d'origine après qu'elle aie été sélectionnée.

    Cas pour reproduire le souci: simplement essayer de remettre la date à TDate (1,1,1) si une condition est rencontrée dans l'évènement OnChange.

    Formulaire:
    un checkbox cbError: si checké, il devrait m'empêcher de sélectionner une autre date.
    bool m_bIgnoreChange: booléen initialisé à false.
    un TDateTimePicker nommé dDate.

    J'ai mis le code suivant dans l'évènement OnChange de dDate:
    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
    void __fastcall TFNewInputStyle::dDateChange(TObject *Sender)
    {
        if (m_bIgnoreChange)
            {
            m_bIgnoreChange=false;
            return;
            }
        if (IsNan(dDate->DateTime)) return;
        if (cbError->Checked)
            {
            ShowMessage("Modif interdite");
            m_bIgnoreChange=true;
            // un évènement dDateChangeEvent sera déclenché, mais la date ne sera pas acceptée
            dDate->DateTime=TDate(1,1,1);
            }
    }
    => cbErrorbox est décoché, je peux mettre la date que je veux.
    => je coche cbErrorBox,
    * j'ai un messagebox,
    * il passe par le code dDate->DateTime=TDate(1,1,1);
    * il passe par if (m_bIgnoreChange)
    et rentre dans le test (et donc effectue m_bIgnoreChange=false; puis return; )
    * et la date affichée reste celle sélectionnée, il refuse de l'initialiser au 1/1/2001 ou a toute autre valeur...... , et garde la date que je veux empêcher de sélectionner.

    Quelqu'un connait-il une autre solution ou un autre composant plus "utilisable" dans un environnement ou un utilisateur peut se tromper?

    Merci,
    Alain

  2. #2
    Membre averti Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Points : 315
    Points
    315
    Par défaut
    Petite question car je n'est pas tous compris,
    tu ne peux pas désactiver le datetimêpicker lorsque le checkbox est coché?
    Deuxièment pour affecté la date au datetimepicker, essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dDate->Date=StrToDate("01/01/2001");
    Je ne suis pas sûr d'avoir saisise toutes la question ,excuse si je repond à cote de la plaque. (Dans ce cas donne nous d'autre information que je puisse comprendre un peu mieux ou ce situe la problématique merci).
    Boubou from The SpAcE GaLaXy....
    AhAhAhAhAh

  3. #3
    Nouveau membre du Club
    Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Points : 34
    Points
    34
    Par défaut ca ne marche pas
    Pour éclairer ta lanterne:
    je veux interdire la modif de dDate si je ne sais pas effectuer un certain traitement (qui est lancé lorsque je modifie dDate).
    Donc dans l'évènement afterUpdate, en cas d'erreur, je veux remettre la date initiale (avant modif) dans le composant. Et ca, ca ne marche pas: une fois que tu entres dans le "afterUpdate", les modifications par code sont tout simplement IGNOREES. La date sélectionnée dans dDate reste inchangée en tout état de cause, même en exécutant une ligne de code comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dDate->Date=TDate(1,1,1)
    ou même avec le strtodate.

  4. #4
    Nouveau membre du Club
    Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Points : 34
    Points
    34
    Par défaut pour être plus clair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TFNewInputStyle::dDateChange(TObject *Sender)
    {
        if (dDate->DateTime!=TDate(2001,1,1))
            dDate->DateTime=TDate(2001,1,1);
    }
    En tapant ca, normalement, si le composant se comportait normalement, quoi que je sélectionne comme date, il devrait afficher le 1/1/2001 après toute mise à jour.
    Or, pas du tout, je peux sélectionner n'importe quelle date, en mode débug, il rentre bien dans le if, mais n'affiche jamais le 1/1/2001 dans la partie date du composant.

  5. #5
    Membre averti Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Points : 315
    Points
    315
    Par défaut
    Personnellement je ne vais pas pouvoir t'aider beaucoup plus, car moi pour affecter la date je n'utilise pas dDate->DateTime= mais dDate->Date. je ne sais pas si il y a une différence, mais d'habitude ça fonctionne plutôt bien.
    Boubou from The SpAcE GaLaXy....
    AhAhAhAhAh

Discussions similaires

  1. Update quote et sécurité
    Par grunk dans le forum Zend_Db
    Réponses: 1
    Dernier message: 26/10/2010, 15h59
  2. ASE [15.0.3/EBF 16551 ESD#] Unclosed quote before+Job scheduler
    Par dngaya dans le forum Adaptive Server Enterprise
    Réponses: 0
    Dernier message: 08/01/2010, 10h24
  3. Before Update et close
    Par foste dans le forum IHM
    Réponses: 12
    Dernier message: 11/10/2004, 17h04

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