Печать на бланке

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

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

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.05.2007 (Пт) 15:01

Nord777, покажи таки код печати фактического визуального содержимого некоего контрола на Graphics принтера с разрешением принтера (а не экрана).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение asharky » 04.05.2007 (Пт) 16:28

Nord777 писал(а):А напечатать и отрендерить чем отличается? Как это ты понимаешь?
Я так понимаю, что у любого графического изображения (формы) есть такой параметр как dpi (количество точек на линейный дюйм). И если для качественного отображения этого рисунка на экране монитора вполне годится 96 точек на дюйм, то для печати на листе бумаги этот параметр должен составлять от 300 dpi. И если мы хотим сохранить линейные размеры печатаемого рисунка, то простым изменением параметра dpi мы ничего достичь не сможем - преобразование будет осуществляться по какому-либо апроксимирующему закону, но непременно возникнут искажения. А выведя на печать исходный (96dpi) рисунок с разрешением, например, 600dpi, и не преобразуя никак количество пикселей, а значит не внося искажениы в исходник, мы его банально уменьшим в 600/96=6.25 раза.

1. Рендеринг контрола - это получение объекта класса Graphics из него. Искользуем метод <object>.GreateGraphics()
2. "Напечатать" это: вывести графический объект на печать на принтер.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 04.05.2007 (Пт) 18:20

GSerg писал(а):Nord777, покажи таки код печати фактического визуального содержимого некоего контрола на Graphics принтера с разрешением принтера (а не экрана).

Код: Выделить всё
Public Class Form1
    Dim BtnBounds() As PointF
    Dim FntSize() As PointF

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Using G As Graphics = Me.CreateGraphics
            BtnBounds = New PointF() _
            { _
            New PointF(Button1.Bounds.X, Button1.Bounds.Y), _
            New PointF(Button1.Bounds.Width, Button1.Bounds.Height) _
            }

            FntSize = New PointF() {New PointF(Button1.Font.Size, 0)}

            'Преобразуем координаты Button1 из пикселей в миллиметры
            G.PageUnit = GraphicsUnit.Millimeter
            G.TransformPoints(Drawing2D.CoordinateSpace.Page, Drawing2D.CoordinateSpace.Device, BtnBounds)
        End Using
       
        PrintDocument1.Print()
    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        'преобразовать из миллиметров в с систему координат принтера
        e.Graphics.PageUnit = GraphicsUnit.Millimeter
        e.Graphics.TransformPoints(Drawing2D.CoordinateSpace.Device, Drawing2D.CoordinateSpace.Page, BtnBounds)

        'преобразовать из поинтов в с систему координат принтера
        e.Graphics.PageUnit = GraphicsUnit.Point
        e.Graphics.TransformPoints(Drawing2D.CoordinateSpace.Device, Drawing2D.CoordinateSpace.Page, FntSize)


        Dim R As New Rectangle(BtnBounds(0).X, BtnBounds(0).Y, BtnBounds(1).X, BtnBounds(1).Y)
        Dim Fnt As New Font(Button1.Font.FontFamily, FntSize(0).X, FontStyle.Regular)

        ButtonRenderer.DrawButton(e.Graphics, R, Button1.Text, Fnt, False, VisualStyles.PushButtonState.Normal)

    End Sub
End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.05.2007 (Пт) 18:27

ButtonRenderer.DrawButton

А чего самый простой пример?
Нарисуй листбокс, текстбокс нарисуй, нарисуй листвью... Причём именно так, как они в настоящий момент выглядят в программе (то же состояние прокрутки etc).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 04.05.2007 (Пт) 18:28

Я так понимаю, что у любого графического изображения (формы) есть такой параметр как dpi (количество точек на линейный дюйм).

- согласен
И если для качественного отображения этого рисунка на экране монитора вполне годится 96 точек на дюйм, то для печати на листе бумаги этот параметр должен составлять от 300 dpi.

- согласен
И если мы хотим сохранить линейные размеры печатаемого рисунка, то простым изменением параметра dpi мы ничего достичь не сможем - преобразование будет осуществляться по какому-либо апроксимирующему закону, но непременно возникнут искажения. А выведя на печать исходный (96dpi) рисунок с разрешением, например, 600dpi, и не преобразуя никак количество пикселей, а значит не внося искажениы в исходник, мы его банально уменьшим в 600/96=6.25 раза.

