zoukankan      html  css  js  c++  java
  • 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 = {0};
        formatrange.hdc = richdc;
        formatrange.hdcTarget = richdc;
        formatrange.rc.left = 0;
        formatrange.rc.top  = 0;
        formatrange.rc.right = RichEdit1->ClientWidth * 1440 / LogX;
        formatrange.rc.bottom= Screen->Height* 1440 / LogY;
        formatrange.rcPage = formatrange.rc;
        formatrange.chrg.cpMin = 0;
        formatrange.chrg.cpMax = -1;
        RichEdit1->Perform(EM_FORMATRANGE,0,(long)&formatrange);
        int totalHeight = formatrange.rc.bottom * LogY / 1440;
        ShowMessage("文本总高度"+IntToStr(formatrange.rc.bottom * LogY / 1440));
        RichEdit1->Perform(EM_FORMATRANGE,0,NULL);//free the cache
    
        if (totalHeight > (RichEdit1->ClientHeight+3))
        {
            ShowMessage("文字超出范围!");
        }

    ReleaseDC(RichEdit1->Handle,richdc); }
    //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { RichEdit1->Font->Size++; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { RichEdit1->Font->Size--; } //---------------------------------------------------------------------------
  • 相关阅读:
    洛谷 1842 [USACO05NOV]奶牛玩杂技【贪心】
    洛谷 1757 通天之分组背包【分组背包】
    洛谷 1330 封锁阳光大学
    洛谷 1019 单词接龙
    【模板】CDQ分治
    BZOJ 2734 洛谷 3226 [HNOI2012]集合选数【状压DP】【思维题】
    BZOJ 2457 [BeiJing2011]双端队列
    洛谷 2015 二叉苹果树
    牛客网 牛可乐发红包脱单ACM赛 C题 区区区间间间
    牛客网 牛可乐发红包脱单ACM赛 B题 小a的旅行计划
  • 原文地址:https://www.cnblogs.com/songr/p/5485187.html
Copyright © 2011-2022 走看看