Помощь - Поиск - Пользователи - Календарь
Полная версия: Бекграунд
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
BRS
Собственно есть ли такая возможность в пасале?
Предположим в какой то момент программы, необходимо зделать скажем 5 проверок на каждый пиксель и потом перекрасить по какому нить правилу какойнить пиксель:
[code]for i:= 1 to 640 do
for j:= 1 to 480 do
begin
if... then... putpixel
if... then... putpixel
if... then... putpixel
if... then... putpixel
if... then... putpixel
end;

собственно понятно, что вполне заметно как экран будет заполняться рядами примерно за 0,5 сек.

Так вот.
Можно ли ка нибудь сделать следуюющее. Во время выполнения цикла - заполнять мнимый (второй / что то вроде бекграунда) экран, а пользователю в это время показывать что нибудь еще ( ну напиример мигающую надпись WAIT!).
volvo
BRS

Для этого можно использовать процедуры SetActivePage и SetVisualPage. Но я не уверен, что режима 640х480 есть больше одной видеостраницы... Для режимов с меньшим разрешением это делается так:

Код

...
 { Выводим сообщение на видимой странице...
   по умолчанию - страница №0 }
 OutTextXY(GetMaxX div 2, GetMaxY div 2, 'Wait');
 { Устанавливаем страницу №1 активной, но не видимой }
 SetActivePage(1);
 { Заполняем невидимую страницу }
 for i:= 1 to 640 do
   for j:= 1 to 480 do
      { заполнение экрана }

 { Делаем заполненную страницу видимой }
 SetVisualPage(1);
...
Altair
По порядку.
Цитата
перекрасить по какому нить правилу какойнить пиксель:

Можно обращаться к люьому пикселу на экране:
getpixel putpixel - первая возвращает цвет вторая загружает в пикель цвет.
(кажется параметрами там координаты, точно не помню, давно с графикой такой не работал, введите getpixel и нажмите СTRL+F1, там посмотрите параметры обращения)

Цитата
Во время выполнения цикла - заполнять мнимый (второй / что то вроде бекграунда) экран

Да, можно, это называется использованием видеостраниц.
Принцип таков:
делаем активной страницу.
рисуем на ней.
Выводим активную страницу.

Это процедуцры:
Цитата
Устанавливает активную страницу для графического вывода.

Объявление:
Procedure SetActivePage(Page : Word);

Режим:
Real, Protected

Замечания:
Делает страницу с номером Page активной, направляя на нее весь последующий
графический вывод.

Многостраничный вывод возможен только на EGA (256Кб), (S)VGA и Hercules.
Используя многостраничный режим, программа может осуществлять графические
построения на неактивной странице, затем переключать страницы с помощью
SetVisualPage, тем самым практически мгновенно отображать картинку на
экране. Эта методика особенно полезна при создании анимационных программ.

Цитата
Устанавливает номер видимой графической страницы.

Объявление:
Procedure SetVisualPage(Page : Word);

Режим:
Real, Protected

Замечания:
Делает графическую страницу с номером Page видимой.

Многостраничный вывод обеспечиваются только адаптерами EGA, (S)VGA и
графическими платами Hercules. Используя многостраничный режим, программа
может осуществлять графические построения на неактивной странице, затем
переключать страницы с помощью данной процедуры, тем самым практически
мгновенно отображать картинку на экране. Эта методика особенно полезна при
создании анимационных программ.

(из справки по TP)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.