BCB 中测量Richedit 的文本总行高
RICHEDIT 富文本控件可以容纳各种字体,那么如果我们想要知道文本的总行高如何做呢?
比如,我们想判断,richedit中的文本内容有没有超出richedit 的范围,如何实现呢?
1,需要使用EM_FORMATRANGE 消息 http://msdn.microsoft.com/en-us/library/bb788020%28VS.85%29.aspx
2,实现的代码如下:(下面是BCB 的实现,stackoverflow上有delphi的实现
http://stackoverflow.com/questions/3244139/how-to-get-text-extent-of-richedit-in-delphi)
//--------------------------------------------------------------------------- #include <vcl.h>
#pragma hdrstop #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
RichEdit1->Text = RichEdit1->Text.TrimRight();
int LogX,LogY;
HDC richdc = GetDC(RichEdit1->Handle);
LogX = GetDeviceCaps(richdc, LOGPIXELSX);
LogY = GetDeviceCaps(richdc, LOGPIXELSY); FORMATRANGE formatrange = {};
formatrange.hdc = richdc;
formatrange.hdcTarget = richdc;
formatrange.rc.left = ;
formatrange.rc.top = ;
formatrange.rc.right = RichEdit1->ClientWidth * / LogX;
formatrange.rc.bottom= Screen->Height* / LogY;
formatrange.rcPage = formatrange.rc;
formatrange.chrg.cpMin = ;
formatrange.chrg.cpMax = -;
RichEdit1->Perform(EM_FORMATRANGE,,(long)&formatrange);
int totalHeight = formatrange.rc.bottom * LogY / ;
ShowMessage("文本总高度"+IntToStr(formatrange.rc.bottom * LogY / ));
RichEdit1->Perform(EM_FORMATRANGE,,NULL);//free the cache if (totalHeight > (RichEdit1->ClientHeight+))
{
ShowMessage("文字超出范围!");
} ReleaseDC(RichEdit1->Handle,richdc);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
RichEdit1->Font->Size++;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
RichEdit1->Font->Size--;
}
//---------------------------------------------------------------------------
BCB 中测量Richedit 的文本总行高的更多相关文章
- BCB中获得RichEdit 默认行间距
首先,这些功能支持RichEdit2.0 以上功能: 其次,用常规的方法是无法获得LineSpace 的: 你使用 EM_GETPARAFORMAT也得不到,你会发现dyLineSpacing 的值永 ...
- sql server中如何查看执行效率不高的语句
sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考. 在测量功能时,先以下命令清除sql se ...
- css中的字体及文本相关属性
css中的字体及文本相关属性 1.字体相关属性 字体主要可以设置color.font-family.font-size.font-size-adjust.font-stretch.font-style ...
- BCB中AnsiString类方法小结
AnsiString类是BCB中最常见类之一,了解它对以后深入学习BCB大有帮助. 介绍AnsiString类之前,先要介绍一些背景知识.VCL(Visual Component Library 可视 ...
- 浅谈android中只使用一个TextView实现高仿京东,淘宝各种倒计时
今天给大家带来的是只使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.近期公司一直加班也没来得及时间去整理,今天难得歇息想把这个分享给大家.只求共同学习,以及自己兴许 ...
- [SQL] sql server中如何查看执行效率不高的语句
sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考.在测量功能时,先以下命令清除sql serve ...
- C# 在word中查找及替换文本
C# 在word中查找及替换文本 在处理word文档时,很多人都会用到查找和替换功能.尤其是在处理庞大的word文档的时候,Microsoft word的查找替换功能就变得尤为重要,它不仅能让我们轻易 ...
- 教你一招:在PowerPoint中自定义可输入文本的占位符
日常生活中,当我们设计多媒体课件时,默认的版式其实已经够用了.但是,很多时候,我们需要更加个性一点,所以,我们需要自定义很多东西.本文介绍在PowerPoint中自定义可输入文本的占位符. 一.占位符 ...
- MFC 编辑框中字体大小改变,行高不能改变,只能显示一半的问题,已解决。
CKagulaCEdit是CEdit的一个继承类,m_edit的CKagulaCEdit类型的一个变量 调用的时候,是这样的: 编辑框中字体大小改变,行高不能改变,只能显示一半的问题,问题如下: 这时 ...
随机推荐
- Using python to process Big Data
Pandas is a great lib to process BIg Data. 1) pandas.pivot_table(data,values=None,columns=None,aggfu ...
- xmind的第八天笔记
- 16年青岛网络赛 1002 Cure
题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1002&cid=723 Cure Time Limit: 30 ...
- pod install报错问题解决
pod installwarning: Insecure world writable dir /usr/local/bin in PATH, mode 040777报错后就不进行了.查stackov ...
- php部分---创建连接数据库类
class DBDA { public $host="localhost"; public $uid="root"; public $pwd="123 ...
- i++; 与 ++i;的内部区别。
对于一个用前置自加和后置自加的效果相同的地方,我们应该用哪个呢? 例: for(point i = 0; i != N; ?): 上面for语句中的“?”处,你会在那里写i++还是++i呢? 前置++ ...
- Flume1.5.0的安装、部署、简单应用(含伪分布式、与hadoop2.2.0、hbase0.96的案例)
目录: 一.什么是Flume? 1)flume的特点 2)flume的可靠性 3)flume的可恢复性 4)flume 的 一些核心概念 二.flume的官方网站在哪里? 三.在哪里下载? 四.如何安 ...
- 一加3,CM13蓝牙共享互联网 无效。
一加3准备把4G网络共享给魅族PRO5. 但在一加3的蓝牙设置里怎么勾选都无用. 最后发现在要在PRO5上设置才行. 1.在蓝牙列表中,点击带圈的感叹号. 2.选择“互联网访问”. - --
- 圆形的Volley.NetworkImageView控件的实现
github上有个开源项目CircleImageView,可以简单的实现一个圆形的ImageView,就像qq头像那样. NetworkImageView是volley中的一个组件,可以方便的加载网络 ...
- server application error应用错误
本地使用IIS测试ASP脚本网页,结果发现提示[Server Application Error The server has encountered an error while loading a ...