当前位置:主页>仓库管理软件> 列表

关于在Canvas的某矩形范围内输出文字的若干问题 找服装生产管理软件

记账软件版1楼: 1、如何在Canvas的某矩形范围内输出多行文字(要能自动换行)
2、如何判断输出的文字是否超出了矩形的范围

2楼: 自己写代码 判断 如简单财务管理软件

3楼: 判断字符穿的长度form1.Canvas.TextWidth()
如果长度大于 矩形的宽度
那么将字符穿截成2行输出

4楼: form1.Canvas.TextHeight()是字符穿的高度

5楼: 参考一下TCustomLabel的DoDrawText方法吧

6楼: 请给出具体的代码,谢谢!
如果分不够,可以再加!

记账软件版7楼: procedure TForm1.Button1Click(Sender: TObject);
var
i, AWidth, TotalWidth, RowCharCount, ATop : integer;
ARect : TRect;
Original, NewStr, TmpStr : string;
begin
ARect.Left := 10;
ARect.Top := 10;
ARect.Right := 100;
ARect.Bottom := 1000;

Original := ''dahfdkjhaklfdhalkfhdkdasjhfkadjshfkasdhfnfakdjnfvkjdnfkahdkfljhakjsdhfkjlashfkjhasdkfjhkaljdshfkjdsashfkjsdahfkjdshfkjsadhkljhf'';
AWidth := Self.Canvas.TextWidth(''A'');
TotalWidth := ARect.Right - ARect.Left;


RowCharCount := TotalWidth div AWidth;

TmpStr := Original;

ATop := 10;
While Length(TmpStr) > 0 do
begin
NewStr := Copy(TmpStr, 1, RowCharCount);
Canvas.TextOut(10, ATop, NewStr);

ATop := ATop + 2 + Canvas.TextHeight(''A'');
TmpStr := Copy(TmpStr, (RowCharCount + 1), MaxInt);
end;
end;

8楼: 问题1:
var
ShowCaption:String;
TempRect:TRect;
begin
ShowCaption := ''可以写的长一些'';
TempRect:=RECT(0,0,20,100); //写在这个范围里面
DrawText(img1.Canvas.Handle,
PChar(ShowCaption),-1,TempRect,DT_LEFT or DT_WORDBREAK);
//DT_LEFT靠左边写, DT_WORDBREAK些不下的话换行
end;

问题2:
img1.Canvas.TextWidth(文字);//获得问题的宽度
img1.Canvas.TextHeight(文字);//获得文字的高度

9楼: 如果要自动换行就不会超出宽度,
如果要不换行就不会超出高度.

DrawText(img1.Canvas.Handle,
PChar(ShowCaption),-1,TempRect,DT_LEFT or DT_WORDBREAK);
有个DT_CALCRECT标志,加上这个标志,当同时含 DT_WORDBREAK,就会得到以给定TempRect宽度输出时,需要的矩形高度.如果不含WORDBREAK,也就是单行输出时,会给出TempRect所需的宽度,加入DT_CALCRECT后并不会实际输出文字,根据计算出的TempRect,在第二次DrawText时去掉DT_CALCRECT,就会把文字输出在TempRect内了.

看看DrawText的API帮助,再在论坛的离线数据库里以DrawText为关键词搜索一下,得到答案应该没问题了.

10楼: 感谢大家对第一个问题的解答。
但是请问第 二 个 问题怎么办?

11楼: 单个文字的宽度 x 文字的数量 与 矩形框的宽度做比较了!

12楼: Canvas.TextRect输出文字
Canvas.TextHeight测试高度
Canvas.TextWidth测试宽度 如服装生产管理软件

13楼: 谢谢