再度 EM_FORMATRANGE を使用して測定します。MSDNのEM_FORMATRANGE メッセージを参照してください。
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
より完全な例については、この記事、または一般的に RichEdit のプレビュー/印刷コードを参照してください。