Formatowanie textu kartkami

0

Chciałem j sformatowac tekst w richedit tak zeby mozna go było widzec jak w office albo w raportach tzn stronami i to wydrukowac.
Jak ktos sie w to bawił byłbym wdzieczny

zaspany

0

Jest z tym trochę (a moze i więcej) roboty. Musisz kontrolować wiersze RichEdita a przynajmniej pierwszy i ostatni na stronie a później drukować SelText. Podam ci źródło z torry.net które u siebie zastosowałem po pewnych przeróbkach. Jak mówię to kawałek problemu, trzeba nad tym trochę posiedzieć

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; 
0

dzieki posiedze

zaspany

1 użytkowników online, w tym zalogowanych: 0, gości: 1