Bonjour,

j'aimerais "décomposer" un mot en plusieurs lettres, et pour chacun d'entre-elles, créer un TLabel.
Rien de bien sorcier, me direz-vous...
Mais là où ça se gâte, c'est lorsqu'il faut les "placer".
Tantôt, il y a trop de d'écart entre les lettres, tantôt elles se télescopent !

Voici un p'tit bout de code :
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
 
procedure TForm1.DecomposerMot(Mot:String);
var
i,nbpixels,decalage:integer;
MonLabel:TLabel;
begin
decalage:=0;
for i := 0 to length(Mot) do
  begin
  MonLabel:=TLabel.create(self);
  MonLabel.parent:=Self;
  MonLabel.Top:=10;
  MonLabel.Font.Size:=12;
  nbpixels:=MonLabel.Canvas.TextWidth(Mot[i]);
  decalage:=decalage+nbpixels;
  MonLabel.Left:=decalage;
  MonLabel.Caption:=Mot[i];
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
DecomposerMot('developpez.net');//placez la chaîne que vous voulez
end;
Le problème c'est que le Canvas.TextWidth des labels ne semble pas du tout donner la bonne information.
J'ai d'ailleurs essayé directement avec un tout bête "Label.width" mais alors, c'est encore pire...

Comment pourrais-je pallier ce problème ?

Par avance, merci.
Nuclear.