请问如何打印RichEdit中选中的部分? |
尚未結案
|
yyu10
中階會員 發表:9 回覆:99 積分:96 註冊:2005-02-18 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
參考:
http://groups.google.com.tw/groups?hl=zh-TW&lr=&client=firefox-a&rls=org.mozilla:zh-TW:official&th=4f050abc76e1830c&rnum=2
procedure TForm1.Button2Click(Sender: TObject); Var printarea: Trect; x, y: Integer; richedit_outputarea: TRect; printresX, printresY: Integer; fmtRange: TFormatRange; Begin Printer.beginDoc; try With Printer.Canvas Do Begin printresX := GetDeviceCaps( handle, LOGPIXELSX ); printresY := GetDeviceCaps( handle, LOGPIXELSY ); Font.Name := 'Arial'; Font.Size := 14; Font.Style := [fsBold]; printarea := Rect( printresX, // 1 inch left margin printresY * 3 div 2, // 1.5 inch top margin Printer.PageWidth - printresX, // 1 inch right margin Printer.PageHeight - printresY * 3 div 2 // 1.5 inch bottom margin ); x := printarea.left; y := printarea.top; TextOut( x, y, 'A TRichEdit print example' ); y := y TextHeight('Ag'); Moveto( x, y ); Pen.Width := printresY div 72; // 1 point Pen.Style := psSolid; Pen.Color := clBlack; LineTo( printarea.Right, y ); Inc( y, printresY * 5 div 72 ); // Define a rectangle for the rich edit text. The height is set to the // maximum. But we need to convert from device units to twips, // 1 twip = 1/1440 inch or 1/20 point. richedit_outputarea := Rect( (printarea.left 2) * 1440 div printresX, y * 1440 div printresY, (printarea.right-4) * 1440 div printresX, (printarea.bottom)* 1440 div printresY ); // Tell rich edit to format its text to the printer. First set // up data record for message: fmtRange.hDC := Handle; // printer canvas handle fmtRange.hdcTarget := Handle; // ditto fmtRange.rc := richedit_outputarea; fmtRange.rcPage := Rect( 0, 0, Printer.PageWidth * 1440 div printresX, Printer.PageHeight * 1440 div printresY ); // the following lines select the text to print, in this case // the complete content of the rich edit control. fmtRange.chrg.cpMin := 0; fmtRange.chrg.cpMax := richedit1.GetTextLen-1; // first measure the text, to find out how high the format rectangle // will be. The call sets fmtrange.rc.bottom to the actual height // required, if all characters in the selected range will fit into // a smaller rectangle, richedit1.Perform( EM_FORMATRANGE, 0, Longint(@fmtRange)); // Draw a rectangle around the format rectangle Pen.Width := printresY div 144; // 0.5 points Brush.Style := bsClear; Rectangle( printarea.Left, y - 2, printarea.right, fmtrange.rc.bottom * printresY div 1440 2 ); // Now render the text richedit1.Perform( EM_FORMATRANGE, 1, Longint(@fmtRange)); // and print it richedit1.Perform( EM_DISPLAYBAND, 0, Longint( @fmtRange.rc )); y := fmtrange.rc.bottom * printresY div 1440 printresY * 5 div 72; // Free cached information richedit1.Perform( EM_FORMATRANGE, 0, 0); TextOut( x, y, 'End of example.' ); End; finally Printer.EndDoc; end; end;-- |
yyu10
中階會員 發表:9 回覆:99 積分:96 註冊:2005-02-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |