IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Setactivepage - глюк, :(
сообщение
Сообщение #1


Гость






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

Для это я использау 2 страници. Проблема в том, что они накладываются одна на другую (где то пополам) при смене страниц.

Подскажите под. че делать ....
Лабу надо быстро сдавать sad.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


а какой графический режим используешь? не все режимы имеют видеостраницы...
тогда в них происходят просто разделения экрана при попытке их использования..


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






блин .... а как узнать какой?
На глаз 640х480х16 blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


detect'ом наверно определился не тот режим который ты хотел. Исходник кинь, поправим.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
Многостраничный вывод возможен только на EGA
(256Кб), (S)VGA и Hercules
.


А вот так выглядит проверка поддерживает ли выбранные детектом драйвер страницы:



{...}
d:=detect;
if d in[HercMono,EGA,EGA64,MCGA,VGA] then
{поддерживает}
else {нет страниц}
{...}
end.



--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата(Archon @ 15.06.05 13:54)
detect'ом наверно определился не тот режим который ты хотел.
Detect-ом может и тот определился, но Detect дает лучший из доступных режимов, поэтому устанавливать придется вручную:
Gd:=Ega;
Gm:=EgaHi; { 640x350x16 + 2 страницы }
InitGraph(Gd, Gm, Path);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Режим 640x480 VGA
исходник
Код

Gd := Detect;
InitGraph(Gd, Gm, 'f:\bp\bgi');
If GraphResult <> grOk
Then Halt(1);

mode:=GetModeName(GetGraphMode);
SetActivePage (1);
SetVisualPage (1);

 Repeat
 Begin
  SetColor (Random(15));
  Line (Random(GetMaxX-2)+1,Random(GetMaxY-2)+1,
        Random(GetMaxX-2)+1,Random(GetMaxY-2)+1);
 End
 Until KeyPressed;

SetActivePage (0);
SetVisualPage (0);

 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






заработало с EGA, EGAHi ,но разрешение какоето неприкольное....
Мне бы с VGA, но с ним не работает
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


А чего ты хочешь добиться в программе? ты же все равно на 1 страницу выводишь... зачем тебе они тогда вообще?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






ну скажите еще ченить, мне эту лабу уже здать надо
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Oleg_Z,
я хочу добиться эффекта освещения в темноте рисунка фанариком (световое пятно). А как по другому сделать то? Если начальный экран загнать в массив каконить (GetImage), то как из него потом доставать кусочки, которые надо засветить?
А тут удобно (я тык думаю):
Перевлючил актив страницу, взял кусок, опять переключил, обрезал по кругу, положил .....
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






может у меня изначально неправельный подход?
Тады как сделать по правельному?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Да нормалёк... Делай по своему. А разрешением придётся пожертвовать, я сам от чего-то выше 320x200x256 давно отказался(муторно слишком, а чужие модули использовать не хочу).

Цитата
Если начальный экран загнать в массив каконить (GetImage), то как из него потом доставать кусочки, которые надо засветить?

Достать-то можно, только весь экран в большом разрешении загнать будет сложно(640*480*4=153600 байт ...да нет если указатель на массив тады можно...мысли в слух... smile.gif )


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Palux, держи исходник для начала... Учти, при больших значениях радиуса будет притормаживать. И попробуй (если это не устроит) переделать, как тебе нужно... ;)
Код
uses crt, graph;

var
 buffer: array[1 .. 10000] of byte;
 curr: integer;

procedure get_square(x, y, r: integer);
var ix, iy: integer;
begin
 setactivepage(0);
 curr := 0;
 for iy := y - r to y + r do
   for ix := x - r to x + r do begin
     inc(curr);
     buffer[curr] := getpixel(ix, iy);
   end;
 setactivepage(1);
end;

procedure put_circle(x, y, r: longint);
var ix, iy: integer;
begin
 curr := 0;
 for iy := y - r to y + r do
   for ix := x - r to x + r do begin
     inc(curr);
     if (sqr(x - ix) + sqr(y - iy) <= sqr(r) then
       putpixel(ix, iy, buffer[curr]);
   end;
end;

procedure darkcircle(x, y, r: integer);
begin
 setfillstyle(solidfill, black);
 bar(x - r, y - r, x + r, y + r);
end;

var
 gd, gm: integer;
 x, y, i: integer;
const r = 20;

begin
 Gd := ega;
 Gm := egahi;
 InitGraph(Gd, Gm, '');
 If GraphResult <> grOk Then Halt(1);

 SetActivePage(0);
 SetVisualPage(0);

 Repeat
   SetColor (Random(15));
   Line (Random(GetMaxX-2)+1,Random(GetMaxY-2)+1,
         Random(GetMaxX-2)+1,Random(GetMaxY-2)+1);
 Until KeyPressed;
 while keypressed do readkey;

 SetActivePage(1);
 SetVisualPage(1);

 x := getmaxx div 2; y := getmaxy div 2;

 repeat
   get_square(x, y, r);
   put_circle(x, y, r);
   delay(22000);
   darkcircle(x, y, r);
   inc(x, 10);
 Until KeyPressed;
 while keypressed do readkey;

 closegraph;
end.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.05.2024 6:04
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name