:: Меню ::

Головна
  • Про сайт
  • Введення
  • Середовище програмування VB .NET: Visual Studio .NET
  • Вирази, оператори і передача управління
  • Класи і об'єкти
  •  Спадкоємство і інтерфейси
  • Обробка подій і делегати
  • Обробка помилок в VB .NET
  • Форми Windows, графічний вивід і друк
  • Уведення-виведення
  •  Багатопотокові застосування
  • Підтримка баз-даних в VB .NET
  • Короткий огляд ASP .NET
  • Складки .NET, установка додатків і COM Interop
  • Книга для гостей
    Контакти
    Добавити у вибране

    :: Друзі ::

     
     

    :: Лічильники ::

    = =

     

     

     

     

    Багатосторінковий вивід

    Процес багатосторінкового друку заснований на невеликій хитрості: якщо процедура обробки події Pri ntpage задає властивості Hasmorepages об'єкту Pri ntpageeventargs значення True, то об'єкт Printdocument дізнається про наявність додаткових сторінок для друку і автоматично ініціює наново подію Pagepri n't.

    Проблеми, що виникають при багатосторінковому друці, мають мало загального з самим друком. Вони властиві будь-якому складному виводу на графічній поверхні: програма повинна пам'ятати про все. Припустимо, ви хочете написати невелику програму для виведення вмісту текстового поля або текстового файлу. У псевдокоді все виглядає просто.

    1. Прочитати рядок з поля або з файлу.
    2. Чи не перевищує довжина рядка граничне допустиме значення? Якщо перевищує, розбити на декілька фрагментів.
    3. Чи поміщаються ці фрагменти на поточній сторінці?
    4. Якщо поміщаються, надрукувати їх функцією Drawstring починаючи з поточної позиції. Якщо не поміщаються, надрукувати скільки вдасться, почати нову сторінку і вивести на ній решту фрагментів.
    5. Повторити процес до тих пір, поки не будуть оброблені всі рядки текстового поля або файлу.

    Проте перевірка можливості розміщення нового рядка на сторінці не має нічого спільного з друком; у ній використовуються різні метрики, що обчислюються на підставі ширини і висоти текстового рядка. У свою чергу, ці параметри залежать від сімейства і розміру використовуваного шрифту. На щастя, ви можете покластися на такі методи, як Measurestri ng; ці методи використовують метрики, пов'язані з поточним контекстом пристрою.

    Про клас Printpageeventargs

    Об'єкт Printpageeventargs містить дві ReadOnly-свойства, за допомогою яких можна отримати інформацію про розміри сторінки. Значення обох властивостей задаються в сотих долях дюйма.

    • Pagebounds: повертає розміри прямокутної області всієї сторінки.
    • Marginbounds: повертає розміри прямокутної області, обмеженої полями.

    У властивості Pagesettings об'єкту Printpageeventargs зберігається додаткова інформація. У таблиці. 8.2 перераховані найважливіші властивості класу Pagesetti ngs (більшість принтерів дозволяють читати ці властивості, але не всі принтери підтримують запис).

    Таблиця 8.2. Властивості класу Pagesettings

    Властивість

    Опис

    Bounds Повертає розміри сторінки з урахуванням можливої альбомної орієнтації друку. Властивість доступна тільки для читання
    Color Ознака друку сторінки в кольорі. Логічна властивість, доступна для читання і запису
    Landscape Орієнтація сторінки. Логічна властивість, доступна для читання і запису
    Margins Розміри полів (за умовчанням дорівнюють 1 дюйму). Властивість доступна для читання і запису
    Papersize Розміри паперу. Властивість доступна для читання і запису
    Papersource Джерело паперу. Властивість доступна для читання і запису
    Printerresolution Дозвіл принтера. Деякі принтери підтримують нестандартні дозволи, інші дозволяють вибирати тільки між чорновим і якісним друком. Властивість доступна для читання і запису
    Printersettings Налаштування принтера для даної сторінки. Властивість доступна для читання і запису

    Наприклад, багато принтерів не дозволяють друкувати ближче, ніж в 0,5 дюйма від краю паперу. В цьому випадку мінімальні поля задаються наступною командою:

    е.PageSettings.Margins = New System.Drawing.Printing.Margins(50.50.50.50)

    Наступний фрагмент починає друк з лівого верхнього краю області, обмеженої полями:

    Dim g As Graphics

    g = e.Graphics

    g.DrawImage(Pictureboxl.Image, e.MarginBounds.Left, e.MarginBounds.Top)

    Елемент Printdialog і конфігурація друку

    Користувач програми повинен мати можливість вибрати принтер і внести інші зміни до конфігурації друку. Таку можливість надає елемент Printdialog. У програмі відповідний фрагмент може виглядати приблизно так:

    Private Sub Buttonl_click(Byval sender As System.Object,_

    Byval e As System.EventArgs)Handles Buttonl.Click

    Dim Phntdialogl As New Printdialog()

    ' Наступний рядок необхідний, тому що інформація

    ' об'єкту Printersettings потрібна об'єкту Printdialog перед виводом

    Printdialogl.Document = Printdocumentl

    If Printdialogl.ShowDialog() = Dialogresult.OK Then

    Printdocumentl. PRINTO

    End If

    End Sub

    Виділений рядок повідомляє екземпляр Printoialog, що пов'язаний з ним документ має бути екземпляром Printdocumentl (передбачається, що цей об'єкт був створений раніше). Цей рядок необхідний, оскільки елемент Printdialog повинен отримати деякі параметри друку (у вигляді об'єкту Pri ntsetti ngs) перед виводом вікна. Щоб передати йому цю інформацію, найпростіше призначити об'єкт Printdocument властивості Document.

    Самостійне програмування друку

    У багатьох випадках цілком достатньо елементу Pri ntdialog і коди, що автоматично згенерувала, але час від часу потрібно реалізувати нестандартні можливості друку. Для цього необхідно написати процедуру з наступною сигнатурою:

    Private Sub Proceduretodotheprinting(Byval Sender As Object,_

    Byval e As System.Drawing.Printing.PrintPageEventArgs)

    Потім процедура за допомогою делегата підключається до події Printpage класу Printdocument. Наприклад, для виклику об'єкту aprintdocument класу Printdocument з приведеною вище процедурою apri ntdocument_printpage використовується команда наступного вигляду:

    Addhandler aprintdocument.PrintPage, Addressof Me.aPrintDocument_PrintPage

    У наступному фрагменті показано, як виглядає можлива реалізація друку в обробнику команди меню Print:

    Private Sub mnuprint_click(Byval sender As System.Object,_

    Byval e As System.EventArgs)Handles mnuprint.Click

    Dim aprintdocument As New Printdocument()

    Addhandler aprintdocument.PrintPage.

    Addressof Me.aPrintDocument_PrintPage

    aprintdocument.Print()

    End Sub

    Мал. 8.25. Режим попереднього перегляду

    Попередній перегляд

    Друк простих документів в VB .NET вимагає декілька великих зусиль, чим в Vb6, зате режим попереднього перегляду реалізується набагато простіше. Для цього від вас потрібно буде лише призначити об'єкт Printdocument властивості Document екземпляра Printprevl ewdialog. Так, наступний фрагмент майже повністю збігається з кодом, приведеним вище, проте він реалізує попередній перегляд замість виводу на принтер. Результати його виконання показані на мал. 8.25:

    Private Sub btnpreview_click(Byval sender As System.Object.

    Byval e As System.EventArgs) Handles btnpreview.Click

    Dim Printpreviewdialogl As New Prlntpreviewdialog()

    Printpreviewdlalogl.Document = Printdocumentl

    If Printpreviewdialogl.ShowDialog() = Dialogresult.OK Then

    Printdocumentl.Print()

    End If

    End Sub

     




    :: Наша кнопка ::

    Отримати код:

    Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


    :: Реклама ::

    Скачати безкоштовно програму Microsoft Front Page 2003


    :: Посилання ::

    -


     

     

     


    Copyright ©