Il n'y a aucun contrôle prêt à l'emploi pour afficher les caractères dans les boîtes comme vous le demandez. Par conséquent, vous devez peindre vous-même sur la toile que vous choisissez.
Voici un exemple de la façon de le faire dans un TPaintBox
, pbText
est ici un champ de chaîne de la forme de démonstration, et contient le texte à afficher dans la boîte de peinture:
procedure TForm17.PaintBox1Paint(Sender: TObject);var
i, n, x, y: integer;
siz: TSize;
pb: TPaintBox;
begin
n := 10; // character cells
pb := Sender as TPaintBox;
siz := pb.Canvas.TextExtent('Wp');
// draw character cells
x := 4; y := siz.cy+2;
for i := 0 to n do
begin
pb.Canvas.MoveTo(i * siz.cx + x, 0);
pb.Canvas.LineTo(i * siz.cx + x, y);
end;
pb.Canvas.MoveTo(x, y);
pb.Canvas.LineTo(n * siz.cx + 4, y);
// draw characters horizontally in center of box
for i := 1 to Length(pbText) do
begin
x := (4 + (i-1)*siz.cx + (siz.cx - pb.Canvas.TextWidth(pbText[i])) div 2);
y := 0;
pb.Canvas.TextOut(x, y, UpperCase(pbText[i])); // force upcase
// pb.Canvas.TextOut(x, y, pbText[i]); // or don't
end;
end;
Et pour l'utiliser
procedure TForm17.Button1Click(Sender: TObject);
begin
pbText := 'Sami Wiim';
PaintBox1.Invalidate;
end;
Vous pouvez [créer un contrôle personnalisé] (https://www.fast-report.com/documentation/DevMan/index.html?custom_report_components_writing. htm) pour cela. Ou construisez-le dynamiquement à partir de contrôles existants (séparément pour chaque caractère ou numéro). – Victoria
@Victoria Et si je ne sais pas comment le créer? Y a-t-il un autre moyen de le faire? – Sami
Je suppose que oui. Vous pourriez prendre par exemple objet texte, le redimensionner, écrire une seule lettre, centrer le texte, configurer son 'Frame' et exclure l'indicateur' ftTop' de la propriété 'Frame.Typ'. Cela devrait aboutir à une seule boîte que vous voulez. Et si vous créez de telles boîtes à l'exécution en itérant tous les caractères d'une chaîne en les plaçant à la position horizontale décalée par l'itérateur, vous avez terminé. – Victoria