前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习笔记 :DrawText

学习笔记 :DrawText

作者头像
用户1105954
发布2018-01-12 18:00:25
1K0
发布2018-01-12 18:00:25
举报
文章被收录于专栏:mini188mini188

最近在做一个TStringGrid的自绘处理,在画文字处理上遇到了高度的计算问题。后来经过一段时间还是找到了一些方法:

1、使用TLabel

  这个方法是有点绕路的,方法倒是简单,就是使用AutoSize属于来完成。。

2、使用DrawText

  DrawText的函数定义:

函数原型 int DrawText( HDC hDC, // 设备描述表句柄 LPCTSTR lpString, // 将要绘制的字符串 int nCount, // 字符串的长度 LPRECT lpRect, // 指向矩形结构RECT的指针 UINT uFormat // 正文的绘制选项 ); 参数 hdc: [输入]设备环境句柄。 lpString: [输入]指向将被写入的字符串的指针,如果参数nCount是-1,则字符串必须是以\0结束的。 如果uFormat包含DT_MODIFYSTRING,则函数可为此字符串增加4个字符,存放字符串的缓冲区必须足够大,能容纳附加的字符。 nCount: [输入]指向字符串中的字符数。如果nCount为-1,则lpString指向的字符串被认为是以\0结束的,DrawText会自动计算字符数。 lpRect: [输入/输出]指向结构RECT的指针,其中包含文本将被置于其中的矩形的信息(按逻辑坐标)。 uFormat: [输入]指定格式化文本的方法。它可以下列值的任意组合,各值描述如下: DT_CALCRECT:这个参数比较重要,可以使DrawText函数计算出输出文本的尺寸。如果输出文本有多行,DrawText函数使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳输出文本的最后一行。如果输出文本只有一行,则DrawText函数改变矩形的右边界,以容纳下正文行的最后一个字符。出现上述任何一种情况,DrawText函数将返回格式化文本的高度,而不是绘制文本。 DT_CENTER:指定文本水平居中显示。 DT_VCENTER:指定文本垂直居中显示。该标记只在单行文本输出时有效,所以它必须与DT_SINGLELINE结合使用。 DT_SINGLELINE:单行显示文本,回车和换行符都不断行。

函数里面最后面那段蓝字标示的很重要,DT_CALCRECT就是用来计算文本尺寸的哦。。做个试验吧:

代码语言:javascript
复制
procedure TForm1.Button1Click(Sender: TObject);
var
  sData: string;
  cellRect: TRect;
begin
  cellRect.Left := 10;
  cellRect.Top := 10;
  cellRect.Right := 200;
  cellRect.Bottom := 25;
  sData := '中中国国国 大';
  DrawText(Canvas.Handle, PChar(sData), Length(sData), cellRect, DT_WORDBREAK or DT_CALCRECT);
end;//执行后没有在界面上画文本

procedure TForm1.Button2Click(Sender: TObject);
var
  sData: string;
  cellRect: TRect;
begin
  cellRect.Left := 10;
  cellRect.Top := 10;
  cellRect.Right := 200;
  cellRect.Bottom := 25;
  sData := '中中国国国 大';
  DrawText(Canvas.Handle, PChar(sData), Length(sData), cellRect, DT_WORDBREAK);
end;//执行后在界面上显示一行字

注意点:

  • 这里有一点,DrawText计算后的矩形大小还是通过cellRect来返回的哦。这个参数传入时是做为计算文本显示的矩形大小,返回时就是文本实际占用的矩形大小。
  • 同时DrawText运算后也会有函数返回值的,就是文本实际的高度。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-12-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、使用TLabel
  • 2、使用DrawText
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档