Я так понимаю, что у любого графического изображения (формы) есть такой параметр как dpi (количество точек на линейный дюйм). И если для качественного отображения этого рисунка на экране монитора вполне годится 96 точек на дюйм, то для печати на листе бумаги этот параметр должен составлять от 300 dpi. И если мы хотим сохранить линейные размеры печатаемого рисунка, то простым изменением параметра dpi мы ничего достичь не сможем - преобразование будет осуществляться по какому-либо апроксимирующему закону, но непременно возникнут искажения. А выведя на печать исходный (96dpi) рисунок с разрешением, например, 600dpi, и не преобразуя никак количество пикселей, а значит не внося искажениы в исходник, мы его банально уменьшим в 600/96=6.25 раза.Nord777 писал(а):А напечатать и отрендерить чем отличается? Как это ты понимаешь?
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
ButtonRenderer.DrawButton
Я так понимаю, что у любого графического изображения (формы) есть такой параметр как dpi (количество точек на линейный дюйм).
И если для качественного отображения этого рисунка на экране монитора вполне годится 96 точек на дюйм, то для печати на листе бумаги этот параметр должен составлять от 300 dpi.
И если мы хотим сохранить линейные размеры печатаемого рисунка, то простым изменением параметра dpi мы ничего достичь не сможем - преобразование будет осуществляться по какому-либо апроксимирующему закону, но непременно возникнут искажения. А выведя на печать исходный (96dpi) рисунок с разрешением, например, 600dpi, и не преобразуя никак количество пикселей, а значит не внося искажениы в исходник, мы его банально уменьшим в 600/96=6.25 раза.
И поэтому правильно делать отчёты средствами создания отчётов, а не через... хм... альтернативные варианты
Я извиняюсь, но не подскажет кто-либо возможно-ли делать "отчеты" средствами VB Express ? У меня нет другого инструмента.Nord777 писал(а):И поэтому правильно делать отчёты средствами создания отчётов, а не через... хм... альтернативные варианты
Если под "автором" подразумевают не vit.b, который начал эту тему, а меня, то причина проста: я пока начинающий пользователь и делаю то, что мне проще. "Отчеты" - тёмный лес для меня, увы.Nord777 писал(а):Я с тобой полностью согласен и не понимаю почему автор так уперся в печать контролов на форме
Бесспорно. Для того я и пришел сюда поучиться у старших и доброжелательных товарищей.Nord777 писал(а):...Единственное чего ты так до сих пор не понял, так это то, что контролы рисуются виндой не с помощью DrawImage
asharky писал(а):Я извиняюсь, но не подскажет кто-либо возможно-ли делать "отчеты" средствами VB Express ? У меня нет другого инструмента.
Спасибо ещё разGSerg писал(а):asharky писал(а):Я извиняюсь, но не подскажет кто-либо возможно-ли делать "отчеты" средствами VB Express ? У меня нет другого инструмента.
Ну дык http://bbs.vbstreets.ru/viewtopic.php?p=6660156#6660156 ?
Вопрос снят. Подходит. Полезная штука...asharky писал(а):Мне вот это http://www.gotreportviewer.com/ может оказаться полезным в данной ситуации?
Всё хорошо, только вот на версию Express ReportViewer встаёт только на Visual Web Developer. А на Basic коряво - нет графического редактора rdlc файлов.asharky писал(а):Вопрос снят. Подходит. Полезная штука...asharky писал(а):Мне вот это http://www.gotreportviewer.com/ может оказаться полезным в данной ситуации?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67