我想在一个矩形区域中绘制出一些文本,当超过矩形宽度时就换行显示,这对中文是正常的,但是如果有超过显示宽度的英文串时,则不能正常绘制,请问如何解决?
程序代码如下
procedure TForm1.Button1Click(Sender: TObject);
var
  r: TRect;
begin
  r.Left := 0;
  r.Top := 0;
  r.Right := PaintBox1.Width;  
  DrawText(PaintBox1.Canvas.Handle,PAnsiChar(Memo1.Text),-1,r, DT_LEFT or DT_WORDBREAK);
end;:对于中文“这时一个测试,这是一个中文字串”,显示的结果如下:这时一个测试,这是一
个中文字串对于英文“this_is_a_long_english_string”,显示的结果如下:this_is_a_long_engli

解决方案 »

  1.   

    用#13来换行吧
    int DrawText(    HDC hDC, // handle to device context 
        LPCTSTR lpString, // pointer to string to draw 
        int nCount, // string length, in characters 
        LPRECT lpRect, // pointer to structure with formatting dimensions  
        UINT uFormat  // text-drawing flags 
       );
    uFormat选DT_WORDBREAK为自动换行
    好像是
      

  2.   

    关键是最后一个参数,设置成:
    DT_WORDBREAK,不过我想多半不行
    不过听人说:这个需要写程序来实现
    Canvas.TextWidth,求宽度,如果宽度大了,就折一行显示剩下的字符