мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияСледующая версияСледующая версия справа и слева | ||
pascal:graph [23/11/2011 09:53] – oca | pascal:graph [14/03/2016 15:25] – ybezrukov | ||
---|---|---|---|
Строка 5: | Строка 5: | ||
<code pascal> | <code pascal> | ||
- | USES GRAPH | + | USES GRAPH; // подключение " |
- | VAR H,k,l: INTEGER; | + | |
+ | VAR h,k,l: INTEGER; | ||
BEGIN | BEGIN | ||
- | | + | ... // " |
- | | + | |
- | H: | + | DetectGrahp(k, |
- | If h=0 then write('OK' | + | |
+ | |||
+ | h: | ||
+ | If h<>0 then // Реакция на ошибку запуска графики | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | end | ||
+ | else ... ; // Здесь - код для работы с графикой | ||
+ | |||
+ | | ||
END. | END. | ||
</ | </ | ||
Строка 29: | Строка 44: | ||
initgraph(gd, | initgraph(gd, | ||
| | ||
- | {далее все, что Вы хотите нарисовать} | + | {далее все, что Вы хотите нарисовать, например: |
setcolor(green); | setcolor(green); | ||
Строка 42: | Строка 57: | ||
| | ||
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: | Строка 106: | ||
maxx := getmaxx(); | maxx := getmaxx(); | ||
- | maxy := getmaxy(); | + | maxy := getmaxy(); |
- | только после вызова initgraph } | + | |
+ | {Внимание! | ||
setcolor(blue); | setcolor(blue); | ||
Строка 72: | Строка 120: | ||
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, | ||
+ | | ||
+ | ... {Можно что-то рисовать} | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
==== Процедуры и функции ==== | ==== Процедуры и функции ==== | ||
Строка 125: | Строка 215: | ||
|ThickWidth| 3 | Жирная линия | | |ThickWidth| 3 | Жирная линия | | ||
- | Обратите внимание, | + | Обратите внимание, |
Строка 184: | Строка 274: | ||
+ | ==== Работа с клавиатурой ==== | ||
+ | |||
+ | В графическом режиме обработка событий клавиатура происходит очень похоже на текстовый режим, так как реализованы аналоги функций 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; | ||
+ | |||
+ | gd, gm, code: smallint; | ||
+ | | ||
+ | begin | ||
+ | gd := Detect; | ||
+ | gm := DetectMode; | ||
+ | initgraph(gd, | ||
+ | | ||
+ | while true do | ||
+ | begin | ||
+ | if graphkeypressed then | ||
+ | code := graphreadkey; | ||
+ | | ||
+ | end; | ||
+ | closegraph; | ||
+ | end. | ||
+ | |||
+ | </ | ||