Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
134 / 129 / 59
Регистрация: 16.06.2013
Сообщений: 523
1

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

16.06.2013, 05:47. Показов 2498. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые пользователи форума. Возникла такая проблема: Среди функций модуля Grapg есть 2 - SetVisualPage и SetActivePage, которые позволяют устанавливать активную страницу видеорежима, и страницу, на которую происходит вывод (естественно в тех режимах, которые имеют несколько страниц, напр. VGA). Таким образом, чередуя вывод на скрытую страницу, и её показ можно реализовать анимацию, без ряби. Но я обнаружил, что у меня режим не переключается вообще. Т.е. если в примере ниже(простейшем, взятым с сайта с описанием функции) убрать SetVisualPage(1);, то по идее на экране ничего не должно появиться, т.к. вывод шел бы на 1 страницу а показ был бы нулевой. Но у меня рисуется квадрат, что означает, отсутствие смены страницы. Собственно вопрос: Почему так, и как сделать смену, т.к. в мне очень нежелательно было бы иметь дрожание картинки при перерисовке
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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.


Добавлено через 1 час 27 минут
И вот ещё вопрос: у меня стоят Freepascal и Win8. Когда я запускаю в приложении графический режим, и пытаюсь отловить символы функцией readkey, они ловятся, НО только если фокус стоит на консольном окне, а не на окне с графикой. Можно-ли заставить читать символы с клавиатуры графическое окно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2013, 05:47
Ответы с готовыми решениями:

Ошибка в графическом режиме
Здравствуйте! Дело в том сто ввожу обычную программу для построения вертикальной белой линии, а...

Вывод текста в графическом режиме
Покажите пожалуйста как вывести в графическом режиме текст, чтобы было красиво:). Мне нужно вывести...

Считывание текста в графическом режиме
подскажите, считываю текст в строковую переменную s repeat While KeyPressed do ReadKey;...

Считывать символы в графическом режиме.
Здравствуйте. Как считывать символы, вводимые мною в графическом режиме? Например, мне нужно...

13
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.06.2013, 11:38 2
Цитата Сообщение от Захарка Посмотреть сообщение
пытаюсь отловить символы функцией readkey,
А у Вас подключен модуль Crt? Смените на Wincrt

Добавлено через 19 минут
А программу попробуйте так, в учебниках куча ошибок.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
uses Graph,wincrt;
var
  Gd, Gm : Integer;
 
begin
  Gd := VGA;
  Gm:= VGAMED;
  InitGraph(Gd, Gm, 'X:\BP');
  repeat
    SetVisualPage(0);
    Rectangle(10, 20, 30, 40);
    SetActivePage(1);
    delay(1000);
    cleardevice;
    SetVisualPage(1);
    Rectangle(100, 200, 120, 220);
    delay(1000);
    SetActivePage(1);
    cleardevice;
  until keypressed
end.
0
134 / 129 / 59
Регистрация: 16.06.2013
Сообщений: 523
16.06.2013, 13:13  [ТС] 3
Спасибо огромное, всё получилось, буду встраивать в основную программу)

