再次使用em_格式范围进行测量,请参见
EM_FORMATRANGE Message
关于MSDN:
沃帕姆
指定是否呈现
文本。如果此参数为非零
值,将呈现文本。
否则,文本将被测量。
通常,您已经有了一个目标区域,该区域具有宽度和高度,您可以在其中进行绘图,例如在纸上打印或在预定义的表面上生成预览。一个最简单的例子,一个预先定义的宽度,以获得所需的高度可以是;
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预览/打印代码…