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

Lazarus Pascal Discussion :

Composant de saisie de nombre [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre prolifique Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 750
    Par défaut Composant de saisie de nombre
    Bonjour,

    tout est dans le titre. Quelqu'un connait-il un bon composant permettant la saisie de nombre (entier, réel). Je cherche pas un truc compliqué, juste pouvoir saisir des nombre !

    Merci d'avance
    JS

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 145
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 145
    Par défaut
    Salut,

    Citation Envoyé par Jon Shannow Voir le message
    Bonjour,

    tout est dans le titre. Quelqu'un connait-il un bon composant permettant la saisie de nombre (entier, réel). Je cherche pas un truc compliqué, juste pouvoir saisir des nombres !

    Merci d'avance
    JS
    j'aillais te proposer un bête TEdit avec sa propriété NumbersOnly basculée à True sauf que je viens de tester, par acquis de conscience et que... ça ne fonctionne pas !

    Pourtant il me semblait avoir repéré cette propriété et l'avoir trouvée sympathique mais ce soir, makache bonno et walou, je peux saisir n'importe quoi dans l'Edit.

    Ou alors ça fonctionne mieux en 1.6 ?

  3. #3
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut
    Bonsoir

    @JP
    je viens de tester Edit avec la version 1.6 RC2 et ça a bien fonctionné!!

    Nom : Nombre.png
Affichages : 510
Taille : 25,7 Ko
    merci

  4. #4
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Bonjour

    Avec la 1.6 Stable sous Linux, la propriété NumbersOnly semble sans effet.
    Vous étiez sous d'autres systèmes, je suppose ?

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 145
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 145
    Par défaut
    Salut,
    Citation Envoyé par tintinux Voir le message
    Bonjour

    Avec la 1.6 Stable sous Linux, la propriété NumbersOnly semble sans effet.
    Vous étiez sous d'autres systèmes, je suppose ?
    Confirmé, en ce qui me concerne :
    Testé à l'instant dans deux machines virtuelles le même environnement (Laz 1.6rc1 et non, je ne migrerai pas tant que ça sera aussi merdique) : dans XP ça fonctionne tip-top et dans Debian 32bits tu peux saisir n'importe quoi dans le TEdit...

  6. #6
    Membre prolifique Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 750
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,


    Confirmé, en ce qui me concerne :
    Testé à l'instant dans deux machines virtuelles le même environnement (Laz 1.6rc1 et non, je ne migrerai pas tant que ça sera aussi merdique) : dans XP ça fonctionne tip-top et dans Debian 32bits tu peux saisir n'importe quoi dans le TEdit...
    J'ai testé également, sous Windows 10 64 bits avec Lazarus 1.6 32 bits, ça fonctionne SAUF que l'on ne peut saisir QUE des chiffres (0..9) pas de "," ou "." pas de "+" ou "-" ! Bref, c'est bien pour des zones entières non signées !

  7. #7
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,
    Confirmé, en ce qui me concerne :
    Testé à l'instant dans deux machines virtuelles le même environnement (Laz 1.6rc1 et non, je ne migrerai pas tant que ça sera aussi merdique) : dans XP ça fonctionne tip-top et dans Debian 32bits tu peux saisir n'importe quoi dans le TEdit...
    Bonjour,

    Le premier objectif de Lazarus est de faire fonctionner le même code d'une manière similaire avec divers OS ; le second est d'imiter au mieux Delphi afin que le code écrit pour ce dernier soit en grande partie réutilisable. Le problème est que ces deux objectifs ne sont pas toujours conciliables facilement.

    Ici, la propriété NumbersOnly est une propriété que connaissent bien Delphi et Windows pour son TEdit natif. Malheureusement, ce n'est pas le cas des autres OS.

    Si l'on décortique le code source en remontant les appels, on obtient ceci (Lazarus 1.6 sous Windows 10 64 bits) :


    • NumbersOnly est une propriété publiée de TCustomEdit dans TEdit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TEdit = class(TCustomEdit)
      public
        property AutoSelected;
      published
        property Action;
        property Align;
        // d'autres propriétés publiées...
        property NumbersOnly;   
       // idem...
    end;

    • NumbersOnly est une propriété créée par TCustomEdit :


    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
    TCustomEdit = class(TWinControl)
      private
        // ...
        FNumbersOnly: Boolean;
       // ...
      protected
        // ...
        function GetNumbersOnly: Boolean; virtual;
        // ... 
        procedure SetNumbersOnly(Value: Boolean); virtual;
        // ...
      public
        // ...
        property NumbersOnly: Boolean read GetNumbersOnly write SetNumbersOnly default false;
        // ...
      end;
    La méthode intéressante est celle qui fixe la valeur du champ interne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TCustomEdit.SetNumbersOnly(Value: Boolean);
    begin
      if FNumbersOnly <> Value then
      begin
        FNumbersOnly := Value;
        if HandleAllocated then
          TWSCustomEditClass(WidgetSetClass).SetNumbersOnly(Self, Value);
      end;
    end;
    On voit qu'elle fait correctement son travail en changeant le champ privé FNumberOnly si nécessaire puis en appelant la routine de l'OS via son Widget.
    Et c'est là que réside le problème final : les autres OS ne connaissent pas nativement cette fonctionnalité .
    On trouve donc le code suivant pour le widget Windows :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class procedure SetNumbersOnly(const ACustomEdit: TCustomEdit; NewNumbersOnly: Boolean); virtual;
    définie par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class procedure TWSCustomEdit.SetNumbersOnly(const ACustomEdit: TCustomEdit;
      NewNumbersOnly: Boolean);
    begin
    end;
    ... donc, une méthode vide

    Parallèlement, des paramètres sont créés pour activer ou désactiver des comportements. Ces derniers sont gérés par l'OS :

    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
    procedure TCustomEdit.CreateParams(var Params: TCreateParams);
    const
      AlignmentStyle: array[TAlignment] of DWord = (
    { taLeftJustify  } ES_LEFT,
    { taRightJustify } ES_RIGHT,
    { taCenter       } ES_CENTER
      );
    begin
      inherited CreateParams(Params);
      Params.Style := Params.Style or ES_AUTOHSCROLL or AlignmentStyle[Alignment];
      if ReadOnly then
        Params.Style := Params.Style or ES_READONLY;
      if NumbersOnly then
        Params.Style := Params.Style or ES_NUMBER;
      if not HideSelection then
        Params.Style := Params.Style or ES_NOHIDESEL;
    end;
    Pour Windows, ça fonctionne, mais seulement pour les chiffres (c'est bien Windows qui affiche le message de refus, pas Lazarus ni Free Pascal).

    La seule véritable solution serait de simuler le fonctionnement avec les autres OS, mais ce n'est pas une mince affaire si l'on doit interférer avec eux... Si l'un de vous se sent de le faire, qu'il propose un patch au Bugtracker .
    A terme, il faudra sans doute que Free Pascal et Lazarus prennent plus d'autonomie vis-à-vis de Delphi. On peut aussi imaginer au moins un avertissement du compilateur.

    En attendant, la solution réaliste sera d'employer TSpinEdit et TFloatSpinEdit qui sont dédiés à la saisie des nombres. Après tout, c'est ce qui était recherché initialement, non ?
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  8. #8
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser TSpinEdit et TFloatSpinEdit du volet Misc ? Ils permettent à la fois l'usage de la souris et celui du clavier.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

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

Discussions similaires

  1. Empêcher la saisie de nombre ou de caractère
    Par SOPSOU dans le forum Langage
    Réponses: 3
    Dernier message: 28/08/2007, 17h27
  2. Réponses: 2
    Dernier message: 30/04/2007, 14h56
  3. Creation d'un composant pour saisir des nombres
    Par Sylmandel dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 05/06/2006, 10h09
  4. [Composant] Composant de saisie de date
    Par seb_asm dans le forum Composants
    Réponses: 6
    Dernier message: 03/10/2005, 14h36
  5. [JFormattedTextField] Saisie des nombres
    Par n00bi dans le forum Composants
    Réponses: 2
    Dernier message: 20/06/2005, 14h23

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