代码样本

procedure TForm1.Button1Click(Sender: TObject);
var
  r: Trect;
  s: String;
begin
  R := Rect(0,0, 300, 100);
  s := 'WordWrapTextOut(TargetCanvas: TCanvas; var x, y: integer; S: string; maxwidth, lineheight: integer);';
  DrawText(Canvas.Handle, PChar(s),  length(s), R, DT_WORDBREAK or DT_LEFT);
end;


我想将文字换成300px的宽度,但是如何获得新的高度?有没有办法解决?

最佳答案

如果要在绘制文本之前更新矩形,可以使用DT_CALCRECT。 DrawText然后将您的矩形修改为新的高度(如果需要,还可以设置宽度)。如果您只需要高度,则使用Andreas Rejbrand显示的返回值。

这是一个示例:

procedure TForm1.Button1Click(Sender: TObject);
var
  r: Trect;
  s: String;
begin
  R := Rect(0,0, 300, 100);
  s := 'WordWrapTextOut(TargetCanvas: TCanvas; var x, y: integer; S: string; maxwidth, lineheight: integer);';
  if DrawText(Canvas.Handle, PChar(s),  length(s), R, DT_CALCRECT or DT_WORDBREAK or DT_LEFT) <> 0 then
  begin
    DrawText(Canvas.Handle, PChar(s),  length(s), R, DT_WORDBREAK or DT_LEFT);
    r.Top := r.Bottom;
    r.Bottom := r.Bottom * 2;
    DrawText(Canvas.Handle, PChar(s),  length(s), R, DT_WORDBREAK or DT_LEFT);
  end;
end;


我建议阅读文档以获取更多详细信息:
http://msdn.microsoft.com/en-us/library/dd162498(v=vs.85).aspx

10-07 12:48