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![]()
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![]()
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
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é
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
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 :
Qui renvoie la taille en Pixel du texte ecrit dans la police definie par Edit1.Font.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Edit1.canvas.TextWidth(Edit1.Text);
Bonne continuation![]()
merci pour l'aide si ca te revien fai moi signe en attendant je vai chercher pas le choix merci
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
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.
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 ??
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 :
et ensuite utiliser la fonction TextWidth de ce canvas en utilisant Edit1.text.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CanvasCalcul.font.assign := Edit1.Font;
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 :
Bon apres tu arrange ca a ta sauce
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);et quand au canvas.handle .... essaye avec un edit1.handle mais j'ai peu d'espoir ou avec un GetDC .....
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;Non, il n'existe pas du toutEnvoyé par Clorish
Parce qu'AutoSize, pour le TEdit, s'occupe uniquement de la hauteur de l'edit (voir l'aide d'ailleurs).Envoyé par Clorish
sjrd, ancien rédacteur/modérateur Delphi.
Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
Découvrez Mes tutoriels.
utlise simplement le canvas de ta form aprés que tu change le font de celle si au font de votre TEdit![]()
Partager