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 :

ScrollBar et TEdit liés


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Avatar de joreveur
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 293
    Points : 365
    Points
    365
    Par défaut ScrollBar et TEdit liés
    Bonjour
    j'ai un TEdit dans lequel je peux rentrer des valeurs comprises entre 1 et 100 et qui fait varier un TScrollBar de 1 à 100 ou inversement en modifiant le TScrollbar

    voici un bout de code
    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
    procedure TForm1.Edit5Change(Sender: TObject);
    var cr:integer;
    r:real;
     
    begin
      val(edit5.text,r,cr);
      if cr=0 then
      begin
        ScrollBar5.Position:=round(r);
      end;
    end; 
     
    procedure TForm1.ScrollBar5Change(Sender: TObject);
    begin
      edit5.text:=FormatFloat('#####0.##',scrollbar5.Position);
    end;
    mais ce que je souhaiterais, ce serait de pouvoir faire varier les valeurs par "pas" de 0.1 (par exemple) soit dans le TEdit soit dans le ScrollBar, mais comme TScrollBar.position n'admet que des entiers, je ne vois pas trop...

    Merci de vos conseils

    Cordialement

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    il te suffit de lui appliquer une coef multiplicateur par exemple dans ton cas 10
    donc dans ton cas le pas de 1 reviendra 1/10 = 0.1

    reprenons ton code et modifions le

    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
    procedure TForm1.Edit5Change(Sender: TObject);
    var cr:integer;
    r:real;
     
    begin
      val(edit5.text,r,cr);
      if cr=0 then
      begin
        ScrollBar5.Position:=round(r*10);
      end;
    end; 
    
    procedure TForm1.ScrollBar5Change(Sender: TObject);
    begin
      edit5.text:=FormatFloat('#####0.##',scrollbar5.Position/10);
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre averti
    Avatar de joreveur
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 293
    Points : 365
    Points
    365
    Par défaut
    Bonjour et merci de ta réponse rapide.
    Oui effectivement c'est la bonne solution et ça fonctionne.
    cependant en récupérant la valeur des Tedit je n'arrivais pas à la convertir en numérique sauf pour les entiers.
    alors en cherchant un peu, j'ai constaté que les virgules et les points (notation française/américaine) me mettaient la panique.
    j'ai contourné le problème de cette façon mais il y a peut-être plus simple, à moins que ce soit des paramètres de Lazarus ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    s:=edit5.text;
         for i:=1 to length(s) do
             if s[i]=',' then  s[i]:='.';
         val(s,r,cr);  
    etc...
    Bien cordialement

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut
    oui beaucoup plus simple
    on créé une petite fonction qui peut servir souvent si ce n'est pas déjà fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fonction IIF(Test : Boolean;TrueValue, FalseValue : String ) : String;
    begin
       if Test then  
         Result := TrueValue 
      else 
       Result := FalseValue;
    end;
    Le code pour le remplacement au final est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      StringReplace(st,iif(DECIMALSEPARATEUR='.',',','.'),DECIMALSEPARATEUR)
    ou
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

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

    Il faut mieux décoder les chaînes numériques avec StrToFloat ou TryStrToFloat, ou StrToCurr, ou TryStrToCurr.
    De cette manière les programmes fonctionneront dans tous les environnements quelque soit le séparateur décimal, qui n'est pas fixé par Lazarus, mais par le Système.
    Évidemment ça n'arrivera pas dans le cas soumis, mais si on tape 1,000 avec un système anglo-saxon, cela doit être interprété comme mille.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  6. #6
    Responsable Lazarus & Pascal

    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
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Bonjour,

    Citation Envoyé par tintinux Voir le message
    Bonjour

    Il faut mieux décoder les chaînes numériques avec StrToFloat ou TryStrToFloat, ou StrToCurr, ou TryStrToCurr.
    C'est la solution que je choisirais aussi

    Citation Envoyé par anapurna Voir le message
    salut
    oui beaucoup plus simple
    on créé une petite fonction qui peut servir souvent si ce n'est pas déjà fait
    Encore plus simple : il est inutile de créer la fonction puisqu'elle existe déjà (et en un peu mieux puisque le "si faux" est optionnel ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function IfThen(
      AValue: Boolean;
      const ATrue: string;
      const AFalse: string = ''
    ):string; overload;
    Elle est disponible dans l'unité strutils. La version pour les nombres (d'où le overload) est dans l'unité math.
    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

Discussions similaires

  1. Changer le design/la couleur d'une scrollbar/TEdit ?
    Par pepito62 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 29/09/2010, 12h54
  2. Scrollbar sur un TEdit
    Par bL0w_waffeE dans le forum Débuter
    Réponses: 5
    Dernier message: 18/04/2008, 11h47
  3. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53
  4. [visuel]ScrollBar et StatusBar
    Par psl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/08/2002, 21h28
  5. TEdit : selection du texte et autre fonction
    Par Odulo dans le forum Composants VCL
    Réponses: 5
    Dernier message: 01/08/2002, 14h27

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