Опубликован: 31.08.2006 | Уровень: специалист | Доступ: свободно
Лекция 19:

Работа с принтерами

Добавление кода для объектов btnPrint и PrintDocument1

  1. Снова отобразите форму, а затем дважды щелкните мышью на кнопке Print ( btnPrint ), чтобы вывести в Редакторе кода ее процедуру события.
  2. Введите следующий код программы:

    Try
    	'Указываем текущие параметры страницы
    	PrintDocument1.DefaultPageSettings = PrintPageSettings
    	'Указываем документ для диалогового окна печати и показываем его
    	StringToPrint = RichTextBox1.Text
    	PrintDialog1.Document = PrintDocument1
    	Dim result As DialogResult = PrintDialog1.ShowDialog()
    	'Если сделан щелчок на OK, печатаем документ на принтере
    	If result = DialogResult.OK Then
    		PrintDocument1.Print()
    	End If
    	Catch ex As Exception
    	'Отображаем сообщение об ошибке
    	MessageBox.Show(ex.Message)
    End Try

    Эта процедура события устанавливает параметры принтера по умолчанию для документа и, если пользователь изменил текст в объекте форматированного текста, присваивает содержимое объекта RichTextBox1 строковой переменной StringToPrint (определенной в верхней части кода формы). Затем она открывает диалоговое окно Print и позволяет пользователю настроить любые параметры печати, которые можно изменить (принтер, число копий, опцию печати в файл и т.д.). Если пользователь щелкает на кнопке OK, процедура события посылает задание печати на принтер, вызывая следующий оператор:

    PrintDocument1.Print()
  3. Снова отобразите форму, а затем дважды щелкните мышью на объекте PrintDocument1 в области компонент. Visual Studio добавит в объект PrintDocument1 процедуру события PrintPage.
  4. Введите в процедуре события PrintDocument1_PrintPage следующий код программы:

    Dim numChars As Integer
    Dim numLines As Integer
    Dim stringForPage As String
    Dim strFormat As New StringFormat
    'На основании параметров страницы определяем прямоугольную область
    'печати
    Dim rectDraw As New RectangleF( _
    e.MarginBounds.Left, e.MarginBounds.Top, _
    e.MarginBounds.Width, e.MarginBounds.Height)
    'Определяем область для вычисления объема умещающегося на странице
    'текста
    'Делаем высоту на одну строку меньше, чтобы гарантировать, что текст не
    'будет обрезан
    Dim sizeMeasure As New SizeF(e.MarginBounds.Width, _
    e.MarginBounds.Height - PrintFont.GetHeight(e.Graphics))
    
    'При печати длинных строк разбиваем их по словам
    strFormat.Trimming = StringTrimming.Word
    'Вычисляем, сколько символов и строк поместится в области sizeMeasure
    e.Graphics.MeasureString(StringToPrint, PrintFont, _
    sizeMeasure, strFormat, numChars, numLines)
    'Вычисляем строку, которая уместится на странице
    stringForPage = StringToPrint.Substring(0, numChars)
    'Печатаем строку на текущей странице
    e.Graphics.DrawString(stringForPage, PrintFont, _
    Brushes.Black, rectDraw, strFormat)
    'Если еще есть текст, указываем, что есть следующая страница
    If numChars < StringToPrint.Length Then
    	'Удаляем из строки уже напечатанный текст
    	StringToPrint = StringToPrint.Substring(numChars)
    	e.HasMorePages = True
    	Else
    	e.HasMorePages = False
    	'Весь текст был напечатан, так что восстанавливаем строку
    	StringToPrint = RichTextBox1.Text
    End If

    Эта процедура события выполняет собственно печать текстового документа, и делает она это, точно определяя область печати (или прямоугольник области печати) на основе параметров диалогового окна Page Setup. Весь текст, который помещается в этой области, может быть распечатан обычным образом; текст, который выходит за границы этой области, должен быть разбит на несколько строк или страниц, как это происходит в стандартных приложениях Windows.

    Область печати определяется с помощью переменной rectDraw, которая основана на классе RectangleF. Для обрезания строк, которые выходят за границу правого поля печати, используются переменная strFormat и метод Trimming. Готовая текстовая строка печатается методом DrawString, которую вы уже использовали в этой лекции. Свойство e.HasMorePages используется для указания того, есть ли еще страницы для печати. Если страниц больше не осталось, свойство HasMorePage устанавливается на значение False, и содержимое переменной StringToPrint становится равным содержимому объекта RichTextBox1.

  5. Чтобы сохранить изменения, щелкните на кнопке Save All (Сохранить все) на панели инструментов.

Здесь пришлось ввести много кода! Запустите программу и посмотрите, как работает печать текстовых файлов на нескольких страницах.

Сайдахмад Зарипов
Сайдахмад Зарипов
Жанболат Шаймерден
Жанболат Шаймерден

Можно ли выбирать язык для надписей и команд в среде разработки?