procedure TForm1.Button1Click(Sender: TObject);
var
lf : TLogFont;
tf : TFont;
R, R1: TRect;
begin
R := Rect(20, 20, 400, 280); // 已知Rect
SetBkMode(Canvas.Handle, Transparent);
Canvas.Font.Height := 100; // 假定
Canvas.Font.Name := '宋体';
tf := TFont.Create;
tf.Assign(Canvas.Font);
GetObject(tf.Handle, sizeof(lf), @lf);
lf.lfEscapement := 0;
lf.lfOrientation := 0;
lf.lfWidth := 10; // 假定
tf.Handle := CreateFontIndirect(lf);
Canvas.Font.Assign(tf);
BeginPath(Canvas.Handle);
Canvas.TextOut(0, 0, '有难度的问题');
EndPath(Canvas.Handle);
GetRgnBox(PathToRegion(Canvas.Handle), R1);
Canvas.Font.Height := trunc((R.Bottom - R.Top) * 100 / (R1.Bottom - R1.Top));
tf.Assign(Canvas.Font);
GetObject(tf.Handle, sizeof(lf), @lf);
lf.lfWidth := trunc((R.Right - R.Left) * 10 / (R1.Right - R1.Left))-1;
tf.Handle := CreateFontIndirect(lf);
Canvas.Font.Assign(tf);
tf.Free;
Canvas.TextOut(R.Left - R1.Left, R.Top - R1.Top, '有难度的问题');
end;