Распечатать только выделенный в TRichEdit текстDelphi , ОС и Железо , Принтеры и ПечатьРаспечатать только выделенный в TRichEdit текст
Оформил: DeeCo 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; { The richedit1.perform( EM_FORMATRANGE call returns the index of the last character that could be fitted into the passed fmtrange.rc, + 1. So if multiple pages are required one repeats with fmtrange.chrg.cpMin set to this value, until all characters have been printed. } Программный код на Delphi, который печатает выбранное текстовое содержимое RichEdit-контрола (richedit1) в принтер. Вот что происходит:
Чтобы только печатать выделенное текстовое содержимое RichEdit-контрола, вы можете модифицировать код следующим образом:
В этом модифицированном варианте процедура проверяет, есть ли выбор в RichEdit-контроле перед попыткой его печати. Если нет выбора, код просто выходит без выполнения каких-либо действий. Также можно добавить обработку ошибок и журналирование для обеспечения успешного завершения процесса печати или предоставления meaningful feedback о любых встреченных ошибках при печати. Распечатать только выделенный текст в RichEdit компоненте на принтере с учётом параметров форматирования и отступов. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Принтеры и Печать ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |