- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 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;  
 

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -