Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Печать части окна программы. Нужно напечать часть окошка программы 
:(
    Опции темы
ldk13
Дата 9.11.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.10.2008
Где: Питер

Репутация: нет
Всего: нет



Помогите пожалуйста, нужно напечатать часть окна программы. Все окно размером 1010 на 570. А напечатать надо по координатам прямоугольника 10(Х начальное),10(У начальное),800(ширина),500(длина).

я так понимаю нужно использовать printdialog?

Как это сделать?

PM MAIL   Вверх
ldk13
Дата 9.11.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.10.2008
Где: Питер

Репутация: нет
Всего: нет



Ну или вообще как напечатать окно формы? Хотя бы целиком все. Как вообще печатать?
PM MAIL   Вверх
mr.DUDA
Дата 9.11.2008, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Да проще простого!
Код
Rectangle rect = new Rectangle(10, 10, 800, 500);
Bitmap bmp = new Bitmap(rect.Width, rect.Height);
DrawToBitmap(bmp, rect);


Всё, в битмапе лежит твоя форма. Подразумевается что код выполняется для формы; если нужно скопировать содержимое произвольного контрола, юзаем myControl.DrawToBitmap и так далее.


--------------------
user posted image
PM MAIL WWW   Вверх
ldk13
Дата 9.11.2008, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.10.2008
Где: Питер

Репутация: нет
Всего: нет



mr.DUDA, а как напечать вывести этот bmp? :(

printDialog1.ShowDialog(); c помощью вот этого.
PM MAIL   Вверх
mr.DUDA
Дата 9.11.2008, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



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

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Bitmap _bmp;

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            Rectangle rect = new Rectangle(10, 10, 800, 500);
            _bmp = new Bitmap(rect.Width, rect.Height);
            DrawToBitmap(_bmp, rect);

            PrintDialog dlg = new PrintDialog();
            dlg.Document = new System.Drawing.Printing.PrintDocument();

            if (dlg.ShowDialog(this) == DialogResult.OK)
            {
                dlg.Document.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(Document_PrintPage);
                dlg.Document.Print();
            }
        }

        void Document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawImage(_bmp, new Point(e.MarginBounds.Left, e.MarginBounds.Top));
        }
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
ldk13
Дата 9.11.2008, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 11.10.2008
Где: Питер

Репутация: нет
Всего: нет



Сделал так:

Код

private void button17_Click(object sender, EventArgs e)
        {
            Rectangle rect = new Rectangle(10, 10, 800, 500);
            _bmp = new Bitmap(rect.Width, rect.Height);
            DrawToBitmap(_bmp, rect);
            PrintDialog dlg = new PrintDialog();
            dlg.Document = new System.Drawing.Printing.PrintDocument();
            if (dlg.ShowDialog(this) == DialogResult.OK)
            {
                dlg.Document.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(Document_PrintPage);
                dlg.Document.Print();
            }
        }

        void Document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawImage(_bmp, new Point(e.MarginBounds.Left, e.MarginBounds.Top));
        }

Часть окна напечатать получилось, спасибо! Но она печатается пустое... А надо что было с тем, что на нем нарисовано...

Как на картинке.

Квадрат не захватывает почему то рисунок.

+ 
еще по теме, когда окно сворачивается или разворачивается нарисованное теряется.. Пробовал исправить обработчиком Activated. Но это помогает частично, все равно когда сворачиваешь и разворачиваешь рисунок пропадает, надо перисовать кнопкой...

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  _________1______.jpg 97,05 Kb
PM MAIL   Вверх
mr.DUDA
Дата 9.11.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



В DrawToBitmap как-то по кривому обрабатывается переданный прямоугольник. Можно отрисовать полнотстью всё окно в один битмап, затем создать Graphics из нового битмапа по требуемым размерам и сделать туда DrawImage первого битмапа.

Насчёт сворачивать-разворачивать, скорее всего нужно обработать первое событие Paint после Activated и уже там делать DrawToBitmap, там размеры окна будут актуальны.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.