Загрузка не удалась. Возможно, проблемы с правами доступа?
мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| pascal:graph [13/11/2015 07:24] – oca | pascal:graph [05/10/2018 05:39] (текущий) – ybezrukov | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ===== Графика в Паскале ===== | ===== Графика в Паскале ===== | ||
| - | FIXME | ||
| - | |||
| - | Пример работы с графикой в системе Borland (что тоже самое - Turbo) Pascal: | ||
| - | |||
| - | <code pascal> | ||
| - | USES GRAPH; | ||
| - | |||
| - | VAR h,k,l: INTEGER; | ||
| - | |||
| - | BEGIN | ||
| - | | ||
| - | |||
| - | | ||
| - | | ||
| - | |||
| - | | ||
| - | If h<>0 then // Реакция на ошибку запуска графики | ||
| - | begin | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | end | ||
| - | else ... ; // Здесь - код для работы с графикой | ||
| - | |||
| - | | ||
| - | |||
| - | END. | ||
| - | </ | ||
| - | |||
| Пример работы с графикой в нашей системе. | Пример работы с графикой в нашей системе. | ||
| Строка 57: | Строка 27: | ||
| | | ||
| end. | end. | ||
| + | </ | ||
| + | |||
| + | <code pascal> | ||
| + | Mx := GetMaxX div 2; | ||
| + | My := GetMaxY div 2; | ||
| + | for y := -my to my do | ||
| + | for x := -mx to mx do | ||
| + | begin | ||
| + | n := 0; | ||
| + | c.x := x * 0.005; | ||
| + | c.y := y * 0.005; | ||
| + | z.x := 0; | ||
| + | z.y := 0; | ||
| + | while (sqr(z.x) + sqr(z.y) < max) and (n < iter) do | ||
| + | begin | ||
| + | t := z; | ||
| + | z.x := sqr(t.x) - sqr(t.y) + c.x; | ||
| + | z.y := 2 * t.x * t.y+ c.y; | ||
| + | Inc(n); | ||
| + | if KeyPressed then | ||
| + | Cancel := true; | ||
| + | end; | ||
| + | if n < iter then | ||
| + | begin | ||
| + | PutPixel(mx + x,my + y,16 - (n mod 16)); | ||
| + | end; | ||
| + | if Cancel then | ||
| + | exit; | ||
| + | end; | ||
| </ | </ | ||
| Строка 92: | Строка 91: | ||
| </ | </ | ||
| - | <code pascal | Изменение цвета экрана> | + | <code pascal | Изменение цвета экрана |
| uses oglgraph; | uses oglgraph; | ||
| Строка 245: | Строка 244: | ||
| + | ==== Работа с клавиатурой ==== | ||
| + | |||
| + | В графическом режиме обработка событий клавиатура происходит очень похоже на текстовый режим, так как реализованы аналоги функций readkey и keypressed из модуля crt. В модуле oglgraph они называются graphreadkey и graphkeypressed. Функция graphkeypressed служит для определения события нажатия на клавиатуру, | ||
| + | |||
| + | <code pascal> repeat until graphkeypressed;</ | ||
| + | |||
| + | Когда выполнение программы доходит до приведенной строки, | ||
| + | |||
| + | Функция graphreadkey так же реагирует на нажатия, | ||
| + | |||
| + | <code pascal> code := graphreadkey;</ | ||
| + | |||
| + | |||
| + | Особенностью это функции является то, что она блокирует исполнение программы до того момента пока не будет нажата клавиша. Если же требуется реализовать работу с клавиатурой, | ||
| + | |||
| + | <code pascal> | ||
| + | if graphkeypressed then | ||
| + | code := graphreadkey; | ||
| + | </ | ||
| + | |||
| + | Напишем программу, | ||
| + | |||
| + | <code pascal> | ||
| + | uses oglgraph; | ||
| + | var | ||
| + | gd, gm, code: smallint; | ||
| + | | ||
| + | begin | ||
| + | gd := Detect; | ||
| + | gm := DetectMode; | ||
| + | initgraph(gd, | ||
| + | | ||
| + | while true do | ||
| + | begin | ||
| + | if graphkeypressed then | ||
| + | begin | ||
| + | code := graphreadkey; | ||
| + | writeln(code); | ||
| + | | ||
| + | end; | ||
| + | closegraph; | ||
| + | end. | ||
| + | |||
| + | </ | ||