Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Печать графиков и рисунков

Автор: Motsart 7.07.2005 22:06

Люди, помогите! Посоветуйте как распечатать график. Есть программа, кот. его строит. Сдавать нужно только принтскрины (без компа). Засунуть график в буфер обмена не получается blink.gif (я жму на PrintScreen, когда график появляется на экране) изображение в буфер не попадает. Подскажите, плз, как можно это сделать. Заранее спасибо.

Автор: volvo 7.07.2005 22:39

Вот тут: http://forum.pascal.net.ru/index.php?showtopic=4533&view=findpost&p=38204 лежит

Цитата
Модуль для создания скриншотов из любого видеорежима.
Подключи его к программе, и вызывай сохранение в файл там, где нужен скриншот...

Автор: Motsart 8.07.2005 21:02

Volvo, спасибо за ответ. Насколько я в курсе модуль перед использованием надо откомпилировать. Немогли бы Вы подсказать (вкрадце), как это сделать.

Автор: Дож 8.07.2005 21:19

Цитата
Насколько я в курсе модуль перед использованием надо откомпилировать.

:no: Неа...
Подключаешь модуль к своей программе(пишешь в списке после USES), и используешь как скомпилированный модуль... (можешь правда запустить сам модуль и скомпилировать так же как компилируестся прога, но первый способ мне кажется проще)...

Автор: Motsart 11.07.2005 16:25

Спасибо, дружище! к моей величайшей радости, всё работает!
2 модератор: обсуждение можно закрывать.
всем спасибо.

Автор: Mr. Anderson 10.03.2007 0:57

Скопировал bmp_plus.pas ( 9.05 килобайт ) в BPW (Borland Pascal for Windows 7.0), сохранил как BMP_PLUS.TPU , BMP_PLUS.PAS и BMP_PLUS.BAK в C:\BP\BIN.
Открыл на BP (Borland Pascal).
Скомпилировал этот модуль, добавил end. (Error 10: Unexpected end of file.) , ещё раз скомпилировал
Добавил в своей программе uses BMP_PLUS;
нажимаю Run > отображается график на чёрном экране > нажимаю PrintScreen (принтер подсоединён и включён, в рабочем состоянии), затем enter - не распечатывает! unsure.gif

Print setup
PRNFLTR
$NOSWAP /HP

Change directory> Directory name C:\BP\BIN
Optrions > Units directories C:\BP\UNITS;
Resource directories C:\BP\UNITS;

Операционная система Win XP PRO

Ниже моя программа:

 program grafika;
Uses Graph,crt,BMP_PLUS;
const
shag=0.0001;
lgr=-5; {nachalnoye znacheniye x}
pgr=5; {konechnoye znacheniye x}
zcrtX=320; {koordinata x tsentra ekrana}
zcrtY=240; {koordinata y tsentra ekrana}
mtrX=50; {koefitsent mashtabirovaniya po osi x}
mtrY=50; {koefitsent mashtabirovaniya po osi y}
colorG=5; {tsvet grafika}
colorOXY=11; {tsvet koordinatnij osey}
OXYminX=-270; {minimalnoye otobrazhaemoye znacheniye osi x}
OXYmaxX=270; {maximalnoye otobrazhaemoye znacheniye osi x}
OXYminY=-200; {minimalnoye otobrazhaemoye znacheniye osi y}
OXYmaxY=200; {maximalnoye otobrazhaemoye znacheniye osi y}
Var grDriver:integer;
grMode:integer;
ErrCode:integer;
x,y:real;
i:integer;
Begin
grDriver:=Detect;
InitGraph(grDriver, grMode, ' ');
ErrCode:=GraphResult;
if ErrCode<>grOk then begin
writeln('Oshibka: ',GraphErrorMsg(ErrCode));
readln;
halt(100);
end;
setcolor(colorOXY);
line(zcrtX+OXYminX, zcrtY, zcrtX+OXYmaxX, zcrtY); { horz }
moveto(zcrtX+OXYmaxX-7, zcrtY-2);
lineto(zcrtX+OXYmaxX, zcrtY);
lineto(zcrtX+OXYmaxX-7, zcrtY+2);
line(zcrtX, zcrtY-OXYminY, zcrtX, zcrtY-OXYmaxY); { vert }
moveto(zcrtX - 2, zcrtY-OXYmaxY+7);
lineto(zcrtX, zcrtY-OXYmaxY);
lineto(zcrtX + 2, zcrtY-OXYmaxY+7);
settextjustify(centertext, centertext);
outtextxy(zcrtX, zcrtY-OXYmaxY-(textheight('Y') div 2) - 3, 'Y');
outtextxy(zcrtX+OXYmaxX+(textwidth('X') div 2) + 3, zcrtY, 'X');
x:=lgr;
while x<=pgr do
begin
if abs(x)<=5 then begin
y:=exp(-0.5*sqr(x));
putpixel(zcrtX+trunc(x*mtrX),zcrtY-trunc(y*mtrY),colorG)
end;
x:=x+shag;
end;
readkey;
readln;
closegraph;
end.


Что нужно сделать, чтоб распечатать график.

Автор: volvo 10.03.2007 1:03

Цитата
Что нужно сделать, чтоб распечатать график.
ВНИМАТЕЛЬНО читать тему! Сказано - этот модуль снимает СКРИНШОТ, а не позволяет тебе печатать графический экран... Так вот, когда график отрисован (а именно - перед ReadKey) вызывай
save_bmp(0, 0, getmaxx, getmaxy, 'screen.bmp', 0);
, и у тебя в текущей папке должен (если все верно сделал) появиться файл screen.bmp, содержащий твой график... А вот с ним уже делай что хочешь...

Автор: Mr. Anderson 10.03.2007 1:24

no1.gif на скрине просто чёрный экран. (нажимаю printscreen только после того, как он полностью отобразится, после 2 раза enter ).
Удалил screen.bmp . повторил снова - тоже самое.

 
{...}
while x<=pgr do
begin
if abs(x)<=5 then begin
y:=exp(-0.5*sqr(x));
putpixel(zcrtX+trunc(x*mtrX),zcrtY-trunc(y*mtrY),colorG)
end;
x:=x+shag;
end;

save_bmp(0, 0, getmaxx, getmaxy, 'screen.bmp', 0);

readkey;
readln;
closegraph;
end.

Автор: volvo 10.03.2007 1:55

Ну, правильно... У тебя же 16-цветный драйвер... Тогда:

save_bmp(0, 0, getmaxx, getmaxy, 'screen.bmp', 1); { <--- 1, а не 0 !!! }


Добавлено через 47 сек.
И еще раз: НЕ НАДО нажимать ВООБЩЕ PrintScreen... Только 2 раза Enter !!!

Автор: Mr. Anderson 10.03.2007 2:01

yes2.gif Спасибо good.gif . Тему Unit expected можно закрыть.