Forum
Grundkurs
»Introduktion
»Snabbguide
»Komponenter
»Händelser
»Strängar
»Räkna med Delphi »Egna
typer
»Selektion
»Iteration
»Menyer
»Funktioner
»Arraystrukturer
Tips & Tricks
»Nya tips
»Blandat
»Databaser
»Filer
»Forms
»Grafik
»Internet
»Komponenter
»Matematik
»Multimedia
»Objekt/ActiveX
»Skrivare
»Strängar
»System
»Mest lästa tips
Artiklar
»Delphi och ADO
»Bygga en DLL
»Skapa en enkel rapport
»Hantera registret
»Enheter, units
»Klassen TCanvas
»Använd LookUp Controls
Nya
tips
Lägg
till tips
Delphilänkar
Gästbok
|
|
|
|
Skriv endast ut markerad text
|
Kategori: Skrivare
Inlagt: 2004-01-19
Läst: 1412
Inlagt av: Staffan Berg
|
Beskrivning |
Här används Printerobjektet för att skriva ut endast markerad text i en TRichEditkontroll.
|
Kod |
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;
|
|
|