Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2007, 17:22   #1
aleksei199
 
Регистрация: 26.11.2007
Сообщений: 3
По умолчанию Как вывести изображение из paintbox на принтер, если оно занимает 2 экрана?

Как вывести изображение из paintbox на принтер, если оно занимает 2 экрана вниз? (Экран 19").

Проблема распечатать график, который строю в Paintbox.
Высота Paintbox 1300, ширина 873. На форме включен autoscrolling (для просмотра графика). График по размеру умещается на формат А4.

Если не трудно, то можно поподробнее КАК...
Срочно...
aleksei199 вне форума Ответить с цитированием
Старый 29.11.2007, 18:49   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А вы хоть пробовали печатать? Пэйнтбоксу все равно, сколько экранов занимает картинка. Не поместится на максимально допустимый для принтера лист - будет печатать из кусков. Склеите потом.
А если хотите поместить на лист - используйте ресайз рисунка...
mihali4 вне форума Ответить с цитированием
Старый 29.11.2007, 19:10   #3
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

1300 х 873 - запросто поместиться на А4. Учитываем, что разрешение монитора и принтера существенно разное.
Код:
uses printers;
...
procedure TForm1.BitBtn1Click(Sender: TObject);
var
    C: real;
    R: TRect;
begin
C:=1;
Printer.BeginDoc;
R := Rect(0, 0, round(paintbox1.Width * C), round(paintbox1.Height * C));
Printer.Canvas.CopyRect(R,paintbox1.Canvas,paintbox1.Canvas.ClipRect);
Printer.EndDoc;
end;
C - коэффициент масштабирования. Для начала установите равными единице, если картинка маленькая - увеличивайте, иначе - уменьшайте.
zetrix вне форума Ответить с цитированием
Старый 30.11.2007, 10:55   #4
aleksei199
 
Регистрация: 26.11.2007
Сообщений: 3
По умолчанию

спасибо за быстрый ответ..но предложенный код ниже я уже пробовал.
Хоть убей, но принтер HP laserjet 1018 гонит чистый лист....

А матричный принтер HP DeskJet 1220C печатает..
(Порошок в принтере есть )

uses printers;
...
procedure TForm1.BitBtn1Click(Sender: TObject);
var
C: real;
R: TRect;
begin
C:=1;
Printer.BeginDoc;
R := Rect(0, 0, round(paintbox1.Width * C), round(paintbox1.Height * C));
Printer.Canvas.CopyRect(R,paintbox1 .Canvas,paintbox1.Canvas.ClipRect);
Printer.EndDoc;
end;
aleksei199 вне форума Ответить с цитированием
Старый 30.11.2007, 19:50   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Попробуйте на лазернике с коэффициентом 0.5, для пробы.
Возможно, чуток не хватает рабочей ширины.
mihali4 вне форума Ответить с цитированием
Старый 03.12.2007, 20:02   #6
aleksei199
 
Регистрация: 26.11.2007
Сообщений: 3
По умолчанию

я уже ВСЕ перепробовал..ничего не получилось (
aleksei199 вне форума Ответить с цитированием
Старый 03.12.2007, 20:30   #7
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Инфа о принтере - Printer.zip

Обрати внимание на:
- Горизонтальная ширина в пикселах;
- Вертикальная высота в пикселах;
- Физическая Печатаемая Область x край;
- Физическая Печатаемая Область y край;

Может быть просто принтер имеет очень большое разрешение или печатаемая область вне доступного диапозона.

::: У меня по молодости лет прикол был. Рисую себе линию на экране толщиной 1 pix, все круто. А для принтера она такая тонкая была, что я ее не увидел. Тоже попарился. Хотя этот мой опыт в данной ситуации не поможет. Мы, я так понял, рисуем картинку.

Последний раз редактировалось Sibedir; 03.12.2007 в 21:28. Причина: О, вспомнил
Sibedir вне форума Ответить с цитированием
Старый 19.06.2008, 16:36   #8
OLEG'arh
Пользователь
 
Аватар для OLEG'arh
 
Регистрация: 23.11.2006
Сообщений: 42
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Не поместится на максимально допустимый для принтера лист - будет печатать из кусков. Склеите потом.
А если хотите поместить на лист - используйте ресайз рисунка...
я за раннее не знаю Width и Height

я хочу распечатать изображение на round(image1.Width/Х) страницах, где Х некий лимит (также и по Height)

допустим у меня большая "картинка" такая что займёт 6 листов по шрине(х) А4 и 3 по высоте(y), как это реализовать???
использую image.

на одном листе использую такой код
Код:
var
    C: real;
    R: TRect;
begin
   if printersetupdialog1.Execute then
      begin
        C:=Printer.PageWidth/image1.Width;
        showmessage(inttostr(round(Printer.PageWidth)));
        Printer.BeginDoc;
        R := Rect(0, 0, round(image1.Width * C), round(image1.Height * C));
        Printer.Canvas.CopyRect(R,image1.Canvas,image1.Canvas.ClipRect);
        Printer.EndDoc;
      end
end;
OLEG'arh вне форума Ответить с цитированием
Старый 25.06.2008, 14:00   #9
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Лучше создай новую тему. Здесь речь ни о том. Да и вероятность ответа возрастет.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести bmp изображение на экран?? lexuss Паскаль, Turbo Pascal, PascalABC.NET 12 09.04.2011 00:02
Как узнать с какого по какой адрес занимает процесс в системе. kalexi Win Api 2 30.03.2008 15:48
Количество оперативной памяти которое занимает программа werser Помощь студентам 1 03.02.2008 02:22
если БД занимает ОЗУ? фЁдОр БД в Delphi 9 10.01.2008 21:57
Как получить изображение, если я знаю его хендл? AidarBik Win Api 4 05.11.2007 15:54