線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1206
推到 Plurk!
推到 Facebook!

请问如何打印RichEdit中选中的部分?

尚未結案
yyu10
中階會員


發表:9
回覆:99
積分:96
註冊:2005-02-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-10 07:51:52 IP:203.14.xxx.xxx 未訂閱
只需打印选中的Text, 不用考虑Color, Font, etc. 当然, 要是都能打印出来最好, 可能很麻烦吧. Thanks. _________________________ Programming is a passion
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-10 08:02:35 IP:202.39.xxx.xxx 未訂閱
參考: 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-10 09:43:29 IP:203.14.xxx.xxx 未訂閱
刚刚测试了这段代码, 只在第一次能正确工作, 然后总是打印全部内容, 而且restart程式也没有效果, 很奇怪. _________________________ Programming is a passion
系統時間:2024-07-03 19:04:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!