Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Проблема с выводом на печать Добавлено: 12.02.10 03:15  

Автор вопроса:  duh | Web-сайт: aworld.at.ua/
   Здраствуйте, попомогите кто сможет и чем сможет, нужна вообще любая помощь и соображения. Проблема состоит в том, что имеется некая форма 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 на печать, включая то, что не поместилось на экране.
С помощью программного снятия скриншота с экрана или определенной его части ничего не получается.

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #1 Добавлено: 12.02.10 10:20
так не пробывал?
1 - находишь окно с которого копировать (FindWindow)
2 - дальше ищешь на этом окне Panel3 (FindWindowEx)
3 - ну а когда уже имеешь хэндл Panel3... BitBlt или др

Ответить

Номер ответа: 2
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #2 Добавлено: 12.02.10 10:24
я так делал с текстом (SendMessageStr и WM_GETTEXT), но вот с изображениями не пробывал...

Ответить

Номер ответа: 3
Автор ответа:
 duh



Вопросов: 3
Ответов: 6
 Web-сайт: aworld.at.ua/
 Профиль | | #3
Добавлено: 12.02.10 13:17
Вот что я перепробовал исходя из логических размышлений, я сначала решил нарисовать на отдельной форме "прямоугольники" исходя из положений каждого нового добавленного PictureBox, кстати, в PictureBox не хранится у меня изображения, я так просто решил изобразить прямоугольник без GDI, просто добавив значение Picturebox Bordersize = 1, так вот, код действует по такому принципу:

Ответить

Номер ответа: 4
Автор ответа:
 duh



Вопросов: 3
Ответов: 6
 Web-сайт: aworld.at.ua/
 Профиль | | #4
Добавлено: 12.02.10 13:22
Вот что я перепробовал исходя из логических размышлений, я сначала решил нарисовать на отдельной форме "прямоугольники" исходя из положений каждого нового добавленного PictureBox, кстати, в PictureBox не хранится у меня изображения, я так просто решил изобразить прямоугольник без GDI, просто добавив значение Picturebox Bordersize = 1, так вот, код действует по такому принципу:
Найти элементы управления PictureBox и для каждого найденного прорисовывать изображение на форме 2 исходя из позиции и размеров каждого найденного обьекта, но и тут загвоздка, изображение тупо не помещается на экране, просто количество этих "прмоугольников" может быть разным, они добовляются в процессе разработки.
Потом я решил попробывать сделать также, только через CrystalDocument, но увы, ненашел мануала по программному добавлению элементов в документ, а также программного его создания,
Решил попробывать вывести также в PDF - нет норм бесплатных библиотек которые бы это сделали (если найдете - дайте с мануалом),
Решил WPF, так также не знаю как программно добавлять ЭУ,
Теперь HTML, там мне немного не подходит набор инструментов, хотя есть одна задумка
А рисунок выглядит примерно так:

-------------------------
| |
-------------------------

-------------------------
| |
-------------------------

Ответить

Номер ответа: 5
Автор ответа:
 duh



Вопросов: 3
Ответов: 6
 Web-сайт: aworld.at.ua/
 Профиль | | #5
Добавлено: 12.02.10 13:26
Вот что я перепробовал исходя из логических размышлений, я сначала решил нарисовать на отдельной форме "прямоугольники" исходя из положений каждого нового добавленного PictureBox, кстати, в PictureBox не хранится у меня изображения, я так просто решил изобразить прямоугольник без GDI, просто добавив значение Picturebox Bordersize = 1, так вот, код действует по такому принципу:
Найти элементы управления PictureBox и для каждого найденного прорисовывать изображение на форме 2 исходя из позиции и размеров каждого найденного обьекта, но и тут загвоздка, изображение тупо не помещается на экране, просто количество этих "прмоугольников" может быть разным, они добовляются в процессе разработки.
Потом я решил попробывать сделать также, только через CrystalDocument, но увы, ненашел мануала по программному добавлению элементов в документ, а также программного его создания,
Решил попробывать вывести также в PDF - нет норм бесплатных библиотек которые бы это сделали (если найдете - дайте с мануалом),
Решил WPF, так также не знаю как программно добавлять ЭУ,
Теперь HTML, там мне немного не подходит набор инструментов, хотя есть одна задумка
А рисунок выглядит примерно так:

-------------------------
| |--------|
------------------------- | |--------------------|
                                 |----------| |------|
------------------------- | |--------------------| |
| |--------| |
------------------------- | |--------------|
                                                                        |--------| |
------------------------- | |--------------|
| |--------| |
------------------------- | |--------------------| |
                                 |----------| |-------
------------------------- | |--------------------|
| |--------|
-------------------------
| |--------|
-------------------------

-------------------------
| |--------|
-------------------------

И так до бесконечности в высоту и ширину в зависимоти от необходимого пользователю количетсва ячеек

Ответить

Номер ответа: 6
Автор ответа:
 duh



Вопросов: 3
Ответов: 6
 Web-сайт: aworld.at.ua/
 Профиль | | #6
Добавлено: 12.02.10 13:27
Короче не получилось изображения, программа для генерирования "Пули" (Создания отборочных листов для соревнований)

Ответить

Номер ответа: 7
Автор ответа:
 duh



Вопросов: 3
Ответов: 6
 Web-сайт: aworld.at.ua/
 Профиль | | #7
Добавлено: 12.02.10 13:28
А может прорисовать все в памяти.... кто знает как рисовать в памяти?

Ответить

Номер ответа: 8
Автор ответа:
 Beseech



Вопросов: 0
Ответов: 2
 Профиль | | #8 Добавлено: 12.07.10 05:56
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()

Ответить

Номер ответа: 9
Автор ответа:
 Beseech



Вопросов: 0
Ответов: 2
 Профиль | | #9 Добавлено: 12.07.10 06:06
printFont ето просто Font , например:

Private printFont As Font
printFont = New Font("Arial", 10, FontStyle.Italic)

count ето просто int (= я из своего примера ето взял, где из RichTextBox1 таблицу печатал
текст туда так вставлял:
ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())

где line as string, в частности
line = RichTextBox1.Lines(count)

Так-то это пример из МДСН http://msdn.microsoft.com/ru-ru/library/system.drawing.printing.printdocument(v=VS.90).aspx

Ответить

Номер ответа: 10
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #10 Добавлено: 13.07.10 15:13
Есть АПИшка для создания растра в памяти из массива байт, щас непомню как называется.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам