Es gibt kein vorgefertigtes Steuerelement zum Anzeigen von Zeichen in Boxen, wenn Sie danach fragen. Deshalb müssen Sie dies selbst auf der von Ihnen gewählten Leinwand malen.
Hier ist ein Beispiel dafür, wie es in einem TPaintBox
zu tun, ist pbText
hier ein String-Feld der Demo-Form, und hält den Text im Malkasten angezeigt werden:
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;
Und, es zu benutzen
procedure TForm17.Button1Click(Sender: TObject);
begin
pbText := 'Sami Wiim';
PaintBox1.Invalidate;
end;
Sie können [erstellen Sie eine benutzerdefinierte Steuerung] (https://www.fast-report.com/documentation/DevMan/index.html?custom_report_components_writing. htm) dafür. Oder erstellen Sie es dynamisch aus vorhandenen Steuerelementen (getrennt für jedes Zeichen oder jede Zahl). – Victoria
@Victoria Was ist, wenn ich nicht weiß, wie ich es erstelle? Gibt es einen anderen Weg, es zu tun? – Sami
Ich denke schon. Sie könnten z.B. Textobjekt, grösse es, schreibe einen einzelnen Buchstaben, zentriere den Text, richte seinen 'Frame' ein und schließe' ftTop' aus der Eigenschaft 'Frame.Typ' aus. Das sollte zu einer einzelnen Box führen, die Sie möchten. Und wenn Sie solche Boxen zur Laufzeit erstellen, indem Sie alle Zeichen in einer Zeichenkette durchlaufen, indem Sie sie an der vom Iterator verschobenen horizontalen Position platzieren, sind Sie fertig. – Victoria