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

Composants VCL Delphi Discussion :

EditMask - saisie de date internationale


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projets
    Inscrit en
    Août 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 127
    Points : 195
    Points
    195
    Par défaut EditMask - saisie de date internationale
    Bonjour,

    Je suis en train de travailler sur une appli qui devrait s'installer dans des pays différents.
    Mon problème se situe au niveau des dates.
    J'utilise un DataSet => donc pas de souci sur l'affichage, en fonction du pays la date s'affiche comme il faut.

    Par contre à la saisie, j'aurais voulu avoir le masque à appliquer. Je ne sais pas si je dois me lancer dans la décortication du TFormatSettings.ShortDateFormat pour le tranformer en mask, ou y a t il une méthode qui le retourne directement ?

    Je ne souhaite pas utiliser un TDateTimePicker.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    TFormatSettings.ShortDateFormat n'est pas si compliqué que cela c'est soit mm/dd/yyyy ou yyyy-mm-dd ...

    En trichant on peut gérer le EditMask de la forme 00/00/0000 comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function GetShortDateEditMask(): string;
    begin
      Result := ReplaceStr(DateToStr(EncodeDate(9999,9,9)), '9', '0');
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projets
    Inscrit en
    Août 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 127
    Points : 195
    Points
    195
    Par défaut
    Effectivement, j'ai également écrit une petite méthode traduisant le format de date en masque. Mais c'était pour être sûr de ne pas rater une fonction toute faite de la VCL.

    Merci pour votre aide

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    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 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Merci de la partager !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre habitué
    Homme Profil pro
    Chef de projets
    Inscrit en
    Août 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 127
    Points : 195
    Points
    195
    Par défaut
    Tout t'abord "tourlourou" les phrases terminées par un "!" sont agressives et donc pas très agréable
    Je n'ai pas proposé ma solution car celle de ShaiLeTroll est correcte (comme toujours ) et que la mienne et bien plus lourde.

    Voici tout de même la solution que j'ai mise en oeuvre. Le contexte est le suivant, ces méthodes sont issues d'un framework que nous écrivons.

    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
     
       TYFormat = class
       public
          /// <summary>
          ///   retourne le quelette d'une date vide en fonction du format local
          ///   ex : "  /  /    "
          /// </summary>
          class function GetBlankEditDate: string; static;
          /// <summary>
          ///   retourne un masque d'édition en fonction du format local de la date
          ///   ex : !99/99/9999;1;_
          /// </summary>
          class function GetDateMask: string; static;
       end;
     
     
    class function TYFormat.GetBlankEditDate: string;
    var
       FormatSettingsGloabl : TFormatSettings;
       c : Char;
       sMask : string;
    begin
       result := '';
     
     
       FormatSettingsGloabl := TFormatSettings.Create('');
       sMask := FormatSettingsGloabl.ShortDateFormat;
       for c in sMask do
       begin
          if (c <> FormatSettingsGloabl.DateSeparator) and (c <> '/') then
             result := result + ' '
          else
             result := result + FormatSettingsGloabl.DateSeparator
       end;
    end;
     
     
    class function TYFormat.GetDateMask: string;
    begin
       result := GetBlankEditDate;
       result := result.Replace(' ', '9');
       result := '!' + Result + ';1;_';
    end;

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    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 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Merci du partage. Il y a toujours (ou presque) plusieurs méthodes pour résoudre un problème, et plus on voit d'exemples, plus facilement on imaginera la solution du prochain.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Membre habitué
    Homme Profil pro
    Chef de projets
    Inscrit en
    Août 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 127
    Points : 195
    Points
    195
    Par défaut
    Ca marche, il n'y a pas de souci, je saurais pour les prochaines fois.

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    J'ai préféré quant à moi gérer les masques directement avec la version de traduction, j'en ai essayé plusieurs,
    celle intégrée à Delphi est une horreur (point de vue perso)
    j'ai du déjà parler des deux autres solutions (dklang,dgxgettext) dans le forum ( désolé flemme de rechercher vacances du cerveau en cours )
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. formater une saisie de date...
    Par Empty_body dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 16/01/2006, 22h31
  2. [Composant] Composant de saisie de date
    Par seb_asm dans le forum Composants
    Réponses: 6
    Dernier message: 03/10/2005, 14h36
  3. Date saisie inférieure date du jour
    Par baillador dans le forum ASP
    Réponses: 3
    Dernier message: 08/06/2005, 16h29
  4. Saisie des dates
    Par J-P-B dans le forum XMLRAD
    Réponses: 5
    Dernier message: 04/07/2003, 11h08
  5. Réponses: 3
    Dernier message: 19/03/2003, 15h19

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