Bonjour,
Je cherche un moyen d'ajuster automatiquement la taille de la police en fonction de la largeur du label.
Quelqu'un aurait une piste ou un bout de code
Merci d'avance
jld
Bonjour,
Je cherche un moyen d'ajuster automatiquement la taille de la police en fonction de la largeur du label.
Quelqu'un aurait une piste ou un bout de code
Merci d'avance
jld
Canvas.TextWidth('Mon texte') renvoit la largeur en pixel d'un texte donné.
C'est peut-être une piste ...
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!
C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)
Bonjour,
Alors, je te conseilles tout d'abord d'utiliser cette fonction, présentée dans la FAQ :
Comment connaître la largeur et la hauteur en pixels d'un texte ?
A partir de là, tu vas pouvoir créer une deuxième fonction que l'on va appeler CalculeTaille. Il s'agira dans cette fonction :
- de récupérer (en faire une copie) de la police de caractère utilisée par ton Label,
- et de faire varier sa propriété Size de 0 à -255 jusqu'à ce que la largeur du texte calculée dépasse la largeur maxi que tu aura fixé (celle de ton label)
Mise en pratique :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 //Fonction de la FAQ Function TextSize(Phrase : string; Police : TFont = nil) : TPoint; var DC: HDC; Rect: TRect; C : TBitmap; begin C := TBitmap.create; try if police <> nil then C.canvas.Font := police; Rect.Left := 0; Rect.Top:=0; Rect.Right:=0; Rect.Bottom:=0; DC := GetDC(0); C.Canvas.Handle := DC; DrawText(C.Canvas.Handle, PChar(Phrase), Length(Phrase), Rect, (DT_EXPANDTABS or DT_CALCRECT)); C.Canvas.Handle := 0; ReleaseDC(0, DC); result.X:=Rect.Right-Rect.Left; result.Y:=Rect.Bottom-Rect.Top; finally C.Free; end; end; function TailleAuto(ALabel:TLabel;LargeurMax:integer); var F:Font; i:integer; begin F:=TFont.create; try F.Assign(ALAbel.Font); F.size:=0; while TextSise(ALabel.Caption;F).y<LargeurMax do F.size:=F.size-1; //La taille de police précédente tenait dans la largeur du Label if F.size<0 then F.size:=F.size+1; //On modifie la taille de la police du Label ALAbel.Font.size:=F.size; finally F.free; end; end; //Utilisation begin ..... Label1.caption:='Mon Texte'; TailleAuto(Label1,Label1.Width); ..... end;
Sinon, la taille du Label peut être dynamique (propriété AutoSize mise à True), c'est à dire que sa taile changera en fonction du contenu du Caption. C'était peut-être tout simplement ça que tu cherchais, donc voilà.
Bidouilleuse Delphi
Bonsoir,
Merci pour l'aide
Ca marche très bien aux ajustements suivants près :
- Ne pas initialiser F.Size à 0 dans TailleAuto
- Faire un while sur TextSize().x > LargeurMax
Résultat : un label ayant sont autosize = false voit la taille de sa police varier selon la taille (nombre de caractères) qu'il contient. Attention variation en diminution pas en augmentation. Mais c'est ce que je cherchais.
A bientôt et encore merci
De rien
En fait j'ai balancé le code directement sans tester parce que je n'avais pas mon Delphi sous la main.
Je l'ai écrit directement comme ça dans la fenètre d'édition du forum. Heureuse de voir que tu t'en sois sorti et que tu aies trouvé les modifications à apporter par toi même.
bises,
Chloé
Bidouilleuse Delphi
mon grain de sel
ce code ne gère que le grossissement
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.FormCreate(Sender: TObject); var Size: Integer; begin Label1.Canvas.Font := Label1.Font; while Label1.Canvas.TextWidth(Label1.Caption) < Label1.Width do begin Size := Label1.Canvas.Font.Size; Label1.Canvas.Font.Size := Size + 1; end; Label1.Font.Size := Size; Label1.Height := Label1.Canvas.TextHeight(Label1.Caption); end;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager