gpt4 book ai didi

delphi - Delphi中如何获取RichEdit的文本范围

转载 作者:行者123 更新时间:2023-12-03 15:49:10 24 4
gpt4 key购买 nike

有谁知道如何在 TRichEdit 控件中获取文本的宽度和高度,就像在 TCanvas 上使用 TextWidth 和 TextHeight 一样?

我需要知道这样做的原因是我在不可见的表单上有一个 RichEdit,我使用 Richedit.Perform(EM_FORMATRANGE, ...) 将其内容复制到 Canvas 上。问题是 EM_FORMATRANGE 需要一个 TFormatRange 类型的参数,其中指定目标矩形,但我不知道该矩形应该是什么,因为我事先不知道 RichEdit 中内容的大小。希望这是有道理的。

最佳答案

再次使用 EM_FORMATRANGE 进行测量,参见EM_FORMATRANGE Message在 MSDN 上:

wParam Specifies whether to render the text. If this parameter is a nonzero value, the text is rendered. Otherwise, the text is just measured.

通常,您已经有了一个具有宽度和高度的目标区域,您可以在其中进行绘图,例如在纸张上打印或在预定义的表面上生成预览。预定义宽度以获得所需高度的最简单示例可能是:

var
Range: TFormatRange;
Rect: TRect;
LogX, LogY, SaveMapMode: Integer;
begin
Range.hdc := ACanvas.Handle;
Range.hdcTarget := ACanvas.Handle;

LogX := GetDeviceCaps(Range.hdc, LOGPIXELSX);
LogY := GetDeviceCaps(Range.hdc, LOGPIXELSY);

Range.rc.Left := 0;
Range.rc.Right := RichEdit1.ClientWidth * 1440 div LogX; // Any predefined width
Range.rc.Top := 0;
Range.rc.Bottom := Screen.Height * 1440 div LogY; // Some big number
Range.rcPage := Range.rc;
Range.chrg.cpMin := 0;
Range.chrg.cpMax := -1;
RichEdit1.Perform(EM_FORMATRANGE, 0, Longint(@Range));

ShowMessage(IntToStr(Range.rc.Bottom * LogY div 1440)); // Get the height
RichEdit1.Perform(EM_FORMATRANGE, 0, 0); // free cache


有关更完整的示例,请参阅 this article ,或者一般来说任何 RichEdit 预览/打印代码...

关于delphi - Delphi中如何获取RichEdit的文本范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3244139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com