DrawString 的第二個參數 length: Integer 控制輸出字符個數。傳入 -1 輸出全部,傳入正整數輸出前 N 個字符。本文利用此特性實現打字機逐字顯示動畫與指標移動效果。
| length 值 | 行為 | 應用場景 |
|---|---|---|
| -1 | 輸出字串所有字符(至 null 終止) | 一般文字輸出 |
| 0 | 不輸出任何內容 | 隱藏文字 |
| 1~Length(str) | 輸出前 N 個字符 | 打字機動畫、進度顯示 |
| > Length(str) | 視同 -1,輸出全部 | 安全上限 |
var pc: PChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; num: Integer;
procedure TForm1.FormClick(Sender: TObject);
var i, n: Integer;
begin
n := Length(pc); num := 0;
{階段一:打字機效果}
for i := 1 to n do begin
num := i; Repaint; Sleep(100); Application.ProcessMessages;
end;
num := -1;
{階段二:捲動效果}
for i := 1 to Length(pc) do begin
Inc(pc); Repaint; Sleep(100); Application.ProcessMessages;
end;
Dec(pc, n); {恢復指標}
end;
procedure TForm1.FormPaint(Sender: TObject);
var g: TGPGraphics; b: TGPBrush; font: TGPFont;
begin
g := TGPGraphics.Create(Canvas.Handle);
b := TGPSolidBrush.Create(aclGoldenrod);
font := TGPFont.Create('Arial Black', 18, FontStyleRegular);
g.DrawString(pc, num, font, MakePoint(5.0, 5), b); {關鍵:num 控制長度}
font.Free; b.Free; g.Free;
end;

StringFormat 逐字測量寬度,實現比例字體打字機numnum 控制可見字符數,其餘顯示 ★num 控制起始位置object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 42
ClientWidth = 501
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poDesktopCenter
OnClick = FormClick
OnPaint = FormPaint
PixelsPerInch = 96
TextHeight = 13
end