|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Организация печати в VBA 2008 ExpresEdition |
|
VBA - Организация печати в VBA 2008 ExpresEdition
|
Новый участник Сообщения: 5 |
Профиль | Отправить PM | Цитировать Привет всем! Помогите разобраться с организацией печати в VBA 2008, а то методы, которые применялись в VB6 не работают. Совсем не работают....
Суть проблемы: Есть форма с множеством ТекстБоксов с Лейблами в которые выводятся результаты некоторых вычислений. Нужно, что-бы при нажатии в меню пункта "Печать" принтер печатал страницу А4 с данными из тех самых ТекстБоксов + некоторую картинку из папки Resources проекта и чтоб это все как-то выглядело красиво. С VBA 2008 как-то с помощью Интернета разобрался, а вот с выводом на печать не могу - не могу найти толковой литературы по VBA 2008. Есть справочник по VBA 2005. Кое-что работает а кое-что нет. По рекомендациям из данного справочника пока-что получилось вот что: Начало: Option Explicit On Imports System.IO Imports System.Drawing.Printing Public Class Form1 . . . . Private Sub ToolStripMenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem5.Click If PrintDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then Printing() End If "Вызов диалогового окна "Печать", ели нажали "Печать" то переходим к формированию страницы End Sub Private Sub Printing() PrintDocument1.DefaultPageSettings.Margins = New Margins(150, 150, 150, 150) "Установки принтера" PrintDocument1.DefaultPageSettings.Landscape = False А здесь непонятно что писать....... Try PrintDocument1.Print() (насколько я понял из справочника, то данная команда запускает процесс печати) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub |
|
Отправлено: 20:14, 29-09-2010 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Так, может, речь все таки идет о Visual Basic .Net , а не о VBA? VBA используется в продуктах MS office для написания макросов. VB.NET - для написания приложений.
Для печати есть много способов - можно использовать встроенный Report Viewer, и создать там нужный отчет. Можно использовать просто Me.Print() - напечатает текущую форму. Можно использовать сторонние создатели отчетности, такие как Fast Report. Можно, в конце концов, формировать вручную отчет в Word или Excel. |
------- Отправлено: 01:18, 30-09-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Цитата Delirium:
Раньше, например в VB 6 для формирования страницы для вывода на печать использовался оператор Printer, с помощью которого задавались шрифт, отступы, положение на странице и т. д.: Printer.Print "Текст" & Label().Caption Printer.EndDoc, после чего принтер начинал печатать. Здесь же таких операторов и в помине нет. Есть похожие, но как их использовать - фиг знает.... |
|
Отправлено: 17:02, 03-10-2010 | #3 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Здесь ftp://ftp.charlespetzold.com/ProgWinVB/Lines Curves and Area Fills/PrintableForm/PrintableForm.vb пример организации печати формы по клику.
Если приложение реализовать с нуля можно прямо брать и наследоваться от класса PrintableForm, а не как по умолчанию студия предлагает от Form. Для уже написанного проекта можно воспользоваться и этим способом (попутно устраняя все замечания студии) или скопировать только необходимы функционал из примера, а именно Dim prndoc As New Printing.PrintDocument() 'Создаём объект печати prndoc.DocumentName = Text '"Hello" 'Названия задание печати, берётся с заголовка формы AddHandler prndoc.PrintPage, AddressOf PrintDocumentOnPrintPage 'назначить процедуру подготовки документа prndoc.Print()'Выполнить печать на принтере по умолчанию, никакого диалога на выбор принтера (при наличии нескольких) не предлагается. ‘Во избежание перевода бумаги рекомендую воспользоваться виртуальным принтером печающий в PDF файл |
Отправлено: 18:05, 03-10-2010 | #4 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Цитата Admiral:
После ввода куска кода (где описывается та самая процедура PrintDocumentOnPrintPage) из Цитата Admiral:
Обидно, что приложение полностью готово и выполняет полностью те физические расчеты, которые было нужно, осталось как-то все это выводить на печать, а печатать полностью всю форму как-то не профессионально. Обязательно Майкрософт и Бил Гейтс максимально все усложнят (Само приложение написалось на ура за 2-3 дня, а вот с выводом на печать уже как месяц воюю. ). |
|||
Отправлено: 21:58, 04-10-2010 | #5 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Sub PrintDocumentOnPrintPage(ByVal obj As Object, _ ByVal ppea As Printing.PrintPageEventArgs) Dim grfx As Graphics = ppea.Graphics 'Задаём контекст печати. Через объект grfx будет формироватся страница Dim szf As SizeF = grfx.VisibleClipBounds.Size 'взять допустимые размеры страницы DoPage(grfx, Color.Black, CInt(szf.Width), CInt(szf.Height)) 'передать контекст, цвет шрифта и допустимые размеры в процедуру DoPage, сейчас там рисуется только Х, однако данную процедуру можно переназначить в наследниках End Sub |
Отправлено: 15:28, 05-10-2010 | #6 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Огромное спасибо, Admiral, !!!
С выводом на печать ТекстБоксов разобрался. Все прекрасно работает. Вы писали Цитата Admiral:
Как правильно здесь Цитата Admiral:
Как только разберусь с выводом на печать изображения, напишу полный отчет . |
||
Отправлено: 19:20, 05-10-2010 | #7 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать CODE43, эквивалент с абсолютным путём grfx.DrawImage(New Bitmap("C:\windows\Gone Fishing.bmp"), New Point(cx / 2, cy / 6)) для систем установленных на диск С и не с переименованной системной папкой.
|
Отправлено: 19:35, 05-10-2010 | #8 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Вот, как и обещал, выкладываю то, что у меня получилось.
Приложение по описываемому выше методу не переделывал. Просто в уже существующий код формы дописал показанный ниже код. Не знаю насколько он оптимален с точки зрения программирования, но он работает и результат меня устраивает. Вставляем в меню объект ToolStripMenuItem, называем его «Печать», Вставляем в проект объект PrintDialog. Описываем процедуру выбора пункта «Печать»: Private Sub ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem5.Click If PrintDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then Pechat() ‘При выборе в меню приложения пункта «Печать» выводится стандартное диалоговое окно для выбора принтера. Если в диалоге нажать «Печать» то запускается процедура Pechat ’ End If End Sub Собственно, сама процедура: Private Sub Pechat() Dim prndoc As New Printing.PrintDocument prndoc.DocumentName = Text AddHandler prndoc.PrintPage, AddressOf PrintDocumentOnPrintPage prndoc.Print() End Sub Private Sub PrintDocumentOnPrintPage(ByVal obj As Object, ByVal ppea As PrintPageEventArgs) Dim grfx As Graphics = ppea.Graphics Dim szf As SizeF = grfx.VisibleClipBounds.Size DoPage(grfx, Color.Blue, CInt(szf.Width), CInt(szf.Height)) End Sub Процедура DoPage формирования страницы для вывода на печать: Private Sub DoPage(ByVal grfx As System.Drawing.Graphics, ByVal clr As System.Drawing.Color, ByVal cx As Integer, ByVal cy As Integer) Dim Text2print As String = vbNullString Dim Font As New Font("Courier New", 14) ‘Шрифт и его размер для печати’ Text2print = vbTab & vbTab & "Здесь можна напечатать заглавие страницы по центру" & vbLf Text2print = Text2print & Label1.Text & vbTab & "Какой нибудь текст" & vbTab & TextBox1.Text & vbTab & "Еще какой нибудь текст" & vbLf Text2print = Text2print & “И так далее, собственно и формируем то что нужно для вывода на печать ” grfx.DrawString(Text2print, Font, New SolidBrush(clr), New Point(cx / 20, cy / 20)) ‘Печатаем сформированый текст’ grfx.DrawImage(New Bitmap("C:\Папка\Картинка.jpg"), New Point(cx / 4, cy / 3)) ‘Печатаем картинку приблизительно по центру листа (зависит от сх и су)’ End Sub |
Отправлено: 19:42, 06-10-2010 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2008 R2 - сервер печати на 2008 сервере | edikst | Windows Server 2008/2008 R2 | 2 | 02-07-2010 12:49 | |
Конкурс - Windows 7 в корпоративной среде. Часть 2: Организация системы печати | OSZone | Microsoft Windows 7 | 0 | 22-11-2009 08:30 | |
[решено] Проблема при печати hp 1018; не очищается очередь печати | mirracle | Непонятные проблемы с Железом | 13 | 20-01-2007 23:52 | |
Аудит печати на сервере печати под windows 2003 | eggdrop | Microsoft Windows NT/2000/2003 | 1 | 03-10-2006 12:58 |
|