再次使用EM_FORMATRANGE測量,見MSDN上:
的wParam指定是否呈現 文本。如果此參數爲非零值,則會呈現文本。 否則,文本只是測量。
通常情況下,您已經有了一個目標區域,它具有寬度和高度,您可以在其中執行繪圖,如在紙張上打印或在預定義的曲面上生成預覽。一個預定義寬度的最簡單示例可以獲得所需的高度;
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 2007 – 2010-07-14 08:00:12