Смена страницы в графическом режиме - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Возникла такая проблема: Среди функций модуля Grapg есть 2 - SetVisualPage и SetActivePage, которые позволяют устанавливать активную страницу видеорежима, и страницу, на которую происходит вывод (естественно в тех режимах, которые имеют несколько страниц, напр. VGA). Таким образом, чередуя вывод на скрытую страницу, и её показ можно реализовать анимацию, без ряби. Но я обнаружил, что у меня режим не переключается вообще. Т.е. если в примере ниже(простейшем, взятым с сайта с описанием функции) убрать SetVisualPage(1);, то по идее на экране ничего не должно появиться, т.к. вывод шел бы на 1 страницу а показ был бы нулевой. Но у меня рисуется квадрат, что означает, отсутствие смены страницы. Собственно вопрос: Почему так, и как сделать смену, т.к. в мне очень нежелательно было бы иметь дрожание картинки при перерисовке
Листинг программы
  1. uses Graph;
  2. var
  3. Gd, Gm : Integer;
  4. begin
  5. Gd := VGA;
  6. Gm:= VGAMED;
  7. InitGraph(Gd, Gm, 'X:\BP');
  8. if GraphResult <> grOk then
  9. Halt(1);
  10. if (Gd = HercMono) or (Gd = EGA) or (Gd = EGA64) or (Gd = VGA) then
  11. begin
  12. SetVisualPage(0);
  13. SetActivePage(1);
  14. Rectangle(10, 20, 30, 40);
  15. SetVisualPage(1);
  16. end
  17. else
  18. OutText('No paging supported.');
  19. ReadLn;
  20. CloseGraph;
  21. end.
И вот ещё вопрос: у меня стоят Freepascal и Win8. Когда я запускаю в приложении графический режим, и пытаюсь отловить символы функцией readkey, они ловятся, НО только если фокус стоит на консольном окне, а не на окне с графикой. Можно-ли заставить читать символы с клавиатуры графическое окно?

Решение задачи: «Смена страницы в графическом режиме»

textual
Листинг программы
  1. uses Graph,wincrt;
  2. var
  3.   Gd, Gm : Integer;
  4.  
  5. begin
  6.   Gd := VGA;
  7.   Gm:= VGAMED;
  8.   InitGraph(Gd, Gm, 'X:\BP');
  9.   repeat
  10.     SetVisualPage(0);
  11.     {рисуем квадрат}
  12.     Rectangle(100, 100, 300, 300);
  13.     SetActivePage(1);
  14.     delay(1000);
  15.     cleardevice;
  16.     SetVisualPage(1);
  17.    circle (200, 300, 100);
  18.     delay(1000);
  19.     SetActivePage(1);
  20.     cleardevice;
  21.   until keypressed
  22. end.

Объяснение кода листинга программы

  1. Используется графический режим VGA и VGAMED.
  2. Инициализируется графика с помощью функции InitGraph.
  3. Программа зациклена и повторяет следующие действия:
    • Смена активной страницы на 0.
    • Рисуется прямоугольник на экране с помощью функции Rectangle.
    • Задержка в 1 секунду с помощью функции delay.
    • Смена активной страницы на 1.
    • Рисуется окружность на экране с помощью функции circle.
    • Задержка в 1 секунду с помощью функции delay.
    • Смена активной страницы на 1.
    • Очистка экрана с помощью функции cleardevice.
  4. Программа повторяет эти действия до тех пор, пока не будет нажата клавиша.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы