我想在一个矩形区域中绘制出一些文本,当超过矩形宽度时就换行显示,这对中文是正常的,但是如果有超过显示宽度的英文串时,则不能正常绘制,请问如何解决?
程序代码如下
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
程序代码如下
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
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为自动换行
好像是
DT_WORDBREAK,不过我想多半不行
不过听人说:这个需要写程序来实现
Canvas.TextWidth,求宽度,如果宽度大了,就折一行显示剩下的字符