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

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

Запуск программы Print Text

  1. Щелкните на кнопке Start (Начать) панели инструментов.

    Примечание. Готовая программа Print Text лежит в папке c:\vbnet03sbs\Гл.18\print text.

    Ваша программа запустится в среде разработки.

  2. Проверьте, что принтер включен.
  3. Введите в текстовое поле какой-нибудь текст. Если вы введете несколько строк, убедитесь, что в конце каждой строки вы ввели возврат каретки. Перенос строк в этой демонстрационной программе не поддерживается - слишком длинные строки будут вылезать за правую границу печати. Ваша форма должна выглядеть примерно так.


  4. Щелкните на кнопке Печать текста. Программа отобразит диалоговое окно печати и распечатает содержимое вашего текстового поля.
  5. Измените текстовое поле и снова попробуйте его распечатать.
  6. Когда вы закончите, щелкните на кнопке Закрыть формы. Программа остановится. Теперь вы знаете, как печатать текст и графику.

Печать многостраничных текстовых файлов

Методики печати, которые вы только что изучили, используются для простых текстовых документов. Они обладают некоторыми ограничениями. Во-первых, метод, который я использовал, не позволяет печатать длинные строки - другими словами, текст, который выходит за рамки полей страницы. В отличие от объекта текстового поля, объект PrintDocument автоматически не переносит строки, когда они выходят за границы печати. Если у вас есть файлы, не содержащие в конце строк символ возврата каретки, вы должны написать код, который обрабатывает эти длинные строки.

Второе ограничение состоит в том, что программа Print Text не может печатать более одной страницы текста. На самом деле, она вообще не понимает, что такое страница текста - процедура печати просто посылает текст на принтер по умолчанию. Если текстовый блок слишком длинный для одной страницы, то оставшийся текст просто не будет напечатан. Чтобы справиться с многостраничной печатью, вы должны создать виртуальную страницу текста, которая называется PrintPage, а затем добавлять на нее текст до тех пор, пока она не заполнится. Когда эта страница заполнится, она будет отправлена на принтер. Этот процесс продолжается до тех пор, пока весь печатаемый текст не будет отправлен на принтер. После этого задание печати заканчивается.

Если обработка этих ограничений кажется сложной, не отчаивайтесь - существует несколько удобных механизмов, которые помогают создавать на Visual Basic виртуальные текстовые страницы и печатать текстовые файлы с длинными строками и несколькими страницами текста. Первый механизм - это событие PrintPage, которое возникает при печати страницы. PrintPage получает аргумент типа PrintPageEventArgs, который предоставляет вам размеры и характеристики текущей страницы принтера. Еще одним механизмом является метод Graphics.MeasureString. Метод MeasureString может быть использован для определения того, сколько символов и строк может поместиться в прямоугольной области страницы. Используя эти, а также некоторые другие механизмы, можно довольно просто создать процедуры, которые выполняют многостраничную печать.

Чтобы создать программу с именем Print File, которая открывает текстовые файлы любой длины и печатает их, выполните следующие действия. Программа Print File также демонстрирует, как использовать элементы управления RichTextBox, PrintDialog и OpenFileDialog. Элемент управления RichTextBox является более мощной версией элемента управления TextBox, который вы использовали только что для отображения текста. Элемент управления PrintDialog отображает стандартное диалоговое окно Print (Печать), так что вы можете указать различные параметры принтера. Элемент управления OpenFileDialog позволяет выбирать текст для печати. (Вы использовали OpenFileDialog в "Работа с меню и диалоговыми окнами" .)

