如何在指定矩形用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函数;
请指教!!最好还是要有代码!!!
...全文
138 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
  • 打赏
  • 举报
回复
啊!!是这样的呀!!!我还以为有个什么相关的函数自动的全部显示出来了!!
那谁能告诉我字体大小之间的关系,以及一个汉字占多长长度呀?
不会让我一个一个的试,找出关系吧!晕!
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

13,872

社区成员

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

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