Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 192

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 186 187 188 189 190 191 < 192 > 193 194 195 196 197 198 .. 404 >> Следующая


Рисование и методы, используемые о классе Graphics, более подробно освещаются в следующей главе.

Поскольку на настоящий момент мы еще не умеем выбирать"прннтер, то в данном случае будет использоваться принтер по умолчанию, информация о котором храниться в реестре Windows.

С помощью метода Drawstring о мы задаем использование при выводе на принтер шрифта Aria! размером 10 пунктов и кисть черного цвета. Координаты вывода определяются переменными х и у. Для позиции по горизонтали зафиксировано значение 20 пикселей, а позиция по вертикали увеличивается для каждой следующей строки:

int к ж 20; int у » 20;

foreach (string line in lines)

{

e.Graphics.DrawString(line, пей Font('Arial', 10),

Brushes,Black, I, y) ;

У IS;
Использование диалоговых окон

411

Реализованная на данном этапе процедура вывода на печать не лишена определенных недостатков:

? Выходной поток печати направляется на принтер по умолчанию, который задается пользователем с помощью Control Panel.

В приложении должен быть способ, позволяющий пользователю выбирать принтер. Для решения этой проблемы мы воспользуемся классом PrintDialog.

? Используемый шрифт зафиксирован. Чтобы предоставить пользователю возможность самому выбирать используемый шрифт, прибегнем

к помощи класса FontDialog, который более подробно рассматривается ниже в настоящей главе.

? Для определения границ выводимых на печать страниц используются жестко заданные а программе значения. Есть возможность позволить пользователю выбирать другие границы страниц,

ДЛЯ чего нужно использовать класс PageSetupDialog.

? Не предусмотрен вывод на печать нескольких страниц.

Если выводящийся на печать документ состоит из нескольких страниц, то будет напечатана только первая из них. Нужно также предусмотреть возможность вывода на печать некоторого заголовка (например имени файла) и некоторой сноски (например номера страницы).

Продолжим работу над процедурой вывода на печать, с тем чтобы решить означенные проблемы.

Вывод на печать неснольних страниц

Событие printpage вызывается для каждой страницы, подлежащей выводу на печать. Необходимо передать Printcontroller информацию о том, что страница, выводящаяся на печать в данный момент времени, не является последней, посредством присваивания свойству HaaMorePages класса PrintPageEventArgs ЗНачеНИЯ true.

Практинум: модификация OnPrintPage для вывода неснольних страниц

1. Необходимо объявить переменную lines типа stringd и переменную linesPrinted типа int В классе SimpleEditorForm:

private string[]lines;

private int linesprintedi

2. Внесите следующие изменения в обработчик OnPrintPageO.

В реализации OnPrintPageO, которая использовалась до настоящего момента, мы осуществляли разбиение текста на строки. Поскольку метод OnPrintPage о вызывается для каждой страницы, разбиение текста на строки оказывается необходимым выполнять только однн раз — перед началом процедуры вывода на печать. Удалите весь код из метода OnPrintPageO и вместо него введите новую реализацию:

private void OnPrintPage(object sender.

System.Drawing.Printing.PrintPageEventArgs e)

(

int x » 20; int у * 20;
412

Глава 15

while (linesPrinted < lines.Length) t

e.Graphics -Drawstring(lines[lineePrinted++],

new Font('Arial*, 10), Brushes.Black, x, y) t У += 15; .

if <y >* e.PageBounda,Height - 80) f

e.HaeHorePages = true; return;

)

linesPrinted » Oj e.HasMoreРадев * false;

3, Добавьте обработчик события BeginPrint объекта printDocument, Метод onBeginPrinto вызывается всего один раз для каждого задания вывода на печать, и в нем мы создаем массив lines:

private void OnBeginPrint(object sender.

System.Drawing.Printing.PrintEventArgs e)

<

chart! param =

lines » textBoxEdit.Text.Split(param);

int i = 0;

chart] trimParam =

foreach (string 3 in lines)

(

linee[i++J - e.TrimEndtcriinParam)j

' ) '

)

4. Построив проект, вы можете приступать к осуществлению задачи вывода на печать многостраничного документа.

Как это работает

Выполнение задачи вывода на печать начинается с вызова метода Print о класса printDccumenc, который, в свою очередь, сначала единственный раз вызывает метод BeginPrint о, а Затем — метод OnPrintPage о для каждой страницы.

В методе BeginPrint о производится разбиение текста, находящегося в текстовом окне, на массив строк. Каждая строка в массиве представляет собой отдельную строку, поскольку мы выполняем разбиение по символу перехода к новой строке (\п), а все символы возврат каретки (\г) удаляются — так же, как это делалось раньше.

char[1 param = {'Va'> х

lines ж textBoxEdit.Text.Split(param) ;

int i » 0;

chart] trimParara = {'\r')f foreach (string s in lines)

{

lines[i++) “ s.TrimEnd(trijnParam); ‘

1

Метод OnPrintPage() вызывается после метода BeginPrintо. Нам требуется продолжать вывод на печать, пока число отпечатанных строк меньше числа строк, выводимых на печать. Свойство lines,Length позволяет получить число строк,
Предыдущая << 1 .. 186 187 188 189 190 191 < 192 > 193 194 195 196 197 198 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.