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 :

Problème de focus entre Tedit et TSpinEdit


Sujet :

Lazarus Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Problème de focus entre Tedit et TSpinEdit
    Bonjour tout le monde,

    j'ai un petit souci. J'ai une application avec un TEdit et un TSpinEdit.
    Le TEdit ne peut accepter qu'un nombre real positif.
    Donc j'ai une fonction :
    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
    procedure TForm1.Edit1EditingDone(Sender: TObject);
    var interest:real;
    begin
        try
          begin
            interest:=StrToFloat(Edit1.Text);
            if (interest<0) then
            begin
              MessageDlg('Error','Please type a positive real number to continue.', mtError, [mbOk],0);
              Edit1.SelectAll;
              Edit1.SetFocus;
            end;
          end;
          except
            MessageDlg('Error','Please type a positive real number to continue.', mtError, [mbOk],0);
            Edit1.SelectAll;
            Edit1.SetFocus;
          end;
     
    end;
    Lorsque je clique sur le spinedit, pas de souci cela fonctionne, le focus resete sur le tedit, mais lorsque je clique sur les petites flèches du tspinedit (vers le haut ou vers le bas), alors le tspinedit se met à incrémenter ou décrementer automatiquement la valeur jusqu'à la valeur maximum ou minimum autorisée. Je ne comprends pas trop comment cela se fait. J'ai essayé avec un OnExit event mais cela ne fonctionne pas mieux.

    Merci pour votre aide !

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    J'ai joué avec la propriété Increment. Je la mets à zéro quand il y a une erreur et sinon à 1, et cela semble fonctionner.
    Bizarre quand mm ce soucis.

  3. #3
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,

    En fait c'est compréhensible.
    La "partie Edit" d'un TSpinEdit est un composant "fenêtré" (dérivé de TWinControl), c.à.d. un composant qui peut recevoir le Focus (comme TButton...).
    En cliquant sur l'edit, tu tentes de lui attribuer le focus, ce qui provoque l'exit de Edit1 et donc avec ton code le focus revient à edit1.
    Par contre, en cliquant sur les flèches, tu ne provoques pas directement le changement de focus.
    Je n'ai pas regardé le code du TSpinEdit, mais on pourrait le concevoir comme un composant contenant un TEdit + 2 TSpeedButton.
    Or, TSpeedButton est un composant "non fenêtré" (dérivé de TGraphicControl), donc il n'entraine pas de changement de focus.
    C'est une lacune de programmation, pcq en cliquant sur les flèches, il faudrait d'abord tenter de donner le focus au SpinEdit, puis, si le focus est attribué, changer la valeur de l'edit.

    Comment résoudre ton problème ?

    1) tu peux rendre disabled le SpinEdit, tant qu'Edit1 n'a pas une bonne valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Edit1Change(Sender: TObject);
    var
      a: extended;
    begin
      spinedit1.enabled:= (TryStrToFloat(edit1.text, a) and (a >= 0));
    end;
    2) Ce que je fais souvent, c'est contrôler la valeur en temps réel et la corriger directement. Dans ce cas, je ne fais pas de messages d'erreur, sinon c'est infernal pour l'utilisateur. Dans un label ou dans le hint, j'indique "Veuillez rentrer une valeur réelle positive".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Edit1Change(Sender: TObject);
    var
      a: extended;
    begin
      if edit1.text = '' then edit1.text:= '0'
      else
      if not TryStrToFloat(edit1.Text, a) or (a < 0.0) then
      begin
         Edit1.Text:= '0';
         Edit1.SelectAll;
      end;
    end;
    Ce qui ne t'empêche pas de refaire un contrôle à l'Exit de ton edit1.

    Thierry

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par moihenry Voir le message
    j'ai un petit souci. J'ai une application avec un TEdit et un TSpinEdit.
    Hormis le test réalisé sur le contenu de Edit1, quelles sont les événements qui lient ce composant à SpinEdit1 ? Et le code qui fait interagir les 2 ?
    Philippe.

Discussions similaires

  1. Problème de focus entre zones de texte
    Par Hipopo dans le forum VB.NET
    Réponses: 5
    Dernier message: 12/07/2010, 13h28
  2. Problème avec une entrée et un focus
    Par Soncar dans le forum VB.NET
    Réponses: 2
    Dernier message: 31/05/2008, 18h26
  3. Problème de focus + touches de direction
    Par schnito dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 11/01/2005, 20h13
  4. Réponses: 2
    Dernier message: 21/10/2004, 15h08
  5. Problèmes de compatibilité entre sdk 9.0c et geforce 2/4
    Par Francky033 dans le forum DirectX
    Réponses: 2
    Dernier message: 01/10/2004, 14h22

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