如何在指定矩形用DrawText画出长度不定的内容,并全部显示

mabc 2003-10-15 12:37:26
RECT TheRect;
String sMess;
TheRect = Rect(10,10,50,30);
DrawText(pCanvas->Handle,sMess.c_str(),sMess.Length(),&TheRect,DT_CENTER);

//但是这样就会造成sMess内容太多时,显示不完全。

可否不管sMess的内容有多长,在指定 TheRect 里,自动缩小字体将内容全部显示出来!
是不是不应该用DrawText函数;
请指教!!最好还是要有代码!!!
...全文
80 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mabc 2003-10-16
  • 打赏
  • 举报
回复
这是我做的函数 希望对大家有用!
此函数返回适当的字体大小
最后要谢谢诸位的帮忙!!!
int __fastcall TDrawPanel::GetFontSize(int iMaxLength,String sMess)
{ //返回适当的字体
int iTmpSize; //要返回的字符大小
int iMessLength;

TCanvas *pCanvas = Image1->Canvas;
iTmpSize = iSize; //先设置为规定的大小
pCanvas->Font->Name = this->Font->Name; //字体名称要设置成一样的
pCanvas->Font->Size = iTmpSize;

iMessLength = pCanvas->TextWidth(sMess); //字符总共的长度
while(iMaxLength < iMessLength)
{
pCanvas->Font->Size = pCanvas->Font->Size -2;
iTmpSize = iTmpSize -2;
if(iTmpSize<=2) //最小字体不可以小于 2
{
break;
}
iMessLength = pCanvas->TextWidth(sMess); //字符总共的长度
}
return iTmpSize;
}
//---------------------------------------------------------------------------
Wingsun 2003-10-15
  • 打赏
  • 举报
回复
这个就需要你自己计算了,计算需要多大的字体才可以全部显示出来,设置Canvas的字体后输出。
Wingsun 2003-10-15
  • 打赏
  • 举报
回复
TCanvas::TextWidth(const AnsiString Text);
可以获得你要输出的字在当前字体情况下的宽度。
还有别的一些函数,你可以看看TCanvas的帮助。
mabc 2003-10-15
  • 打赏
  • 举报
回复
to:yjy1001(优秀得郁闷的鱼) (
这样如何能控制我的内容在指定的长度内全部显示出来了?而且不可以超界!
yjy1001 2003-10-15
  • 打赏
  • 举报
回复
当然不用drawtext啦,用canvas->textouta 或是 textout
this->Canvas->TextOut(x,y,string);
通过定义 x,y输出位置,通过设置font的大小来改变字体(大小及颜色)
this->Canvas->Font->Size=16;
this->Canvas->Font->Color=clRed;

mabc 2003-10-15
  • 打赏
  • 举报
回复
啊!!是这样的呀!!!我还以为有个什么相关的函数自动的全部显示出来了!!
那谁能告诉我字体大小之间的关系,以及一个汉字占多长长度呀?
不会让我一个一个的试,找出关系吧!晕!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