Управление запросами на печать с использованием элементов управления RichTextBox, OpenFileDialog и PrintDialog

  1. Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.18 новый проект с именем My Print File. Появится пустая форма.
  2. Используя элемент управления Button из Области элементов, нарисуйте в верхнем левом углу формы две кнопки. Эта программа имеет простой интерфейс пользователя, но методы печати, о которых вы узнаете, легко адаптируются к более сложным решениям.
  3. Щелкните в Области элементов на элементе управления RichTextBox, а затем нарисуйте объект поля форматированного текста, который будет закрывать нижнюю половину формы.
  4. Сделайте двойной щелчок мышью на элементе управления OpenFileDialog и добавьте в область компонент под вашей формой объект диалога открытия файла. Вы будете использовать объект диалога открытия файла для поиска текстовых файлов в вашей системе.
  5. Сделайте двойной щелчок мышью на элементе управления PrintDocument и добавьте в область компонент объект печати документа. Вы будете использовать объект печати документа для поддержки печати в вашем приложении.
  6. Сделайте двойной щелчок мышью на элементе управления PrintDialog и добавьте в область компонент объект диалога печати. Вы будете использовать объект диалога печати для открытия в вашей программе диалогового окна Print (Печать).
  7. Теперь установите для объектов формы следующие свойства:

    Объект Свойство Установка
    Button1 Name btnOpen
    Text "Открыть"
    Button2 Name btnPrint
    Enabled False
    Text "Печать"
    RichTextBox1 Text пустой (empty)
    Form1 Text "Печать файла"

    Ваша форма будет выглядеть примерно так, как показано на рисунке ниже.


    Теперь добавьте код программы, необходимый для открытия текстового файла и его печати.

  8. Сделайте двойной щелчок мышью на кнопке Открыть. В Редакторе кода появится процедура события btnOpen_Click.
  9. Прокрутите код программы в самое начало и введите следующий код:

    Imports System.Drawing.Printing

    Эти определения библиотек делают доступными классы для печати.

  10. Переместите курсор под метку "Windows Form Designer generated code" ("Код, автоматически созданный конструктором форм Windows"), а затем введите следующие объявления переменных:

    Private PrintPageSettings As New PageSettings
    Private StringToPrint As String
    Private PrintFont As New Font("Arial", 10)

    Эти операторы определяют важную информацию о печатаемых страницах.

  11. Прокрутите код до процедуры события btnOpen_Click, а затем введите следующий код программы:

    Dim AllText, LineOfText As String
    'отображаем диалоговое окно Открыть
    OpenFileDialog1.Filter = "Текстовые файлы (*.TXT)|*.TXT"
    OpenFileDialog1.ShowDialog()
    If OpenFileDialog1.FileName <> "" Then
    	Try 'открываем файл и перехватываем все ошибки с помощью обработчика
    		FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input)
    		Do Until EOF(1) 'читаем строки из файла
    			LineOfText = LineInput(1)
    			'добавляем каждую строку в переменную AllText
    			AllText = AllText & LineOfText & vbCrLf
    		Loop                   'обновляем метку
    		RichTextBox1.Text = AllText  'отображаем файл
    		RichTextBox1.Select(1, 0)   'удаляем выделение текста
    		RichTextBox1.Enabled = True 'включаем текстовый курсор
    		'Включаем кнопку Print
    		btnPrint.Enabled = True
    	Catch ex As Exception
    		'display error messages if they appear
    		MessageBox.Show(ex.Message)
    	Finally
    		FileClose(1) 'закрываем файл
    	End Try
    End If

    Когда пользователь щелкает на кнопке Открыть, эта процедура события отображает диалоговое окно Open, используя для него фильтр, который отображает только текстовые файлы. Когда пользователь выбирает файл, имя файла присваивается открытой строковой переменной с именем FilePath, которая объявлена в верхней части процедуры события. Затем процедура использует для загрузки текстового файла в объект RichTextBox1 обработчик ошибок Try...Catch. Наконец, процедура события включает кнопку Print ( btnPrint ), так что пользователь может распечатать файл. Эта процедура открывает файл и включает кнопку печати в форме, но не выполняет самой печати.

Теперь добавьте необходимый код программы, который отображает диалоговое окно Print и печатает файл с помощью логики, отслеживающей размеры текущей тестовой страницы.

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

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