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 redimensionner un TEdit en fonction de son contenu ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 282
    Points : 102
    Points
    102
    Par défaut Comment redimensionner un TEdit en fonction de son contenu ?
    salut

    mon probleme est le suivant je voudrai redimensionner mon composant Edit en fonction de son contenu pour avoir tout d'afficher en ayant malgré tout des limites pr éviter d'ecraser le reste de mon interface . comment faire ???? :

    merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 282
    Points : 102
    Points
    102
    Par défaut
    j'ai une idée mai je ne voi pas comment la traduire en gros il me faudrai le nombre de caractere de la string ??(comment l'avoir) et ensuite la taille d'un caractere en moyenne je pense que sa suffirai ?? et ensuite je pourrai joué sur la taille de l'edit en fonction de ca car je ne souhaite pas la redimensionner en cours de frappe mais juste au premiere affichage


    je vous remerci pour votre aide

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    La fonction Length te pemet de connaitre le nombre de caractère dans une chaine.

    concernant la taille d'un caractère, c'est variable selon le type de font que tu utilises. Je sais qu'il existe une fonction qui te permet de calculer le nombre de pixels d'une chaine de caractères maus je ne me souviens plus où je l'avais trouvé

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    vi ... la fonction length ne sert a rien dans ton cas car la tailel du graphique depends de la police.

    Il faut se baser sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Edit1.canvas.TextWidth(Edit1.Text);
    Qui renvoie la taille en Pixel du texte ecrit dans la police definie par Edit1.Font.

    Bonne continuation

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 282
    Points : 102
    Points
    102
    Par défaut
    merci pour l'aide si ca te revien fai moi signe en attendant je vai chercher pas le choix merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 282
    Points : 102
    Points
    102
    Par défaut
    j'ai tester la ligne de code tu ma fournis il me di canvas non declaré il faut rajouté quoi comme uses ou autre :

    merci

  7. #7
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    arf padbol ... Canvas est caché

    En plus je ne comprends pas pkoi autosize ne marche pas :/

    Bref ... actuelement je ne peut que te proposer de deriver un TAutoSizeEdit de TEdit et en surchargeant la methode "setText" il me semble de maniere a mettre a jour le Width en fonction du canvas.textWidth du text transmis en parametre.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 282
    Points : 102
    Points
    102
    Par défaut
    j'ai pa tout capter sur ce que tu me proposai actuellement mai il existe un autosize de Tedit ???

    si oui on peut le limiter?

    et au pire c'est une facon de faire trivial mai tres grave dans mon cas je peut me baser sur une taille moyenne de pixel pour ensuite le multiplier par le nombres de caractere mai comment recupérer se nombre c'est length mais je suis pa sur ??

  9. #9
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Oui. LEngth te renvoie la taille en caracteres. Si effectivement tu le multiplie par une taille trouvee de manioere empirique de caracteres tu devrais arriver a qque chose d'honnorale

    PAr contre il ne faut pas changer de font et tous les caracteres n'ont pas la meme taille.

    Sinon tu peux eventuelement creer un objet TCanvas, tu lui affecte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CanvasCalcul.font.assign := Edit1.Font;
    et ensuite utiliser la fonction TextWidth de ce canvas en utilisant Edit1.text.

    sinon tu as aussi la fonction "DrawText" des apis windows (cf Menu/Aide/SDKWindows) qui prend en parametre le texte a afficher (entre autre) et des flags.
    PArmis ces flags si tu saisie DT_CALCRECT le text n'est pas affiché mais effectue un calcul de taille.
    Le parametre Rect est la zone d'affichage du text. mais dans le cas de DTCalcRect, il sera modifié pour definir le rectangle d'affichage du texte en fonctio ndes parametres des autres flags.
    Tu peut ensuite utiliser ce rectazngle pour definir ton edit.

    Petit exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {  Calcul du rectangle du texte  }
       Flags := DT_WORDBREAK;
        RCalc := Self.edit1.ClientRect;
        Windows.DrawText(Self.Canvas.Handle, AText, Length(AText), RCalc, Flags or DT_CALCRECT);
    Bon apres tu arrange ca a ta sauce et quand au canvas.handle .... essaye avec un edit1.handle mais j'ai peu d'espoir ou avec un GetDC .....

  10. #10
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Perso je procèderais comme ça :
    Dans le gestionnaire d'événement OnChange de ton edit (tu auras pris soin de renseigner la propriété Constraints de ton eidt) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Edit1Change(Sender: TObject);
    var TextRect : TRect;
        DC : HDC;
    begin
      TextRect := Rect(0, 0, Edit1.Constraints.MaxWidth, 0);
      DC := GetDC(Edit1.Handle);
      try
        DrawText(DC, PChar(Edit1.Text), -1, TextRect, DT_CALCRECT);
      finally
        ReleaseDC(DC);
      end;
      Edit1.Width := TextRect.Right + 4; // 4 pour l'encadré de l'edit
    end;
    Citation Envoyé par Clorish
    arf padbol ... Canvas est caché
    Non, il n'existe pas du tout
    Citation Envoyé par Clorish
    En plus je ne comprends pas pkoi autosize ne marche pas :/
    Parce qu'AutoSize, pour le TEdit, s'occupe uniquement de la hauteur de l'edit (voir l'aide d'ailleurs).

  11. #11
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    utlise simplement le canvas de ta form aprés que tu change le font de celle si au font de votre TEdit

Discussions similaires

  1. Redimensionner un clip en fonction de son contenu
    Par Chausse dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 30/10/2010, 15h23
  2. Réponses: 4
    Dernier message: 10/06/2009, 12h12
  3. Réponses: 0
    Dernier message: 20/04/2009, 15h24
  4. redimensionnement dynamique de frame en fonction de son contenu
    Par kowal_2205 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/08/2007, 15h37
  5. [HTML/CSS] Taille d'un <div> en fonction de son contenu
    Par hedgehog dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 14/12/2006, 18h57

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