关于在Canvas的某矩形范围内输出文字的若干问题(185分)

  • 主题发起人 主题发起人 tbytby
  • 开始时间 开始时间
T

tbytby

Unregistered / Unconfirmed
GUEST, unregistred user!
1、如何在Canvas的某矩形范围内输出多行文字(要能自动换行)
2、如何判断输出的文字是否超出了矩形的范围
 
自己写代码 判断
 
判断字符穿的长度form1.Canvas.TextWidth()
如果长度大于 矩形的宽度
那么将字符穿截成2行输出
 
form1.Canvas.TextHeight()是字符穿的高度
 
参考一下TCustomLabel的DoDrawText方法吧
 
请给出具体的代码,谢谢!
如果分不够,可以再加!
 
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;
 
问题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(文字);//获得文字的高度
 
如果要自动换行就不会超出宽度,
如果要不换行就不会超出高度.

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为关键词搜索一下,得到答案应该没问题了.
 
感谢大家对第一个问题的解答。
但是请问第 二 个 问题怎么办?
 
单个文字的宽度 x 文字的数量 与 矩形框的宽度做比较了!
 
Canvas.TextRect输出文字
Canvas.TextHeight测试高度
Canvas.TextWidth测试宽度
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
927
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
781
import
I
后退
顶部