有难度的问题(100分)

  • 主题发起人 主题发起人 alei_nb
  • 开始时间 开始时间
A

alei_nb

Unregistered / Unconfirmed
GUEST, unregistred user!
已知一个区域 rect 和一个字符串
要将这个字符串画到这个rect有什么办法
我主要是设置canvas的字体大小上有麻烦
我用 字的size=rect的width/字的个数
好象这个size偏小???
有什么办法???
 
看看设一下字的font name属性有没有关系.英文设置中文的字的大小好象都有些问题.
 
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;
 
已知RECT,设置字体大小,不能完全保证二者充分吻合;
给定字串,放在限制RECT里是可以的。
var
p :PChar;
pt :TSize;
S :String;
rect :TRect;
begin
S :='ilovedelphi';
GetMem(p,Length(S)+1);
StrPCopy(p,S);
GetTextExtentPoint32(Canvas.Handle,p,Length(S),pt);
rect.Left :=0;
rect.Top :=0;
rect.Right :=pt.cx;
rect.Bottom :=pt.cy;
Canvas.TextRect(rect,0,0,S);
end;
 
qq:71892967
 
接受答案了.
 
后退
顶部