日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BCB中获得RichEdit 默认行间距

發布時間:2025/7/14 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BCB中获得RichEdit 默认行间距 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,這些功能支持RichEdit2.0 以上功能;

其次,用常規的方法是無法獲得LineSpace 的;

  • 你使用 EM_GETPARAFORMAT也得不到,你會發現dyLineSpacing 的值永遠是0
  • 你先EM_SETPARAFORMAT ,指定 bLineSpacingRule = 4,再用GETPARAFORMAT 去取dyLineSpacing 同樣是0

也許RichEdit的作者有辦法。

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/f67f6416-eab3-4aee-bfcc-85b9f26fde39/rich-edit-control-line-height

下面是richedit 作者的blog

https://blogs.msdn.microsoft.com/murrays/2010/01/12/richedit-versions-1-0-through-3-0/#comment-12105

下面是我的解決辦法。

我發現了一個規律,當用EM_SETPARAFORMAT ,改變行間距的時候。整體文本區域的高度也改變了。

?

代碼如下

//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop#include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1;static int LineSpace = 400; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) { } //---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) {RichEdit1->SelectAll();PARAFORMAT2 Para;Para.cbSize = sizeof(Para);Para.dwMask = PFM_LINESPACING;Para.bLineSpacingRule = 4;Para.dyLineSpacing = LineSpace;SendMessage(RichEdit1->Handle, EM_SETPARAFORMAT, 0, LPARAM(&Para)); } //---------------------------------------------------------------------------

由此我們得到啟發,如果我們1開始,制定LinSpace 是1,然后逐漸累加。

當,文本區域的高度和默認文本高度相同時,是不是就得到,LineSpace 對應的值了呢?

問題1,如何得到文本區域的高度?? 看我的另一個博客 http://www.cnblogs.com/songr/p/5485187.html

問題2,計算,這個超級簡單;

下面是實現代碼

//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop#include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1;static int LineSpace = 400; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) { } //---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) {RichEdit1->SelectAll();PARAFORMAT2 Para;Para.cbSize = sizeof(Para);Para.dwMask = PFM_LINESPACING;Para.bLineSpacingRule = 4;Para.dyLineSpacing = LineSpace;SendMessage(RichEdit1->Handle, EM_SETPARAFORMAT, 0, LPARAM(&Para)); } //---------------------------------------------------------------------------int TForm1::getTextAreaHeight() {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;RichEdit1->Perform(EM_FORMATRANGE,0,NULL);ReleaseDC(RichEdit1->Handle,richdc);return totalHeight; }void __fastcall TForm1::Button2Click(TObject *Sender) { //首先將RichEdit 設置成默認Single spacingRichEdit1->SelectAll();PARAFORMAT2 Para;Para.cbSize = sizeof(Para);Para.dwMask = PFM_LINESPACING;Para.bLineSpacingRule = 0;SendMessage(RichEdit1->Handle, EM_SETPARAFORMAT, 0, LPARAM(&Para)); //得到默認情況下的文本區域高度int defTextAreaHeight = getTextAreaHeight();int i = 0;do{ //不停的改變行間距,直到文本區域高度和默認情況下相同i++;PARAFORMAT2 Para;Para.cbSize = sizeof(Para);Para.dwMask = PFM_LINESPACING;Para.bLineSpacingRule = 4;Para.dyLineSpacing = i;SendMessage(RichEdit1->Handle, EM_SETPARAFORMAT, 0, LPARAM(&Para));}while (defTextAreaHeight != getTextAreaHeight());ShowMessage(IntToStr(i)); } //---------------------------------------------------------------------------

?

說明,當累加到 278 的時候,文本區域的高度相同了。也就是說,278 是,默認行高的基準線。

有了這個基準線之后。我就可以用這個278 作為,我們計算行高的基礎值了。(例如,減少行高時,不能小于這個值。)

?

轉載于:https://www.cnblogs.com/songr/p/5633234.html

總結

以上是生活随笔為你收集整理的BCB中获得RichEdit 默认行间距的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。