мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
pascal:graph [23/11/2011 09:46] – oca | pascal:graph [05/10/2018 12: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, | ||
+ | | ||
+ | ... {Можно что-то рисовать} | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
==== Процедуры и функции ==== | ==== Процедуры и функции ==== | ||
Строка 125: | Строка 185: | ||
|ThickWidth| 3 | Жирная линия | | |ThickWidth| 3 | Жирная линия | | ||
- | Обратите внимание, | + | Обратите внимание, |
==== Стили заливки ==== | ==== Стили заливки ==== | ||
- | ^ Имя ^ Описание ^ | + | ^ Имя ^ Значения ^ Описание ^ |
- | |EmptyFill| | | + | |EmptyFill| 0 | | |
- | |SolidFill| Сплошная заливка | | + | |SolidFill| 1 | Сплошная заливка | |
- | |LineFill| | | + | |LineFill| 2 | | |
- | |LtSlashFill| | | + | |LtSlashFill| 3 |
- | |SlashFill| | | + | |SlashFill| 4 | | |
- | |BkSlashFill| | | + | |BkSlashFill| 5 |
- | |LtBkSlashFill| | | + | |LtBkSlashFill| 6 | | |
- | |HatchFill| | | + | |HatchFill| 7 | | |
- | |XHatchFill| | | + | |XHatchFill| 8 | | |
- | |InterleaveFill| | | + | |InterleaveFill| 9 | | |
- | |WideDotFill| | | + | |WideDotFill| 10 | | |
- | |CloseDotFill| | | + | |CloseDotFill| 11 | | |
Строка 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. | ||
+ | |||
+ | </ | ||