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 FMX Delphi Discussion :

XE5 - DisplayFormat / EditFormat [Windows]


Sujet :

Composants FMX Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 23
    Points
    23
    Par défaut XE5 - DisplayFormat / EditFormat
    Bonjour,

    Lorsque je formate l'affichage d'un montant avec DisplayFormat (ex. : ,0" €"), mes TLabel affiche correctement le montant formaté .
    Dès que je formate aussi le mode edition avec EditFormat (ex. : 0), l'affichage de mes TLabel n'utilise plus le formatage de DisplayFormat mais de EditFormat .

    Ce n'ai pas le fonctionnement normal.
    Est-ce un bug des composants FMX ?
    Avez vous une solution ?

  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
    En même temps, des TLabel ne sont pas conçus pour l'édition, utilise plutôt TEdit !

    DisplayFormat et EditFormat n'est pas ce des propriétés du TNumericField ?
    Tu utilises un LiveBindings entre ton TLabel et un TNumericField ?
    Effectivement un TLabel qui utiliserait le EditFormat c'est signe d'un bug, en tout cas cela n'aurait rien de cohérent !

    Soit plus précis dans ta question !
    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 à l'essai
    Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Pour plus précis :

    J'ai un composant TClientDataset avec des champs TFloatField.
    Ces champs ont un DisplayFormat := ',0" €"' pour un affichage en € sans chiffre après la virgule
    et un EditFormat := '0' pour une edition sans le signe Euro et sans les espaces.

    Ces propriétés sont utilisés depuis toujours en VCL pour :

    un affichage formaté en Euros dans un TEdit ou un TLabel
    une édition sans formatage dans un TEdit.

    Et bien, avec les compasants FMX, le comportement n'est pas correct :
    Les TLabel et TEdit affichent la valeur du champs de données avec le formatage de l'EditFormat et non le fomatage du DisplayFormat.

    Est-ce que vous avez le même comportement sur votre XE5 ?

  4. #4
    Membre à l'essai
    Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    J'ai solutionné ce problème de composants FMX par un peu de code :
    - J'ai enlevé le formatage EditFormat de mes champs TFloatField.
    - Sur mes composants TEdit, j'ai ajouté 2 Événements génériques (OnEnter et OnExit) :
    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
     
    Type
    BL: TBindingsList;
     
    procedure TFEditFrais.ECoutRefEnter(Sender: TObject);
    var i,j,k:integer;
     
    begin
      i:=-1;
      repeat
        Inc(i,1);
        if bl.BindComps[i].ControlComponent.Name=TEdit(Sender).Name then
          j:=i;
      until ((bl.BindComps[i].ControlComponent.Name=TEdit(Sender).Name) or (i=bl.BindCompCount-1));
     
     i:=-1;
      repeat
        Inc(i,1);
        if (TBindSourceDB(TLinkControlToField(bl.BindComps[j]).DataSource).DataSet.Fields[i].FieldName=TLinkControlToField(bl.BindComps[j]).FieldName) then
          k:=i;
      until ((TBindSourceDB(TLinkControlToField(bl.BindComps[j]).DataSource).DataSet.Fields[i].FieldName=TLinkControlToField(bl.BindComps[j]).FieldName) or (i=dm.Frais.FieldCount-1));
     
      TFloatField(TBindSourceDB(TLinkControlToField(bl.BindComps[j]).DataSource).DataSet.Fields[k]).EditFormat:='0';
    end;
     
    procedure TFEditFrais.ECoutRefExit(Sender: TObject);
    var i,j,k:integer;
    begin
      i:=-1;
      repeat
        Inc(i,1);
        if bl.BindComps[i].ControlComponent.Name=TEdit(Sender).Name then
          j:=i;
      until ((bl.BindComps[i].ControlComponent.Name=TEdit(Sender).Name) or (i=bl.BindCompCount-1));
     
     i:=-1;
      repeat
        Inc(i,1);
        if (TBindSourceDB(TLinkControlToField(bl.BindComps[j]).DataSource).DataSet.Fields[i].FieldName=TLinkControlToField(bl.BindComps[j]).FieldName) then
          k:=i;
      until ((TBindSourceDB(TLinkControlToField(bl.BindComps[j]).DataSource).DataSet.Fields[i].FieldName=TLinkControlToField(bl.BindComps[j]).FieldName) or (i=dm.Frais.FieldCount-1));
     
      TFloatField(TBindSourceDB(TLinkControlToField(bl.BindComps[j]).DataSource).DataSet.Fields[k]).EditFormat:='';
    end;

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

Discussions similaires

  1. [Débutant] DisplayFormat, 0 non significatif?
    Par Michelk12 dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 26/09/2012, 16h49
  2. [Lazarus] DisplayFormat et couleur
    Par Jon Shannow dans le forum Lazarus
    Réponses: 2
    Dernier message: 12/01/2012, 14h30
  3. DisplayFormat, propriété (TNumericField)
    Par helmis dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/06/2008, 17h24
  4. DisplayFormat à l'affichage d'un DBgrid
    Par mameziane dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/11/2007, 11h39
  5. editformat et champs calculés
    Par nou366 dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/04/2006, 15h08

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