日韩性视频-久久久蜜桃-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 默认行间距的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲国产亚洲 | 亚洲大尺度在线 | 熟女肥臀白浆大屁股一区二区 | 日韩黄色短视频 | 久久久久久久久久久久久久久久久久久久 | 国产亚洲黄色片 | 国产一区视频在线播放 | 中文字幕3区 | 亚洲aa在线 | 99av视频| 高潮av在线| h在线观看视频 | 亚洲综合在 | 麻豆人妻少妇精品无码专区 | 亚洲自拍网站 | 日韩欧美一级片 | 91干| 中文字幕一区二区三区乱码在线 | 亚洲一区二区福利 | 性一交一乱一色一免费无遮挡 | 青草视频免费在线观看 | 婷婷激情五月综合 | 免费国产视频在线观看 | 欧美少妇一区二区三区 | 99er久久| 精品人妻伦一二三区久 | 亚洲欧美一区二区三区孕妇 | 黄色小视频免费网站 | 日韩免费成人av | 岛国中文字幕 | 欧美成人精品在线观看 | 欧美一区二区久久久 | 一级欧美一级日韩 | 天堂а√在线最新版中文在线 | 日本免费网站视频 | 日本午夜在线视频 | 成人在线影片 | 国产激情一区二区三区在线观看 | 亚洲在线日韩 | 日韩一级一区 | 一区二区三区视频在线观看免费 | 欧美精品久久久久久久免费 | 日本熟妇一区二区三区 | 国语一区 | 日韩中文av在线 | 日本私人影院 | 五月丁香花 | 蜜桃精品噜噜噜成人av | 操女网站 | 少妇又色又爽 | 久久久综合色 | 成人免费做受小说 | 亚洲AV无码一区二区伊人久久 | 69精品在线观看 | 69av视频在线观看 | 在线你懂的 | 蜜桃tv一区二区三区 | 污污视频在线观看免费 | 日日拍拍 | 日本一区二区三区久久 | 欧美日韩精品在线观看 | 日韩三级视频在线观看 | 91精品国产色综合久久不卡粉嫩 | 国产成人无码一区二区在线观看 | 玖玖在线资源 | 手机av在线看 | 诱惑の诱惑筱田优在线播放 | 国产欧美在线视频 | 亚洲精品久久一区二区三区777 | 国产永久精品大片wwwapp | 欧美人与动牲交xxxxbbbb | 成人网免费看 | 日韩亚洲影院 | 欧美资源网 | 欧美r级在线 | www性欧美 | 欧美a性 | 激情综合文学 | 丰满熟妇人妻av无码区 | 国产伦精品一区二区三区在线 | 91九色精品 | 麻豆免费观看网站 | 国产亚洲精品久久久久婷婷瑜伽 | 天堂网在线播放 | 欧美老女人xx | 亚洲国产精品网站 | 亚洲国产一区二区三区在线观看 | 一区二区三区视频观看 | 国产午夜精品在线 | 亚洲福利小视频 | 黄色一级视频免费 | 无人在线观看的免费高清视频 | 亚洲av无码国产在丝袜线观看 | 亚洲一区二区在线视频 | 欧美不卡视频 | 九九视频免费 | 少妇久久久久久被弄高潮 | 欧美午夜精品久久久久久孕妇 | 日本成人一区二区 |