У цій статті я постараюся розповісти Вам про самих зручних і поширених способах друку текстів і зображень з Ваших додатків. Друк використовується в додатках не так часто, от і виникають різні питання з цього приводу. Іноді буває необхідно "вивести на принтер" графік вийшла функції або звіт про діяльність фірми і т.д. Прочитавши цю статтю ви освоїте все найнеобхідніше для друку даних з Ваших додатків.
Отже, почнемо розгляд цих способів.
Друк за допомогою функцій файлового введення / виводу
Тут ми будемо використовувати найпростіші функції введення / виводу у файл, тільки зв'яжемо вихідний потік не з файлом, а з принтером. Розглянемо приклад друку тексту, що міститься в компоненті TEdit:
var P: TextFile;
begin
AssignPrn (P);
Rewrite (P);
Writeln (P, Edit1.text);
CloseFile (P);
End;
Тут ми оголошуємо змінну P типу TextFile. Процедура AssignPrn є різновидом процедури Assign. Вона налаштовує змінну P на порт принтера і дозволяє працювати з ним як з файлом. Rewrite відкриває порт для роботи, а WriteLn - виводить інформацію на друк. Важливо закрити порт принтера командою CloseFile!
Цей спосіб можна використовувати для роздруківки рядків списку або яких-небудь інших даних, по мірі їх надходження в програму.
Друк текстів у збагаченому форматі методом Print
Якщо Ви намагалися спробувати роздрукувати тексти з Вашого застосування, то, напевно, Вам відомо, що компонент TRichEdit має метод Print, що дозволяє друкувати текст, що зберігається в цьому компоненті. Цей метод має тільки один параметр - рядок, яка при перегляді в Windows черги друкованих завдань є ім'ям завдання. Наведу приклад використання (хоча він очевидний:)
RichEdit1.Print ('Print of our RichEdit1');
Слід зауважити, що печатка відтворює всі особливості форматування тексту, так само відбувається автоматичне перенесення рядків і розбиття тексту на сторінки. При цьому довжина рядків ні як не пов'язана з розмірами компонента RichEdit.
Друк за допомогою об'єкту Printer
У Дельфі є клас друкуючих об'єктів TPprinter, який забезпечує друк текстів, зображень та інших об'єктів, розташованих на його канві (Canvas).
Модуль Дельфі Printers, містить змінну Printer, яка є об'єктів типу TPrinter. Тому для використання цієї змінної у Ваших програмах, треба підключити модуль Printers в оператор Uses (на жаль автоматично цього не робиться)
Розглянемо докладніше деякі властивості і методи об'єкта TPrinter:
Властивість, метод | Опис |
Canvas | Канва - місце в пам'яті, в якому формується сторінка або документ перед друком. |
TextOut | Метод канви, що дозволяє посилати в неї текст |
BeginDoc | Використовується для початку завдання друку |
EndDoc | Використовується для завершення завдання друку. При цьому печатка починається тільки після виклику цього методу! |
PageHeight | Повертає висоту сторінки в пікселах |
NewPage | Примусово починає нову сторінку |
PageNumber | Повертає номер друкованої сторінки |
Наведу два приклади друку за допомогою об'єкту TPrinter тексту та зображення.
Друк тексту можна здійснити так:
Printer.BeginDoc;
Printer.Canvas.TextOut (10,10, 'Друкуємо за допомогою об'єкту Printer');
Printer.EndDoc;
Якщо Ви хочете надрукувати зображення, що знаходиться, наприклад, в компоненті Image1, то код може бути таким: Printer.BeginDoc;
with Image1.Picture.Bitmap do Printer.Canvas.CopyRect (Rect (0,0, Height, Width), Canvas, Rect (0,0, Height, Width));
Printer.EndDoc;
Здавалося і б і тут все просто, але в об'єкта Printer є істотний недолік: він не проводить автоматичне розбиття на рядки і сторінки, тому друкувати довгі тексти краще з допомогою компонента RichEdit або Memo.
Друк форм
У форм в Delphi є метод Print, який друкує всю клієнтську область форми. При цьому смуга заголовка і смуга головного меню форми не друкуються.
Властивість PrintScale визначає опції масштабування зображення форми при друці:
poNone | Масштабування не використовується. Розмір зображення може змінюватися в залежності від принтера |
poPrintToFit | Робиться спроба надрукувати зображення форми того ж розміру, який видно на екрані |
poProportional | Збільшує або зменшує розмір зображення, підганяючи його під розмір сторінки. |
На цьому ми закінчуємо огляд способів друку даних з Ваших додатків. Сподіваюся, що ще одним питанням у Вас стало менше:))
Список літератури
Михайло Хрістосенко. Різні способи друку з додатків