Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/35: Рейтинг темы: голосов - 35, средняя оценка - 4.89
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
1

Печать через принтер

23.10.2009, 22:43. Показов 7325. Ответов 14
Метки нет (Все метки)

Возникла такая проблема - огромный рисунок нужно разбить на страницы и распечатать - рисунок в TImage - использую TPrinter - все получается только почему то текст печатает - а изображение не получается внести на канву TPrinter. Кто нить сталкивался с этим? Может есть другие решения наиболее лучшие помимо TPrinter. Подскажите пожайлуста.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2009, 22:43
Ответы с готовыми решениями:

Печать документов через C++ Builder
Здравствуйте! При написании программы для танцевальных конкурсов, я столкнулся со следующей...

Печать содержимого формы через bmp
Добро всем! :senor: Возникла необходимость распечатать форму, пробую передать координаты: int x =...

Печать отчетов через TWordDocument
Добрый день, как сделать печать заранее подготовленный документ? вариант с ole сервером и...

Печать через удаленный принтер
Здравствуйте, к главному компу который отвечает за файловое хранилище и за принтерскую печать...

14
14 / 14 / 1
Регистрация: 17.10.2009
Сообщений: 58
24.10.2009, 15:39 2
Все должно нормально работать. код?
0
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
25.10.2009, 11:13  [ТС] 3
Вот код - ни CopyRect ни Draw не выводит

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
w=WidthSpinFormat->Value*3.78;
h=HeightSpinFormat->Value*3.78;
TPrinter *Prntr = Printer();
Prntr->BeginDoc();
TRect Dest,Source;
Dest=Rect(Point(0,0),Point(w,h));
Prntr->Canvas->Draw(0,0,Form2->Image2->Picture->Bitmap);
for(int i=0;i<(2*(int)(maxx*k)+40);i+=w)
  {
  for(int j=0;j<((int)(maxy*k)+20);j+=h)
   {
   Source=Rect(Point(i,j),Point(i+w,j+h));
   Prntr->Canvas->CopyRect(Dest,FormN->Image1->Canvas,Source);
   Prntr->Canvas->Draw((Prntr->PageWidth-FormN->Image2->Picture->Bitmap->Width)/2,40,
      FormN->Image2->Picture->Bitmap);
   Prntr->Canvas->TextOut(100,100,"ля-ля-ля");
   Prntr->NewPage();
   }
  }
Prntr->EndDoc();
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.10.2009, 12:09 4
Любопытно, но если в TImage хранится рисунок jpg, то следующий код работать не будет:
C++
1
Form1->Canvas->Draw(0,0,Image1->Picture->Bitmap);
А если ты сделаешь так:
C++
1
2
3
TJPEGImage*image=new TJPEGImage();
image->LoadFromFile("E:\\картинки\\Guilty gear\\1.jpg");
Prntr->Canvas->Draw(0,0,image);
0
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
25.10.2009, 12:12  [ТС] 5
В TImage храница рисунок нарисованных обычными функциями MoveTo и LineTo на канве - никакие файлы я не подгружаю - подрузить то проще было

Хотелось бы вывести как раз часть рисунка т.е. типа
Prntr->Canvas->CopyRect(Dest,FormN->Image1->Canvas,Source); - если вместо Prntr поставить другой TImage то все работает - вот в этом то и вопрос почемку не работает Prntr - и как правильно сделать чтоб он печатал часть рисунка
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.10.2009, 12:19 6
А если
C++
1
Prntr->Canvas->Draw(0,0,Image1->Picture->Graphic);
0
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
25.10.2009, 12:21  [ТС] 7
ну так у меня в коде аналогичная строка - следующая за CopyRect - также не идет
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.10.2009, 12:23 8
У тебя в топике 3 там записано
C++
1
Image1->Picture->Bitmap
А я предлагаю
C++
1
Image1->Picture->Graphic
Это большая разница.
0
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
25.10.2009, 12:27  [ТС] 9
Проверил - не прокатило - пустая страница
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.10.2009, 12:31 10
А не мог бы ты скинуть проектик. Так гадать можно очень долго. У тебя рисунок несколько раз рисуется, возможно какое-то из рисований затирает все.
0
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
25.10.2009, 12:32  [ТС] 11
куда скинуть?
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.10.2009, 12:35 12
Если не большой(удали кстати из папки файлы tds), то приаттачь к сообщению(расширенный режим ответа). Или там www.dump.ru, rapidshare, megaupload, куда хочешь.
0
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
25.10.2009, 12:36  [ТС] 13
щас облегчу его

сначала кнопка выполнить - потом начать печать - проблемнный код в событие нажать на кнопку начать печать
Вложения
Тип файла: rar ForShowPir.rar (11.7 Кб, 35 просмотров)
0
1853 / 710 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.10.2009, 13:36 14
Ммда, вот такой код работает нормально. Картинка выводится.
C++
1
2
3
4
5
6
7
8
9
10
   printer->BeginDoc();
   Source=Rect(Point(i,j),Point(i+w,j+h));
   Graphics::TBitmap*bitmap=new Graphics::TBitmap();
   bitmap->Width=Form2->Image1->Picture->Width;
   bitmap->Height=Form2->Image1->Picture->Height;
   bitmap->Canvas->Draw(0,0,Form2->Image1->Picture->Graphic);
   bitmap->SaveToFile("E:\\1.bmp");
   BitBlt(printer->Canvas->Handle,0,0,bitmap->Width,bitmap->Height,bitmap->Canvas->Handle,0,0,SRCCOPY);
   delete bitmap;
   printer->EndDoc();
Правда, она выводится микроскопической, так как разрешение у принтера гораздо выше чем у монитора, поэтому используй StretchBlt, и увеличивай ее.

Добавлено через 2 минуты
Ой, нужно вообще вот так:
C++
1
2
3
 printer->BeginDoc();
   BitBlt(printer->Canvas->Handle,0,0,bitmap->Width,bitmap->Height,Form2->Image1->Picture->Bitmap->Canvas->Handle,0,0,SRCCOPY);
   printer->EndDoc();
0
33 / 32 / 2
Регистрация: 26.01.2009
Сообщений: 592
25.10.2009, 21:09  [ТС] 15
Просто через канву не идет похоже. Спасибо за совет

не выводит все равно - вот так вот выводит если прямо на нем рисовать
C++
1
2
Prntr->Canvas->Pen->Color=clBlack;
Prntr->Canvas->Rectangle(10,10,100,100);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2009, 21:09

Печать на домашний принтер через интернет
Здравствуйте форумчане, В течении дня мне нужно высылать на печать пачки документов с телефона...

Печать через RS-232 на принтер Axiohm A794-2105
Никак не могу переключить этот принтер на 866 кодовую страницу. Последовательность esc #27+#116+#17...

Как из виртуальной Винды настроить печать через подсоединенный к компу принтер?
Как из виртуальной Винды настроить печать через подсоединенный к компу принтер?

Определить количество нечетных чисел, результат выдать на печать через принтер
Создать файл BEN1? содержащий целые значения. Определить кол-во нечетных чисел, результат выдать на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru