Mulți dezvoltatori se confruntă cu necesitatea de a organiza imprimarea de la aplicarea documentelor text sau grafice. Mediul de dezvoltare Delphi oferă un instrument ușor de utilizat și eficient pentru rezolvarea acestei probleme.
Mecanismul de imprimare este conținut într-un modul special de imprimante. PAS. Este suficient să o adăugați la secțiunea utilizări a aplicației și programul dvs. este gata de interacțiune cu imprimanta. Pentru a organiza tipărirea în cod sursă, se utilizează clasa Tprinter ale cărei proprietăți și metode oferă acces la imprimantele instalate în sistem.
Utilizând această clasă, programatorul poate imprima în aplicația sa nu numai texte, ci și imagini bitmap și elemente grafice.
Puteți configura imprimanta utilizând o componentă specială din dialogul de setări standard al imprimantei VCL
Acest capitol acoperă următoarele subiecte:
- proprietățile și metodele clasei Tprinter;
- programarea tipăririi textului și a listelor de linii;
- programarea tipăririi imaginilor raster și a elementelor grafice arbitrare;
- Cum se imprimă o imagine de formă fără ajutorul clasei Tprinter.
Tabelul 9.1 Proprietăți și metode de clasificare a claselor
Inițializează imprimarea de pe o pagină nouă. Valoarea proprietății PageNumber este mărită cu una
Atragem atenția cititorului asupra faptului că majoritatea proprietăților (Fonturi, Mâner, PageWidth, PageHeight, Aborted, Printing, Capabilities, etc.) sunt doar pentru citire.
Pentru a crea și a accesa o instanță a clasei TPrinter, este utilizată funcția declarată în modulul Imprimante
funcție Printer: TPrinter;
Returnează un pointer instanței create a clasei.
După cum puteți vedea din Tabelul 9.1, clasa TPrinter nu numai că oferă acces la parametrii imprimantei curente, ci creează și o listă indexată de imprimante cu numele tuturor imprimantelor de imprimante disponibile. Orice imprimantă din listă poate fi activată utilizând proprietatea printerindex.
Gestionarea imprimării este efectuată utilizând metodele Abort, BeginDoc, EndDoc și NewPage descrise în tabel. Un rol foarte important îl are proprietatea panzei, care este panza imprimantei (vezi capitolul 8). Cu ajutorul acestuia, imprimanta poate fi utilizată pentru a desena sau a extrage texte în același mod ca formele sau orice alte componente care au o schiță.
Din punctul de vedere al programatorului, cel mai simplu mod de a imprima text de la aplicațiile Delphi nu sa schimbat de la versiunile anterioare ale Turbo Pascal. Pentru imprimare, utilizați procedurile de scriere și scriere, care atribuie o imprimantă ca dispozitiv de ieșire.
Rezolvăm cea mai simplă sarcină - tipăriți o expresie sacramentală "Bună ziua, imprimanta!" Pe imprimantă. (care este o tradiție). Pentru aceasta, creați o aplicație de consolă (element de meniu Fișier / Nou) și adăugați următorul cod sursă (nu uitați să adăugați modulul Imprimante la secțiunea utilizări):
utilizează SysUtils, Printers;
var FPrint: TextFile;
Procedura Assignprn din modulul imprimante asociază o variabilă de fișier text cu imprimanta de sistem curentă și creează un buffer de ieșire în memorie. Instrucțiunea Rewrite deschide dispozitivul de ieșire. Procedura Writein imprimă o linie și traduce poziția de imprimare pe o linie nouă (Procedura de scriere nu face salt la o linie nouă, spre deosebire de Writein). În cele din urmă, procedura CloseFile completează imprimarea și rupe legătura dintre variabila fișierului și imprimantă (a se vedea Figura 9.1).
Fig. 9.1 Forma principală a proiectului DemoPrint
Într-o instrucțiune de scriere sau scriere, puteți afișa mai multe valori de diferite tipuri - întregi, variabile cu puncte variabile etc. Pentru această valoare sau variabilele sunt separate prin virgule.
În plus, variabilele de ieșire pot fi șiruri de text ale obiectelor TSrings și TStringList.
De exemplu, luați în considerare un mic proiect DemoPrint. În acesta, utilizând dialogul de deschidere a fișierului, fișierul dorit este selectat. În funcție de starea grupului radio RadioGrp, ieșirea fișierului este trimisă pe ecran în componenta TMT sau direct la imprimantă.
Când se face clic pe butonul printBtn, conținutul componentei tmeto este trimis către imprimantă (consultați Lista 9.1).
Listing 9.1.Modul de implementare al modulului principal al proiectului DemoPrint
implementarea folosește imprimante;
var FileTxt, PrintTxt: TextFile;
pentru i: = 0 pentru Memol.Lines.Count -1 do Writeln (PrintTxt, Memol.Lines [i]);
procedura TMainForrn.RadioGrpClick (expeditor: TObject);
începe PrintBtn.Enabled: = RadioGrp.Itemlndex = 0;
Metoda Handler PrintBtnClick imprimă linii din componenta TMeto. Pentru a face acest lucru, fiecare linie din lista indexată de linii (proprietatea Liniile) este imprimată cu procedura de scriere. Variabila fișierului Fprint este setată la imprimanta curentă.
Metoda Handler RadioGrpciick dezactivează butonul de imprimare a fișierelor când dispozitivul de ieșire este comutat la imprimantă.
Pentru a controla imprimarea, puteți utiliza următoarele caractere de control:
Scrieți (FPrint, 'După această linie, va apărea o nouă linie', # 10, # 13);
Writein (FPrint, 'După această linie, rularea paginii este activată,' ^ L);
Când se tipărește un fișier text, fontul implicit este dimensiunea sistemului 10. Pentru a schimba parametrii fontului (inclusiv în momentul tipăririi), se utilizează proprietatea canvas a obiectului imprimantei. Aceasta ar putea arăta astfel:
cu Printer.Canvas.Font do
Când se imprimă grafică, se folosește proprietatea canvas a tipului TCanvas dintr-o instanță a clasei Tprinter din modulul imprimante. Clasa canvas are un set bogat de capabilități pentru afișarea diferitelor elemente grafice și a imaginilor bitmap. Detalii despre proprietățile și metodele panzei sunt discutate în Capitolul 8, astfel încât cititorul interesat se poate referi la acesta, dar aici ne vom concentra doar asupra caracteristicilor graficii tipografice.
Caracteristicile implementării procesului de transfer al graficii de la pânză la imprimantă sunt ascunse de dezvoltator. Pentru a asigura imprimarea, trebuie să faceți următoarele:
- Pentru a începe imprimarea, se folosește metoda BeginDoc.
- Folosind proprietățile și metodele din clasa TCanvas, o instanță din care pentru imprimanta curentă este disponibilă în proprietatea canvas, este creat un grafic desenat. Când apelați metode, elementele grafice corespunzătoare sunt trimise pentru imprimare.
- EndDoc este chemat să finalizeze imprimarea.
Rețineți că imprimanta nu poate fi accesată până când începe imprimarea. În caz contrar, apare o eroare de execuție.
Când transferați conținutul panzei pe o foaie de hârtie, tipul de copie imprimată depinde în mare măsură de setările imprimantei. Prin urmare, înainte de imprimare, este de dorit să verificați mărimea imaginii și, dacă este necesar, să o scalați. Este efectuată nu numai cu imagini prea mari, dar și dacă este necesar pentru a mări o imagine mică la dimensiunea foii.
Dimensiunea hârtiei pentru imprimanta curentă este determinată de proprietățile PageHeight și PageWidth ale clasei TPrinter.
În plus, calitatea reprezentării grafice (rezoluția) pentru ecran și pentru imprimantă poate varia semnificativ. Rezoluția actuală a imprimantei poate fi recunoscută utilizând funcția Windows API GetDeviceCaps, care returnează valorile scării orizontale și verticale corespunzătoare numărului de pixeli logici pe inch pentru imprimanta implicită.
Exemple de cod de implementare pentru imprimarea grafică sunt prezentate mai jos.
Imprimarea imaginilor Bitmap
Pentru a imprima o imagine bitmap, trebuie să o încărcați într-o instanță a clasei TBitmap sau a succesorului său. Cea mai ușoară modalitate de a utiliza componenta Timage în aplicație sau un obiect de tip TBitmap, creată independent. Apoi, imaginea este transferată pe panza imprimantei folosind metode standard, iar clasa TPrinter asigură imprimarea acesteia.
De exemplu, printarea unei imagini în centrul paginii fără a schimba scara poate fi implementată astfel:
procedura TForml.ButtonlClick (expeditor: TObject);
cu Imprimanta, Imagel face
dacă începeți (Picture.Width> PageWidth) sau (Picture.Height> PageHeight)
ShowMessage ("Imaginea este mai mare decât o pagină");
Canvas.Draw ((PageWidth - Picture.Width) Div 2, (PageHeight - Picture.Height) Div 2, Picture.Bitmap);
Dacă imaginea este plasată pe o pagină, atunci metoda Canvas. Draw furnizează o imagine în centrul paginii.
Pentru o dimensiune disproporționată a imaginii după dimensiunea paginii, puteți face acest lucru:
procedura TFormI.ButtonlClick (expeditor: TObject);
var ImagineRect: TRect;
cu Imprimanta, Imagel face
În acest caz, toate lucrările de scalare se realizează prin metoda Canvas StretchDraw, care redimensionează imaginea astfel încât să se potrivească dimensiunilor dreptunghiului ImageRect.
Pentru scalarea proporțională, trebuie să efectuați calcule elementare pentru a calcula dimensiunile laturilor dreptunghiului. Un exemplu cuprinzător este în pachetul Delphi: folderul heip \ examples \ jpeg.
Imprimarea primitivelor grafice
Aveți posibilitatea să imprimați forme grafice arbitrare și text ca grafică fără a crea bitmap-uri, dar folosind direct proprietatea Canvas a obiectului imprimantei.
procedura TFormI.ButtonlClick (expeditor: TObject);
cu Printer.Canvas nu începe Pen.Color: = clBlack;
R: = Rect (10, 10, 160, 160);
Ellipse (R.Left, R.Top, R.Right, R.Bottom);
TextOut (P.X, P.Y, "Ellipse");
Când acest cod este executat, un cerc cu semnătura "Ellipse" de dedesubt trebuie imprimat pe imprimantă. Rețineți că în acest caz, textul de sub imagine este imprimat utilizând instrumente grafice.
Proprietatea de panza a clasei TPrinter permite realizarea unei alte posibilități interesante: conținutul canvasului sau al altor componente vizuale poate fi imprimat fără prea multe probleme.
Să presupunem că atunci când este redat un formular, pe panza acestuia este afișat un model geometric.
Fig. 9.2 Desen geometric pe conturul formei
Pentru ao crea, folosiți proprietățile și metodele din clasa TCanvas. În aplicația DemoPrintCanvas (Figura 9.2), metoda de manipulare OnPaint este utilizată pentru a crea desenul.
Listing 9.2 Secțiunea de implementare a modulului de formular principal al proiectului DemoPrintCanvas
procedura TMainForm.FormPaint (expeditor: TObject);
începe cu Canvas nu începe Pen.Color: = clBlack;