Загрузка не удалась. Возможно, проблемы с правами доступа?
мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| pascal:graph [23/11/2011 01:55] – 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 write(' | ||
| - | END. | ||
| - | </ | ||
| - | |||
| Пример работы с графикой в нашей системе. | Пример работы с графикой в нашей системе. | ||
| Строка 29: | Строка 14: | ||
| initgraph(gd, | initgraph(gd, | ||
| | | ||
| - | {далее все, что Вы хотите нарисовать} | + | {далее все, что Вы хотите нарисовать, например: |
| setcolor(green); | setcolor(green); | ||
| Строка 42: | Строка 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; | ||
| </ | </ | ||
| ==== Примеры ==== | ==== Примеры ==== | ||
| - | <code pascal | Определение размеров экрана для рисования рамки> | + | Среди примеров - часто возникающие задачи. |
| - | uses oglgraph; | + | |
| + | <code pascal | Определение размеров экрана для рисования рамки | ||
| + | |||
| + | uses oglgraph; | ||
| var | var | ||
| Строка 59: | Строка 76: | ||
| maxx := getmaxx(); | maxx := getmaxx(); | ||
| - | maxy := getmaxy(); | + | maxy := getmaxy(); |
| - | только после вызова initgraph } | + | |
| + | {Внимание! | ||
| setcolor(blue); | setcolor(blue); | ||
| Строка 72: | Строка 90: | ||
| end. | end. | ||
| </ | </ | ||
| + | |||
| + | <code pascal | Изменение цвета экрана заливкой> | ||
| + | |||
| + | uses oglgraph; | ||
| + | |||
| + | var | ||
| + | gd, gm: smallint; | ||
| + | color : integer; | ||
| + | | ||
| + | begin | ||
| + | gd := Detect; | ||
| + | gm := DetectMode; | ||
| + | initgraph(gd, | ||
| + | |||
| + | color := white; | ||
| + | setBkColor(color); | ||
| + | cleardevice; | ||
| + | | ||
| + | ... {Можно что-то рисовать} | ||
| + | | ||
| + | repeat until graphkeypressed; | ||
| + | |||
| + | closegraph(); | ||
| + | end. | ||
| + | </ | ||
| + | |||
| + | Другой способ | ||
| + | |||
| + | <code pascal | Изменение цвета экрана> | ||
| + | |||
| + | ... | ||
| + | initgraph(gd, | ||
| + | |||
| + | color := white; | ||
| + | setfillstyle(1, | ||
| + | floodfill(0, | ||
| + | | ||
| + | ... {Можно что-то рисовать} | ||
| + | | ||
| + | </ | ||
| + | |||
| + | |||
| ==== Процедуры и функции ==== | ==== Процедуры и функции ==== | ||
| Строка 184: | Строка 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. | ||
| + | |||
| + | </ | ||