Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как распечатать groupbox ( vb.net )

49K
09 июня 2009 года
alextd
2 / / 09.06.2009
help, как можно распечатать сожержимое groupbox, и возможно ли это вообще??????:cool:
241
11 июня 2009 года
Sanila_san
1.6K / / 07.06.2005
Не знаю, как на форуме вообще, а лично я очень приветствую, когда человек не споткнулся о задачу, а взялся решать, хотя бы и через пятую точку. Поэтому - ваш код в студию, по нему и поможем. Пока же скажу, что содержимое групбокса распечатать можно, и даже представляю тупое решение этого. Но - не скажу, оно лежит на поверхности.
49K
11 июня 2009 года
tiagat
9 / / 20.05.2009
вот кусок кода. Все, что тебе требуется - взять любой пример печати формы и подставить GroubBox как источник

Код:
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

namespace WindowsFormsApplication16
{
    public partial class Form1 : Form
    {
        [System.Runtime.InteropServices.DllImport("gdi32.dll")]
        public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
        private Bitmap memoryImage;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Graphics mygraphics = this.groupBox1.CreateGraphics();
            Size s = this.groupBox1.Size;
            memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
            Graphics memoryGraphics = Graphics.FromImage(memoryImage);
            IntPtr dc1 = mygraphics.GetHdc();
            IntPtr dc2 = memoryGraphics.GetHdc();
            BitBlt(dc2, 0, 0, groupBox1.ClientRectangle.Width, groupBox1.ClientRectangle.Height, dc1, 0, 0, 13369376);
            mygraphics.ReleaseHdc(dc1);
            memoryGraphics.ReleaseHdc(dc2);
           
            PrintDocument printDocument = new PrintDocument();
            printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
            PrintPreviewDialog dlg = new PrintPreviewDialog();
            dlg.Document = printDocument;
            dlg.ShowDialog();

            //printDocument.Print();
        }

        void printDocument_PrintPage(object sender, PrintPageEventArgs e)
        {
            Rectangle destRect = new System.Drawing.Rectangle(100, 100, groupBox1.Width, groupBox1.Height);
            e.Graphics.DrawImage(memoryImage, destRect, 0, 0, memoryImage.Width, memoryImage.Height, System.Drawing.GraphicsUnit.Pixel);
        }
    }
}
5
12 июня 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: tiagat
вот кусок кода. Все, что тебе требуется - взять любой пример печати формы и подставить GroubBox как источник

Гениально! Вы бы еще ассемблерную вставку сделали.
Есть такой метод у класса Control (от него все визуальные компоненты наследованы, в т.ч. и GroupBox):

 
Код:
public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);
Как думаете, что делает?

Ну, далее полагаю, что герр-автор вполне себе способен распечатать битмап.
49K
16 июня 2009 года
tiagat
9 / / 20.05.2009
Я согласен, метод DrawToBitmap весьма интересней выглядит в силу просто ты его использования. Но не стоит забывать о его ограничениях:

The DrawToBitmap method is not supported for ActiveX controls. You can override the OnPrint event and provide custom printing logic if required.

The DrawToBitmap method has the following limitations:
* An ArgumentException might be thrown for large bitmaps. The maximum allowable size varies by machine.
* DrawToBitmap does not support the Ink controls for the Windows XP Tablet PC Edition 2005 operating system.
* DrawToBitmap does not draw a child TextBox if the Visible property of the TextBox is set to false.
* Controls inside containers are rendered in reverse order.
* DrawToBitmap is not fully functional for the RichTextBox; only the border of a bitmap is drawn.

Соответственно, он абсолютно бесполезен если:
- в контейнере находится RichTextBox. Прорисуется только бордюр и серый фон;
- если в контейнере есть несколько слоев или контролы перекрывают друг друга. Прорисовка будет произведена в рекурсивном порядке и конечный результат окажется неузнаваемым.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог