Как окно отмены печати спрятать?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Как окно отмены печати спрятать?

Сообщение asharky » 08.01.2008 (Вт) 23:37

Сформировал задание на печать, инициировал поток в котором оно будет выполняться, и пошел дальше. В фоне выполняется печать отчета. Выскакивает окно с количеством страниц и кнопкой Cancel. Как сделать так, чтобы глаза мои его не видели? :)
В культурной столице проститутки берут книгами...

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Re: Как окно отмены печати спрятать?

Сообщение Ramzes » 09.01.2008 (Ср) 10:28

asharky писал(а):Сформировал задание на печать, инициировал поток в котором оно будет выполняться, и пошел дальше. В фоне выполняется печать отчета. Выскакивает окно с количеством страниц и кнопкой Cancel. Как сделать так, чтобы глаза мои его не видели? :)

ну чтоб твои глаза его не видели, можно просто отворачиваться от монитора, или закрывать эти самые глаза :)

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Re: Как окно отмены печати спрятать?

Сообщение asharky » 09.01.2008 (Ср) 10:51

Ramzes писал(а):
asharky писал(а):Сформировал задание на печать, инициировал поток в котором оно будет выполняться, и пошел дальше. В фоне выполняется печать отчета. Выскакивает окно с количеством страниц и кнопкой Cancel. Как сделать так, чтобы глаза мои его не видели? :)

ну чтоб твои глаза его не видели, можно просто отворачиваться от монитора, или закрывать эти самые глаза :)
Имелось в виду как сделать так, чтобы это окно не показывалось вообще.
В культурной столице проститутки берут книгами...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.01.2008 (Ср) 11:19

asharky, а оно разве по умолчанию при печати всегда вылезает?
Весь мир матрица, а мы в нем потоки байтов!

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 09.01.2008 (Ср) 11:42

Viper писал(а):asharky, а оно разве по умолчанию при печати всегда вылезает?
У меня да, вылезает. Как у других я не знаю.

Знал бы как этот момент регулируется - прикрыл бы окно и не задавал бы на форумах вопросы.

Я потому и спрашиваю, что не знаю. Никаких других целей, типа потреньдеть за жизнь, пофлеймить, постебаться и т.п., я не преследую.

Код надо приводить?
В культурной столице проститутки берут книгами...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.01.2008 (Ср) 14:24

asharky писал(а):Код надо приводить?

Весьма желательно
Весь мир матрица, а мы в нем потоки байтов!

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 09.01.2008 (Ср) 18:27

Это запускаем:

Код: Выделить всё
Dim m_thread As Thread
m_thread = New Thread(AddressOf printNaklad)
m_thread.IsBackground = False
m_thread.Priority = ThreadPriority.Normal
m_thread.Start()


Это формируем параметры для печати накладной:

Код: Выделить всё
Private Sub printNaklad()
Dim p_dataset As New DataSet("Naklad")
.....
p_dataset.AcceptChanges()


...и создаем, с параметром, член класса для распечатки:
Код: Выделить всё
Using m_TovNakl As cls_Naklad = New cls_Naklad(p_dataset)
  m_TovNakl.Run()
End Using


Ну и, собственно, класс для печати:
Код: Выделить всё
    '''<summary>Класс для распечатки накладной</summary>
    Private Class cls_Naklad : Implements IDisposable


#Region "Локальные переменные"

        '''<summary>Счетчик печатаемой страницы</summary>
        Private c_currentPageIndex As Integer
        '''<summary>Поток</summary>
        Private c_streams As IList(Of Stream)
        '''<summary>Данные для печати</summary>
        Private c_dataset As DataSet
        ''' <summary>
        ''' Имя файла отчета
        ''' </summary>
        ''' <remarks></remarks>
        Private Const CONST_STRING_REPORT_RDLC_NAME As String = "naklad.rdlc"

#End Region ' "Локальные переменные"

