Смена страницы в графическом режиме - Free Pascal
Формулировка задачи:
Здравствуйте. Возникла такая проблема: Среди функций модуля Grapg есть 2 - SetVisualPage и SetActivePage, которые позволяют устанавливать активную страницу видеорежима, и страницу, на которую происходит вывод (естественно в тех режимах, которые имеют несколько страниц, напр. VGA). Таким образом, чередуя вывод на скрытую страницу, и её показ можно реализовать анимацию, без ряби. Но я обнаружил, что у меня режим не переключается вообще. Т.е. если в примере ниже(простейшем, взятым с сайта с описанием функции) убрать SetVisualPage(1);, то по идее на экране ничего не должно появиться, т.к. вывод шел бы на 1 страницу а показ был бы нулевой. Но у меня рисуется квадрат, что означает, отсутствие смены страницы. Собственно вопрос: Почему так, и как сделать смену, т.к. в мне очень нежелательно было бы иметь дрожание картинки при перерисовке
uses Graph; var Gd, Gm : Integer; begin Gd := VGA; Gm:= VGAMED; InitGraph(Gd, Gm, 'X:\BP'); if GraphResult <> grOk then Halt(1); if (Gd = HercMono) or (Gd = EGA) or (Gd = EGA64) or (Gd = VGA) then begin SetVisualPage(0); SetActivePage(1); Rectangle(10, 20, 30, 40); SetVisualPage(1); end else OutText('No paging supported.'); ReadLn; CloseGraph; end.
И вот ещё вопрос: у меня стоят Freepascal и Win8. Когда я запускаю в приложении графический режим, и пытаюсь отловить символы функцией readkey, они ловятся, НО только если фокус стоит на консольном окне, а не на окне с графикой. Можно-ли заставить читать символы с клавиатуры графическое окно?
Решение задачи: «Смена страницы в графическом режиме»
textual
Листинг программы
uses Graph,wincrt; var Gd, Gm : Integer; begin Gd := VGA; Gm:= VGAMED; InitGraph(Gd, Gm, 'X:\BP'); repeat SetVisualPage(0); {рисуем квадрат} Rectangle(100, 100, 300, 300); SetActivePage(1); delay(1000); cleardevice; SetVisualPage(1); circle (200, 300, 100); delay(1000); SetActivePage(1); cleardevice; until keypressed end.
Объяснение кода листинга программы
- Используется графический режим VGA и VGAMED.
- Инициализируется графика с помощью функции InitGraph.
- Программа зациклена и повторяет следующие действия:
- Смена активной страницы на 0.
- Рисуется прямоугольник на экране с помощью функции Rectangle.
- Задержка в 1 секунду с помощью функции delay.
- Смена активной страницы на 1.
- Рисуется окружность на экране с помощью функции circle.
- Задержка в 1 секунду с помощью функции delay.
- Смена активной страницы на 1.
- Очистка экрана с помощью функции cleardevice.
- Программа повторяет эти действия до тех пор, пока не будет нажата клавиша.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д