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

Langage Delphi Discussion :

TEdit dynamique - Width automatique


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut TEdit dynamique - Width automatique
    Bonjour à tous,

    je cherche à adapter la longueur (Width) d'un TEdit en fonction de la longueur en pixels du texte en cours de frappe.
    Au départ le TEdit a une longueur de 16 pixels par exemple et au fur et à mesure de l'encodage la longueur du TEdit croît.
    Ça marche avec un TEdit mais avec le même composant en dynamique je ne vois pas comment le faire.
    Je crée autant de TEdit que nécessaire et pour chacun d'eux je voudrais appliquer le même principe.
    Je vous joins le code correspondant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TFormulaire.FormKeyPress(Sender: TObject; var Key: Char);
    var
      Len, Longueur_Depart: integer;
    begin
     Longueur_Depart:=16;
     Len:= Text_Length(Self, TEdit(findComponent('myEdit' + intToStr(compteurEdit))));
     TEdit(findComponent('myEdit' + intToStr(compteurEdit))).Width := Longueur_Depart + Len;
    End;
    Text_Length renvoie la longueur du texte en pixels.
    Len est la longueur en cours.
    Lorsque je remplace TEdit(findComponent('myEdit' + intToStr(compteurEdit))) par Edit1 par exemple ça fonctionne mais comment le faire comprendre aux TEdit dynamiques?

    Si quelqu'un pouvait m'aider ça m'arrangerait drôlement.

    BB

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Et pourquoi ne pas assigner une méthode OnKeyPress à chaque TEdit créé dynamiquement ? Ainsi Sender représenterait le champ en cours.

    Citation Envoyé par BBouille Voir le message
    Lorsque je remplace TEdit(findComponent('myEdit' + intToStr(compteurEdit))) par Edit1 par exemple ça fonctionne
    Et bien il faut croire que le nom recherché n'existe pas

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Bonsoir,

    si, je peux écrire dans chaque TEdit dynamique mais je ne parviens pas à modifier la longueur.
    Justement je ne vois pas comment assigner la méthode OnKeyPress à chacun d'eux.

    Cordialement.

    BB

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par BBouille Voir le message
    Bonsoir,

    si, je peux écrire dans chaque TEdit dynamique mais je ne parviens pas à modifier la longueur.
    Justement je ne vois pas comment assigner la méthode OnKeyPress à chacun d'eux.

    Cordialement.

    BB
    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
     
    type
      TForm1 = class(TForm
      ...
      private
        procedure AddEdit;
        procedure EditKeyPress(Sender: TObject; var Key: Char);
      end;
    ...
    procedure TForm1.AddEdit;
    var
      Edit: TEdit;
    begin
      Edit := TEdit.Create(Self);
      Edit.Parent := Self;
      Edit.OnKeyPress := EditKeyPress;
    end;
     
    procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
    var
      Len, Longueur_Depart: integer;
      Edit: TEdit;
    begin
      edit := TEdit(Sender);
     Longueur_Depart:=16;
     Len:= Text_Length(Self, Edit);
     Edit.Width := Longueur_Depart + Len;
    End;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Super Paul ça marche,

    en fait j'étais passé par pas mal de possibilités car je dois pouvoir détecter le caractère ^ pour déclarer un exposant.
    Alors j'avais essayé avec le OnKeyPress, Up,... et je n'y arrive pas.
    Ce caractère lorsqu'on le tape attend un autre caractère mais comme ce n'est pas le même cas qu'avec un shift ou un ctrl je n'ai pas pu trouver sur le Net comment détecter cette touche.

    Une autre petite question de principe, cette procédure est déclarée comme ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EditKeyPress(Sender: TObject; var Key: Char);
    et pourquoi ne déclare-t-on pas les paramètres ici?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit.OnKeyPress := EditKeyPress;
    Encore merci à toi.

    BB

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Citation Envoyé par BBouille Voir le message
    pourquoi ne déclare-t-on pas les paramètres ici?
    Parce qu'il ne s'agit pas d'une déclaration mais uniquement de l'assignation d'un pointeur de méthode

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par BBouille Voir le message
    Super Paul ça marche,

    en fait j'étais passé par pas mal de possibilités car je dois pouvoir détecter le caractère ^ pour déclarer un exposant.
    Alors j'avais essayé avec le OnKeyPress, Up,... et je n'y arrive pas.
    Ce caractère lorsqu'on le tape attend un autre caractère mais comme ce n'est pas le même cas qu'avec un shift ou un ctrl je n'ai pas pu trouver sur le Net comment détecter cette touche.

    Une autre petite question de principe, cette procédure est déclarée comme ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EditKeyPress(Sender: TObject; var Key: Char);
    et pourquoi ne déclare-t-on pas les paramètres ici?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit.OnKeyPress := EditKeyPress;
    Encore merci à toi.

    BB
    car la procédure est déjà déclarée, ici on ne fait que donner son nom comme méthode a invoquer quand l'événement se produira.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Merci à vous deux,

    encore un petit pas de compréhension aux objets franchi.
    Et si jamais un petit programmeur comme moi tombait sur ce post au cas où il voudrait détecter la touche ^ ben il faut utiliser OnKeyUp ou OnKeyDown et non pas OnKeyPress.

    Bien à vous.

    BB

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/02/2009, 16h10
  2. Réponses: 9
    Dernier message: 23/08/2008, 18h18
  3. [TUTO]Application multilingue "dynamique" et "automatique"
    Par echap2000 dans le forum C++Builder
    Réponses: 9
    Dernier message: 29/06/2007, 14h25
  4. TEdit dynamique
    Par baddom dans le forum Delphi
    Réponses: 11
    Dernier message: 08/06/2006, 16h42
  5. Création de TEdit dynamique
    Par onet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 18/01/2006, 14h46

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