Announcement

Collapse
No announcement yet.

Markierter Teil eines Dokumentes drucken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Markierter Teil eines Dokumentes drucken

    Hallo an alle,

    kann mir jemand mitteilen wie ich nur den markierten Teil eines Dokumentes (RichEdit) drucken kann.

    Vielen Dank

  • #2
    Schau Dir mal das TPrinter-Object an. Das hat einen Canvas, dort kannst Du mit TextOut Deinen Text drucken

    Comment


    • #3
      Hallo Bodo,

      danke für den Tip. Mit Canvas.TextOut kann ich zwar die Ausgabeposition festlegen und einen String übergeben. Ich habe aber in dem RichEdit formatierter Text und mehrere Zeilen. Wie packe ich das an? Gibt es irgendwo ein Beispiel? Habe auch bei Tante Google nichts gefunden

      Comment


      • #4
        Idee:
        Markierten Text in eine temporär für den Druck angelegtes RichEdit kopieren und dieses RichEdit drucken.
        //
        RichEdit_temp.SelText:= RichEdit.SelText;
        RichEdit_temp.print

        Comment


        • #5
          Hallo Dietmar

          vieleicht hilft das.
          Habe es schon sebst ausprobiert.

          Gruß Egon


          uses
          Richedit;

          procedure TForm1.Button1Click(Sender: TObject);
          var
          printarea: TRect;
          richedit_outputarea: TRect;
          printresX, printresY: Integer;
          fmtRange: TFormatRange;
          nextChar: Integer;
          S: string;
          begin
          Printer.BeginDoc;
          try
          with Printer.Canvas do
          begin
          printresX := GetDeviceCaps(Handle, LOGPIXELSX);
          printresY := GetDeviceCaps(Handle, LOGPIXELSY);
          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);
          // 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 * 1440 div printresX,
          printarea.Top * 1440 div printresY,
          printarea.Right * 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 handle
          fmtRange.hdcTarget := Handle; // ditto
          fmtRange.rc := richedit_outputarea;
          fmtRange.rcPage := Rect(0, 0,
          Printer.PageWidth * 1440 div printresX,
          Printer.PageHeight * 1440 div printresY);
          // set range of characters to print to selection
          fmtRange.chrg.cpMin := richedit1.selstart;
          fmtRange.chrg.cpMax := richedit1.selStart + richedit1.sellength - 1;

          // remove characters that need not be printed from end of
          selection.
          // failing to do so screws up the repeat loop below.
          S := Richedit1.SelText;
          while (fmtRange.chrg.cpMax > 0) and
          (S[fmtRange.chrg.cpMax] <= ' ') do Dec(fmtRange.chrg.cpMax);

          repeat
          // Render the text
          nextChar := richedit1.Perform(EM_FORMATRANGE, 1, Longint(@fmtRange));
          if nextchar < fmtRange.chrg.cpMax then
          begin
          // more text to print
          printer.newPage;
          fmtRange.chrg.cpMin := nextChar;
          end; { If }
          until nextchar >= fmtRange.chrg.cpMax;

          // Free cached information
          Richedit1.Perform(EM_FORMATRANGE, 0, 0);
          end;
          finally
          Printer.EndDoc;
          end;
          end;

          Comment

          Working...
          X