Добавлено через 18 минут
Обидно, но смена видеостраницы что-то не даёт особого эффекта, дёрганье всёравно остаётся довольно сильным(
0
Заблокирован
16.06.2013, 19:48 4
в FPC у меня эта игра с страницами так и не получилась, мерцает, и дугу 270-90 не удалось нарисовать, а в ТР тот же код буква в букву работает на "ура"
0
38 / 37 / 23
Регистрация: 01.06.2009
Сообщений: 59
16.06.2013, 21:47 5
В FPC "игра со страницами" не реализована (открываем файл \packages\graph\src\win32\graph.pp, и смотрим на "пустышки", которые должны как раз всё делать, по крайней мере у меня на 2.6.0 - именно такая история)
Pascal
1
2
3
4
5
6
7
{ multipage support could be done by using more than one background bitmap }
procedure SetVisualWin32GUI(page: word);
begin
end;
procedure SetActiveWin32GUI(page: word);
begin
end;
Чтобы добиться белее плавной анимации нужно пользоваться не Graph-ом, а WinGraph-ом.
0
134 / 129 / 59
Регистрация: 16.06.2013
Сообщений: 523
16.06.2013, 22:15  [ТС] 6
Ну в принципе уже не важно, я кое-что подправил, кое-что поменял, у меня теперь только в одном месте моргает, но уже не критично, хотя и напрягает( Но реализацию в коде оставил, может на TP запущу как-нибудь...
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
17.06.2013, 07:38 7
Цитата Сообщение от MansMI Посмотреть сообщение
и дугу 270-90 не удалось нарисовать
Нужно 2 рисовать от 270 до 360 и от 0 до 90
1
Заблокирован
17.06.2013, 07:46 8
спасибо что не попиксельно
0
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
21.05.2014, 21:28 9
Подскажите. Надо нарисовать ромб в невидимой странице, потом сделать ее видимой (понятно что сетвижуал(0))-но надо ли использовать сетактивейт если надо его выводить или это надо сделать сперва. Но как определить невидимую страницу для ромба сперва? Или она есть по умолчанию для некоего режима? В любом случае потом надо построить квадрат в невидимой. Как тогда быть со второй. Как их отделить?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
22.05.2014, 07:58 10
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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);
    {рисуем ромб}
    line(100,200,200,100);
    line(200,100,300,200);
    line(300,200,200,300);
    line(200,300,100,200);
    delay(1000);
    SetActivePage(1);
    cleardevice;
  until keypressed
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32836 / 21173 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
22.05.2014, 17:57 11
maxii, еще раз: не работает FPC с невидимыми страницами. Обе эти функции - "пустышки", ничего не делающие. И вся эта "игра" с ними - только чтобы запудрить мозги преподавателю. Любой мало-мальски разбирающийся человек тут же попросит сделать отрисовку обоих фигур (одной - в неактивную страницу, второй - в активную) до цикла, а в цикле - только менять страницы:
Pascal
1
2
3
4
5
Active := 1;
repeat
  SetVisualPage(1 - Active);
  Delay(1000);
until keypressed;
И тут будет большой облом...

WinGraph попробуй, там по крайней мере не "пустышки"...
0
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
22.05.2014, 23:58 12
Ну задание мне нужно сделать. И Это очень простое. И надо мне сделать там где эти функции работают. Пусть: делаю ромб. Делаю эту страницу видимой. Потом надо снова как то на невидимую переключится. Как это сделать чтобы квадрат нарисовать. То есть выход один. Как то делать новую страницу и там уже рисовать квадрат.

Добавлено через 3 минуты
И здесь как бы Цикла не надо как и делеев?
0
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
21.06.2014, 20:18 13
запустите пожалуста этот код если он работоспособный,
у себя на компьютере, ибо у меня пишет что что то с компиляцией (Мне надо принскрин).
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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.
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
22.06.2014, 00:28 14
Компилируется, работает. Скрины ниже.
Смена страницы в графическом режиме

Смена страницы в графическом режиме
0
22.06.2014, 00:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2014, 00:28
Помогаю со студенческими работами здесь

Русский язык в графическом режиме
Закинул русские графические шрифты(файлы расширения .chr) в папку с программой. Все равно русские...

Построить треугольники в графическом режиме
Построить на экране 10 равносторонних треугольников, каждый следующий из которых имеет сторону в...

Не получается запустить TurboPascal в графическом режиме
Здравствуйте форумчане! Не могу запустить TurboPascal в графическом режиме. WinXP SP3,AMD Athlon...

Вывести текстовый файл в графическом режиме
Всем привет! Скажите, пожалуйста, возможно ли вывести текстовый файл в графическом режиме? ЧТоб...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru