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 :

Comment savoir si le texte saisi dans un TEdit est apparent à l'écran


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut Comment savoir si le texte saisi dans un TEdit est apparent à l'écran
    Bonjour à tous,

    Ma question est simple : comment savoir si le texte saisi dans un TEdit est apparent à l’écran ? De cette manière je peux gérer la taille de la fonte et la taille du TEdit.

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour,
    est ce que tu peux préciser ta question ? quand on tape du texte dans un TEdit "standard", il est visible à l'écran sauf si PasswordChar n'a pas la valeur caractère nulle (#0)

    A+
    Charly

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Tu veux surement dire que la largeur de ton TEdit doit s'adapter à la largeur de son texte ?

    Regarde ici et ici

    A+
    Charly

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 86
    Points : 375
    Points
    375
    Par défaut
    Je pense que la question est de savoir si le texte saisi dépasse ou non en fonction de la largeur du TEdit.

    On doit pouvoir faire ça en utilisant un canvas :

    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
     
      myCanvas : TControlCanvas;
    begin
     
      myCanvas := TControlCanvas.Create;
      try
        myCanvas.Control := Edit1;
     
        myCanvas.Font.Assign(Edit1.Font);  // bien penser à utiliser la font du TEdit
     
        if myCanvas.TextWidth(Edit1.Text) > Edit1.Width then
          ShowMessage('Trop long');
     
     
      finally
        FreeAndNil(myCanvas);
      end;

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Et comme le fait Hermite, pour bloquer la saisie en longueur tu peux mettre ce code dans le OnKeyPress :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
    Var  myCanvas : TControlCanvas;
    begin
      if (Key = Chr(vk_Back)) then  Exit  ;    // pour pouvoir faire marche arrière !
      myCanvas := TControlCanvas.Create;
      try
        myCanvas.Control := Edit2;
        myCanvas.Font.Assign(Edit2.Font);
        if myCanvas.TextWidth(Edit2.Text) > (Edit2.ClientWidth - myCanvas.TextWidth('a')) then  // pour garder un peu de marge 
          Key := #0 ;
      finally
        FreeAndNil(myCanvas);
      end;
    end;
    Sinon au lieu de Key := 0 tu peux agrandir le TEdit

    Il existe aussi la propriété MaxLength que l'on utilise souvent pour limiter la saisie en nombre de caractères ...

    A+
    Charly

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Je vous remercie beaucoup pour vos réponses. Cependant j'ai oublié de préciser que je voudrais contrôler l'affichage dans un "Tdbedit", si les données ne sont pas complètement affichées je réduit la font mais le problème que Tdbedit ne contient pas les evenements "Onkeypress, onkeychange".

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour,

    sous D7, mon TDBEdit comporte un OnKeyPress et un OnChange ??

    A+
    Charly

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    je voulais dire "Tdbtext". Je m'excuse pour ces confusions je suis un peu grippé.

  9. #9
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour,

    je n'ai pas de logiciel de BD sous la main, mais tu peux essayer de mettre ceci dans le OnDataChange :

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Buffer: PChar;
      Size: Byte;
      Texte : String ;
      myCanvas : TControlCanvas;
    begin
      // Récupération du texte du TDBText
      Size := DBText1.GetTextLen;
      Inc(Size);
      GetMem(Buffer, Size);
      DBText1.GetTextBuf(Buffer,Size);
      Texte := StrPas(Buffer);
      FreeMem(Buffer, Size);
      //  Traitement de la dimension du texte
      myCanvas := TControlCanvas.Create;
      try
        myCanvas.Control := DBText1 ;
        myCanvas.Font.Assign(DBText1.Font);
        if myCanvas.TextWidth(Texte) > (DBText1.ClientWidth - myCanvas.TextWidth('a')) then
          //   traitement de la font du DBText
      finally
        FreeAndNil(myCanvas);
      end;
    end;
    Sans garantie du gouvernement !

    A+ Charly

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Il ya pas d'evenement "ondatachange"!!!? dans Tdbtext, ou peut être je suis toujours grippé

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Citation Envoyé par chekkal Voir le message
    peut être je suis toujours grippé
    j'en sors juste c'est vrai qu'on a le cerbo lent dans ces cas là mais quand même le TEdit de départ s'est quand même beaucoup transformé non ?

    Citation Envoyé par chekkal Voir le message
    Il ya pas d'evenement "ondatachange"!!!? dans Tdbtext
    Peut être aussi parce qu'il ne faut pas utiliser des évènements du composant TDBText mais jouer sur les propriétés de celui-ci au moment de l'affectation de la valeur je pense au onGetText du TField. Bien sûr cela implique que les champs soient déclarés
    Ensuite le principe reste le même : calculer la taille d'un canvas en fonction d'une longueur connue comme Charly l'a déjà proposé (j'aurai plutôt utilisé un 'M' qu'un 'a' mais je chipote)
    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

  12. #12
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour,

    je pensais au OnDataChange du TDataSource, sans être sûr que cela puisse fonctionner.

    Mais Serge, le grand maître des bases de données (entre autre !) va pouvoir te dépanner en deux coups de cuillère à pot !

    A+
    Charly

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    mes chevilles
    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

  14. #14
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    J'ai utilisé l’événement ongettext du champs et il affiche rien maintenant.

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Il est sûr que sans rien voir du code utilisé on va certainement pouvoir voir où se trouve l'erreur
    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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/09/2015, 17h26
  2. comment interpreter les balises html saisies dans une zone de texte
    Par programmatrice dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 17/04/2012, 15h04
  3. Vérifier le type d'un texte saisi dans un TEdit
    Par logiciel_const dans le forum Composants VCL
    Réponses: 3
    Dernier message: 26/04/2009, 15h13
  4. Réponses: 3
    Dernier message: 31/07/2006, 16h42
  5. [D7] Longueur du texte saisi dans un Tedit
    Par Thierry Laborde dans le forum Delphi
    Réponses: 6
    Dernier message: 11/07/2006, 19h08

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