#Region "Конструкторы/деструкторы"

        ''' <summary>Стартовая процедура</summary>
        Public Sub New(ByVal m_dataset As DataSet)
            c_dataset = m_dataset.Copy
        End Sub ' End New()


        ''' <summary>Процедура запуска приложения</summary>
        Public Sub Run()
            Dim report As LocalReport = New LocalReport()
            report.ReportPath = CONST_STRING_REPORT_RDLC_NAME
            For Each tblI As DataTable In c_dataset.Tables
                report.DataSources.Add(New ReportDataSource(tblI.TableName, tblI))
            Next
            ExportImage(report)
            'ExportPDF(report)
            c_currentPageIndex = 0
            Print()
        End Sub ' End Run()


        ''' <summary>Процедура уничтожения объектов по окончанию работы программы</summary>
        Private Overloads Sub Dispose() Implements IDisposable.Dispose
            If Not (c_streams Is Nothing) Then          ' Если потоки не завершены, то чистим их
                Dim stream As Stream
                For Each stream In c_streams
                    stream.Close()                      ' Закрытие потока
                Next
                c_streams = Nothing                     ' Очистка
            End If
        End Sub ' End Dispose()

#End Region ' End "Конструкторы/деструкторы"

#Region "Вспомогательные функции"

        '''<summary>Создание потока</summary>
        Private Function CreateStream(ByVal name As String, ByVal fileNameExtension As String, _
              ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream

            Dim streamF As MemoryStream = New MemoryStream()
            'Dim streamF As Stream = New FileStream("..\..\" + name + "." + fileNameExtension, FileMode.Create)
            c_streams.Add(streamF)                          ' Добавление потока в массив
            Return streamF
        End Function ' End CreateStream()


        ''' <summary>Формирование потока графики</summary>
        ''' <remarks>Графический Формат файла</remarks>
        Private Sub ExportImage(ByVal report As LocalReport)
            Dim deviceInfo As String = "<DeviceInfo>" + _
             "  <OutputFormat>PNG</OutputFormat>" + _
             "  <DpiX>300</DpiX>" + _
             "  <DpiY>300</DpiY>" + _
             "  <Compress>100</Compress>" + _
             "  </DeviceInfo>"
            Dim warnings() As Warning = Nothing
            c_streams = New List(Of Stream)()

            Try
                report.Render("Image", deviceInfo, AddressOf CreateStream, warnings)
            Catch ex As Exception
                WLog("Ошибка в Class cls_Naklad.ExportImage. " & ex.InnerException.InnerException.Message, _
                EventLogEntryType.Error)
            End Try

            Dim stream As Stream
            For Each stream In c_streams
                stream.Position = 0
            Next
        End Sub ' End ExportImage()

#End Region ' "Вспомогательные функции"

#Region "Процедуры печати"

        ''' <summary>Процедура вызывается по событию "Печать страницы"</summary>
        Private Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
            Dim pageImage As Drawing.Image = Nothing

            Try
                pageImage = New Metafile(c_streams(c_currentPageIndex))
                WLog("Печать через MetaFile", EventLogEntryType.Information)
            Catch ex As Exception
                pageImage = New Drawing.Bitmap(c_streams(c_currentPageIndex))
                WLog("Печать через BitMap", EventLogEntryType.Information)
            End Try

            ev.Graphics.DrawImage(pageImage, ev.PageBounds)

            c_currentPageIndex += 1
            ev.HasMorePages = (c_currentPageIndex < c_streams.Count)
        End Sub ' End PrintPage()

        ''' <summary>Процедура вызывается перед печатью каждой страницы</summary>
        Private Sub QueryPageSettings(ByVal sender As Object, ByVal ev As QueryPageSettingsEventArgs)
            ev.PageSettings.Landscape = (ev.PageSettings.PrintableArea.Height > ev.PageSettings.PrintableArea.Width)
        End Sub ' End QueryPageSettings()

        ''' <summary>Процедура печати</summary>
        Private Sub Print()
            If c_streams Is Nothing Or c_streams.Count = 0 Then Exit Sub

            Dim printDoc As New PrintDocument()
            printDoc.PrinterSettings.PrinterName = CONST_STRING_PRINTER_NAME

            If Not printDoc.PrinterSettings.IsValid Then
                Dim msg As String = String.Format("Не правильные параметры принтера ""{0}"".", CONST_STRING_PRINTER_NAME)
                WLog(msg, EventLogEntryType.Error)                      ' Запись ошибки принтера в лог-файл
                Exit Sub
            End If
            AddHandler printDoc.QueryPageSettings, AddressOf Me.QueryPageSettings
            AddHandler printDoc.PrintPage, AddressOf Me.PrintPage
            Try
                printDoc.Print()
            Catch ex As Exception
                WLog("Ошибка печати накладной", EventLogEntryType.Error)
            End Try

        End Sub ' End Print()

#End Region ' "Процедуры печати"

    End Class ' End Class cls_Naklad


Всё в общем-то хорошо работает и накладная улетает печататься в фоне. Даже если закрыть всё приложение, то она распечатается до конца, но... стандартное виндовое окно "Печать..." с кнопкой "Отмена" картину портит.
В культурной столице проститутки берут книгами...

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 13.01.2008 (Вс) 14:06

Не все форумы одинаково бесполезны :)

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=14511&SiteID=1
В культурной столице проститутки берут книгами...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList  
cron