- тоже согласен

Единственное чего ты так до сих пор не понял, так это то, что контролы рисуются виндой не с помощью DrawImage :D
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 04.05.2007 (Пт) 18:34

GSerg
Это более геморно, но тоже реализуемо.
Напрашивается вопрос - а на фиг это надо?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.05.2007 (Пт) 18:52

Потому что всё это может встречаться на форме.

И поэтому правильно делть отчёты средствами создания отчётов, а не через... хм... альтернативные варианты.

А ListView не нарисуешь, у тебя ListViewRenderer нет... и листбокс тоже... И не только их.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 04.05.2007 (Пт) 19:26

По твоему получается что и форму нарисовать нельзя, однако это не так.
VisualStyleRenderer Class - он это реализует (не проверял, но скорее всего рисует все контролы)

И поэтому правильно делать отчёты средствами создания отчётов, а не через... хм... альтернативные варианты

Я с тобой полностью согласен и не понимаю почему автор так уперся в печать контролов на форме
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

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

Сообщение asharky » 04.05.2007 (Пт) 20:29

Nord777 писал(а):
И поэтому правильно делать отчёты средствами создания отчётов, а не через... хм... альтернативные варианты
Я извиняюсь, но не подскажет кто-либо возможно-ли делать "отчеты" средствами VB Express ? У меня нет другого инструмента.

Опять же без кода - да, или нет. Я постараюсь сам разобраться и не задавать лишних вопросов.

Nord777 писал(а):Я с тобой полностью согласен и не понимаю почему автор так уперся в печать контролов на форме
Если под "автором" подразумевают не vit.b, который начал эту тему, а меня, то причина проста: я пока начинающий пользователь и делаю то, что мне проще. "Отчеты" - тёмный лес для меня, увы.

Nord777 писал(а):...Единственное чего ты так до сих пор не понял, так это то, что контролы рисуются виндой не с помощью DrawImage :D
Бесспорно. Для того я и пришел сюда поучиться у старших и доброжелательных товарищей.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.05.2007 (Пт) 20:40

asharky писал(а):Я извиняюсь, но не подскажет кто-либо возможно-ли делать "отчеты" средствами VB Express ? У меня нет другого инструмента.

Ну дык http://bbs.vbstreets.ru/viewtopic.php?p=6660156#6660156 ?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение asharky » 05.05.2007 (Сб) 13:37

GSerg писал(а):
asharky писал(а):Я извиняюсь, но не подскажет кто-либо возможно-ли делать "отчеты" средствами VB Express ? У меня нет другого инструмента.

Ну дык http://bbs.vbstreets.ru/viewtopic.php?p=6660156#6660156 ?
Спасибо ещё раз :)

Мне вот это http://www.gotreportviewer.com/ может оказаться полезным в данной ситуации?

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

Сообщение asharky » 06.05.2007 (Вс) 1:35

asharky писал(а):Мне вот это http://www.gotreportviewer.com/ может оказаться полезным в данной ситуации?
Вопрос снят. Подходит. Полезная штука...

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

Сообщение asharky » 09.05.2007 (Ср) 12:59

asharky писал(а):
asharky писал(а):Мне вот это http://www.gotreportviewer.com/ может оказаться полезным в данной ситуации?
Вопрос снят. Подходит. Полезная штука...
Всё хорошо, только вот на версию Express ReportViewer встаёт только на Visual Web Developer. А на Basic коряво - нет графического редактора rdlc файлов.

Вопрос:

1. Если вот тут покупать Visual Studio Pro : http://www.quarta.ru/Pages/article.aspx ... 85&cPage=1 - это "правильное" место для таких покупок?
2. Может существует в природе визуальный free редактор файлов .rdlc ?

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

Сообщение asharky » 10.05.2007 (Чт) 22:23

И ти-ши-на..... :roll:

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

Сообщение asharky » 03.01.2008 (Чт) 23:48

Вэйк Ап :)

А в фоновом режиме как отчеты печатать?
В культурной столице проститутки берут книгами...

Пред.

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

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

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

    TopList