Здраствуйте, попомогите кто сможет и чем сможет, нужна вообще любая помощь и соображения. Проблема состоит в том, что имеется некая форма Windows Form в стандартном Windows Application, на форме расположены 3 обьекта: PictureBox1 и PictureBox2 в верхней части экрана с параметром Dock, также Panel 1 сверху, Panel 2 справа и Panel 3 слева.
Примерно все выглядит так:
--------------------------
PictureBox1
--------------------------
PictrureBox2
--------------------------
Panel1
--------------------------
| p
| a
| n
Panel3 | e
| l
|
| 2
--------------------------
В обьекте Panel3 находятся обьекты PictureBox, в неопределенном количестве (т.е. добавляются исходя из количества данных в БД в процессе выполнения), после их вывода на экран возникает необходимость в печати, вот тут то и вся загвоздка - нужно вывести все содержимое обьекта Panel3 на печать, включая то, что не поместилось на экране.
С помощью программного снятия скриншота с экрана или определенной его части ничего не получается.
так не пробывал?
1 - находишь окно с которого копировать (FindWindow)
2 - дальше ищешь на этом окне Panel3 (FindWindowEx)
3 - ну а когда уже имеешь хэндл Panel3... BitBlt или др
Вот что я перепробовал исходя из логических размышлений, я сначала решил нарисовать на отдельной форме "прямоугольники" исходя из положений каждого нового добавленного PictureBox, кстати, в PictureBox не хранится у меня изображения, я так просто решил изобразить прямоугольник без GDI, просто добавив значение Picturebox Bordersize = 1, так вот, код действует по такому принципу:
Вот что я перепробовал исходя из логических размышлений, я сначала решил нарисовать на отдельной форме "прямоугольники" исходя из положений каждого нового добавленного PictureBox, кстати, в PictureBox не хранится у меня изображения, я так просто решил изобразить прямоугольник без GDI, просто добавив значение Picturebox Bordersize = 1, так вот, код действует по такому принципу:
Найти элементы управления PictureBox и для каждого найденного прорисовывать изображение на форме 2 исходя из позиции и размеров каждого найденного обьекта, но и тут загвоздка, изображение тупо не помещается на экране, просто количество этих "прмоугольников" может быть разным, они добовляются в процессе разработки.
Потом я решил попробывать сделать также, только через CrystalDocument, но увы, ненашел мануала по программному добавлению элементов в документ, а также программного его создания,
Решил попробывать вывести также в PDF - нет норм бесплатных библиотек которые бы это сделали (если найдете - дайте с мануалом),
Решил WPF, так также не знаю как программно добавлять ЭУ,
Теперь HTML, там мне немного не подходит набор инструментов, хотя есть одна задумка
А рисунок выглядит примерно так:
Вот что я перепробовал исходя из логических размышлений, я сначала решил нарисовать на отдельной форме "прямоугольники" исходя из положений каждого нового добавленного PictureBox, кстати, в PictureBox не хранится у меня изображения, я так просто решил изобразить прямоугольник без GDI, просто добавив значение Picturebox Bordersize = 1, так вот, код действует по такому принципу:
Найти элементы управления PictureBox и для каждого найденного прорисовывать изображение на форме 2 исходя из позиции и размеров каждого найденного обьекта, но и тут загвоздка, изображение тупо не помещается на экране, просто количество этих "прмоугольников" может быть разным, они добовляются в процессе разработки.
Потом я решил попробывать сделать также, только через CrystalDocument, но увы, ненашел мануала по программному добавлению элементов в документ, а также программного его создания,
Решил попробывать вывести также в PDF - нет норм бесплатных библиотек которые бы это сделали (если найдете - дайте с мануалом),
Решил WPF, так также не знаю как программно добавлять ЭУ,
Теперь HTML, там мне немного не подходит набор инструментов, хотя есть одна задумка
А рисунок выглядит примерно так:
Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
Dim p As New System.Drawing.Pen(Brushes.Black)
Dim poi(4) As Point
Dim leftMargin As Single = ev.MarginBounds.Left
Dim topMargin As Single = ev.MarginBounds.Top
linesPerPage = RichTextBox1.Lines.Length
While count < linesPerPage
yPos = topMargin + count * printFont.GetHeight(ev.Graphics)
poi(0) = New Point(CInt(leftMargin), CInt(yPos))
poi(1) = New Point(CInt(leftMargin), CInt(topMargin + (count + 1) * printFont.GetHeight(ev.Graphics)))
poi(2) = New Point(CInt(leftMargin + Len(line) * printFont.SizeInPoints), poi(1).Y)
poi(3) = New Point(poi(2).X, poi(0).Y)
poi(4) = New Point(poi(0).X, poi(0).Y)
ev.Graphics.DrawLines(p, poi)
count += 1
End While
жестоко.. но работает.. каждую линию в память...
и откуда pd_PrintPage берется:
Dim pd As New PrintDocument()
AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage
pd.Print()