Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Процедуры и функции переключения режимов управления экраномМодуль Graph содержит средства, обеспечивающие различные варианты переключения текстового и графического режимов. 1. Процедура InitGraph(Var driver, mode:integer; path:string) – переключает экран в графический режим. При вызове процедуры следует объявить специальные переменные, куда занести константу драйвера и константу режима, и указать эти переменные в качестве параметров процедуры. Существует возможность запросить автоматическое определение драйвера и режима: для этого необходимо вместо константы драйвера в переменную, используемую в качестве параметра, записать константу detect=0. Параметр path должен описывать путь, определяющий местоположение файла, который содержит требуемый драйвер (обычно все драйверы находятся в подкаталоге BGI основного каталога среды Borland Pascal). Если драйвер находится в текущем каталоге, то в качестве параметра передается пустая строка - ". 2. Функция GraphResult:integer - возвращает номер ошибки, обнаруженной при инициализации графического режима. 3. Функция GraphErrorMSG(ErrNum:integer):string - позволяет по номеру ошибки определить ее причину. Полностью инициализация графического режима может быть выполнена следующим образом: Var driver,mode,error: integer; Begin driver:=detect; { или driver:=0;} InitGraph (driver,mode,'d: \BP \BGI'); error: =GraphResult; if error<>0 then {если обнаружены ошибки} begin WriteLn('Ошибка инициализации графического режима', GraphErrorMSG(error)); Hah(1); {аварийное завершение программы} end; {работа в графическом режиме}...
4. Процедура CloseGraph - завершает работу в графическом режиме: выгружает драйвер и восстанавливает текстовый режим. Если завершить программу, не выходя из графического режима, то нормальная работа MS DOS нарушается, так как MS DOS функционирует в текстовом режиме. Примечание. Если программа выполняется в среде программирования Borland Pascal, то среда сама восстановит текстовый режим после завершения работы программы. 5. Процедура RestoreCrtMode - осуществляет временный возврат в текстовый режим с сохранением графического изображения в видеобуфере. 6. Процедура SetGraphMode(mode:integer) - осуществляет возврат в графический режим после временного выхода, осуществленного процедурой RestoreCrtMode. 7. Функция GetGraphMode:integer - возвращает номер активного графического режима. Таким образом, временный выход в текстовый режим обычно оформляется следующим образом: RestoreCrtMode; {переход в текстовый режим} ... {выполнение обработки в текстовом режиме} SetGraphMode(GetGraphMode); {возврат в графический режим} Процедуры и функции управления цветом. Модуль Graph содержит специальные процедуры и функции управления цветом изображения. 1. Процедура GetPalette(Var Palette:PaletteTyре) - возвращает размер и цвета текущей палитры. Палитра при этом считывается в специальную переменную типа PaletteType, также определенного в модуле Graph: Туре PaletteType = record size:byte; {размер палитры} Colors:array[0..MaxColors] of shortint; {цвета палитры} end; Цвета палитры кодируются десятичными числами от 0 до 63. 2. Процедура SetAllPalette(Palette:PaletteType) - осуществляет установку палитры. Новая палитра при этом записывается в переменную типа PaletteType, а цвета можно кодировать десятичными числами или использовать для их определения специальные константы: EGABlack=0; {черный} EGADarkGrey=56; {темно-серый} EGABlue=1; {синий} EGALightBlue=57; {светло-синий} EGAGreen=2; {зеленый} EGALightGreen = 58; {светло-зеленый} EGACyan=3; {голубой} EGALightCyan = 59; {светло-голубой} EGARed = 4; {красный} EGALightRed=60; {розовый} EGAMagenta=5; {фиолетовый} EGALightMagenta = 61; {сиреневый} EGABrown=20; {коричневый} EGAYellow = 62; {желтый} EGALiglitGrey=7; {светло-серый} EGAWhite = 63; {белый} 3. Процедура SetPalette(ColorNum,Color:word) - заменяет цвет в регистре палитры с номером ColorNum на цвет Color. 4. Процедура SetBkColor(Color:word) - устанавливает новый цвет фона. При инициализации графического режима видеобуфер очищается (обнуляется). При этом все точки оказываются связаны с 0 регистром палитры, который и считается регистром, хранящим цвет фона. Процедура SetBkCoIor записывает в 0 регистр палитры цвет, указанный в параметре Color. Результат вызова этой процедуры аналогичен результату вызова процедуры SetPalette(0,Color). 5. Процедура SetColor(ColorNum:word) - объявляет цвет в регистре с номером ColorNum текущим цветом рисования. 6. Процедура GetDefaultPalette(var Palette:PaletteType) – возвращает стандартную палитру. В качестве примера рассмотрим фрагмент программы, осуществляющий установку цвета фона и цвета рисования, а также чтение текущей палитры и вывод значений, содержащихся в регистрах палитры: SetPalette(5,18); {записываем в 5-й регистр палитры цвет 010010 - ярко- зеленый} SetColor(5); {текущий цвет рисования - цвет 5-го регистра палитры} SetBkColor(5); {записываем в 0-й регистр палитры цвет фона 000101 - фиолетовый: фон сразу меняет цвет} GetPalette(p); {читаем палитру в переменную р типа PaletteType} for i:=0 to p.size do Write(p.colors[i]:5); {выводим цвета палитры на экран} … Процедуры и функции управления типом, толщиной линии и видом штриховки. Модуль Graph содержит средства, позволяющие управлять типом и толщиной линии, а также образцом закраски замкнутых контуров. 1. Процедура SetLineStyle(style, pattern, thickness: word) – устанавливает стиль style или образец pattern линии и ее толщину thickness. Для установки стиля используют следующие константы: SolidLn=0; {сплошная} DottedLn=l; {точечная} CenterLn=2; {штрихпунктирная} DashedLn=3; {пунктирная} UserBitLn=4; {определенная программистом в образце}
Если указаны стили 0..3, то образец игнорируется. Если установлен стиль 4, то вид линии определяется образцом. Образец линии - 16 или 48 бит, заданных шестнадцатеричным числом, единицы и нули кодируют точки и пропуски, например: комбинация 1010 1010 1010 1010, которая соответствует шестнадцатеричному числу $АААА, означает линию из частых точек. Образцы из 48 бит используют для определения вида линии тройной толщины. Толщину линии можно установить одинарной и тройной, соответствующие константы выглядят следующим образом: NormWidth=l; {нормальная толщина линии} ThickWidth=3; {тройная толщина линии }
Например: SetLineStyle(UserBitLn,$AAAA,NormWidth); {устанавливает текущий стиль линии: частые точки, линия одинарной толщины}
2. Процедура SetFillStyle(fillstyle, color: word) - устанавливает образец fillstyle и цвет color штриховки замкнутых контуров. Для определения образцов штриховки можно использовать следующие константы:
3. Процедура SetFillPattern (FillPattern:FillPatternType; color:word) – устанавливает пользовательский образец fillPatern и цвет color штриховки. Образец штриховки задают с помощью переменной специального типа: Туре FillPatternType = array [1..8] of byte;... Переменная этого типа определяет квадрат 8x8 точек, где биту, установленному в 1, соответствует точка заданного цвета, а биту, установленному в 0 - точка цвета фона. Например: Const Р1:FillPatternType = ($АА, $55, $АА, $55, $АА, $55, $АА, $55); Р1 определяет квадрат 8x8 точек следующего вида: На экране при штриховке данным стилем мы будем видеть частые ромбы. 4. Процедура FloodFill(x, у, color: word) - закрашивает текущим образцом и цветом закраски, установленными процедурой SetFillStyle, область, ограниченную контуром цвета color, внутри которой находится точка с координатами (х,у). Если контур не замкнут, то будет закрашен весь экран. Процедуры и функции рисования. Модуль Graph предоставляет программисту большой набор процедур и функций, рисующих различные примитивы (простейшие фигуры, размеры и местоположение которых определяются параметрами). 1. Процедура PutPixel(x,у,color:word) - рисует точку цветом, определенным в регистре палитры с номером color, в точке экрана с координатами (x, у). 2. Функция GetPixel(x,y:word):word - возвращает номер регистра палитры, определяющего цвет точки с указанными координатами. 3. Функция MoveTo(x,y:word):word - задает положение текущей точки - точки, используемой в качестве исходной при рисовании линий или выводе текста. 4. Процедура MoveRel(dx,dy:word) - задает положение текущей точки относительно ее предыдущего положения. 5. Функции GetX:word и Get Y:word -возвращают соответственно координаты x и у текущей точки. 6. Функции GetMaxX:word и GetMaxY:word - возвращают соответственно максимальные размеры экрана в точках для текущего режима. 7. Процедура Line(x1,y1,x2,y2:word) - рисует линию из точки (х1,у1) в точку (х2,у2). 8. Процедура LineTo(x,y:word) - рисует линию из текущей точки в точку (х,у). 9. Процедура LineRel(dx,dy:word) - рисует линию из текущей точки в точку, отстоящую от текущей на dx,dy. 10. Процедура Rectangle(x1,y1,x2,y2:word) - рисует прямоугольник по координатам левого верхнего и правого нижнего углов. 11. Процедура Bar(x1,y1,x2,y2:word) - рисует заштрихованный прямоугольник с заданными координатами текущим цветом и закрашивает его текущим образцом закраски. 12. Процедура Bar3D(xl,yl,x2,y2,depth:word; top: boolean) - рисует параллелепипед, у которого: размер передней грани определяется координатами х1, у1, х2, у2; глубина depth обычно задается равной 25% ширины, а параметр top определяет, рисовать ли верхнюю грань (да, если true, и нет, если false). Верхнюю грань не рисуют, если необходимо изобразить несколько параллелепипедов, стоящих друг на друге. Передняя грань закрашивается текущим образцом и цветом закраски. 13. Процедура DrawPoly(numPoints:word; var PolyPoints) - рисует ломаную линию. Первый параметр определяет количество вершин ломаной, а второй - координаты этих вершин в массиве элементов специального типа PointType: Type PointType = record x,y:word; end;... Например: Var MP:array[5] of PointType; {объявление массива координат точек} DrawPoly(5,MP); {рисуем ломаную линию}
14. Процедура FillPoly (numPoints:word; Var PolyPoints) - рисует закрашенный многоугольник с указанными вершинами. 15. Процедура Circle (х, у, radius:word) - рисует окружность заданного радиуса radius с центром в точке (х, у). 16. Процедура Arc (х, у, stangle, endangle, radius: word) - рисует дугу окружности указанного радиуса radius от угла stangle до угла endangle. Углы отсчитываются от положительного направления оси абсцисс против часовой стрелки и указываются в градусах. Существует специальная процедура, которая позволяет определить координаты концов дуги. 17. Процедура GetArcCoord (Var ArcCoord:ArcCoordType) – возвращает координаты концов дуги через параметр-переменную специального типа ArcCoordType, который описан следующим образом: Туре ArcCoordType = record х, у, {центр дуги} xstart, ystart, {начало дуги} xend, yend:word {конец дуги} end; Например, нарисуем дугу и соединим ее концы: Var ArcCoords: ArcCoordType; … Arc(100, 100, 0, 270, 30); {рисуем дугу} GetArcCoords(ArcCoords); {определяет координаты концов дуги} with ArcCoords do Line(Xstart, Ystart, Xend, Yend); {рисуем соединяющую линию} 18. Процедура Pieslice (х, у, stangle, endangle, radius:word) - рисует заштрихованный сектор или окружность (если конечный угол равен начальному). Углы отсчитываются от положительного направления оси абсцисс против часовой стрелки и указываются в градусах. 19.Процедура Ellipse (х, у, stangle, endangle, radiusX, radiusY: word) - рисует эллипс или его дугу. 20. Процедура Sector (х, у, stangle, endangle, radiusX, radiusY: word) - рисует заштрихованный эллипс или его сектор. 21. Процедура FillEllipse (х, у, radiusX, radiusY: word) - рисует заштрихованный эллипс. Процедуры и функции управления текстом. Текст в графическом режиме может быть выведен процедурами Write и WriteLn, но при этом управление выполняется аналогично текстовому режиму. Специально для работы с текстом в графическом режиме модуль Graph предлагает следующие процедуры и функции. 1. Процедура SetTextStyle (font, direction, charsize: word) – устанавливает текущий шрифт font, направление вывода строки direction и размер шрифта charsize. Для установки шрифта используют специальные константы: DefaultFont=0; {обычный} TriplexFont=1; {полужирный} SmallFont=2; { мелкий} SanserifFont=3; {прямой} GothicFont=4; { готический} Направление вывода может быть либо горизонтальным, либо вертикальным: HorizDir=0; {горизонтальное направление} VertDir=1; {вертикальное направление} Размер шрифта указывается значением, на которое необходимо умножить исходный размер шрифта (8x8 точек). Таким образом, шрифт можно увеличивать в целое число раз. 2. Процедура SetTextJustify(horiz, vert: word) - устанавливает способ выравнивания для горизонтального horiz и вертикального vert направлений вывода. Способ выравнивания определяется относительно некоторой точки с помощью специальных констант: LeftText=0; {точка слева от текста} CenterText=1; {точка по центру текста при горизонтальном направлении вывода} RightText=2; {точка справа от текста} BottomText=0; {точка под текстом} CenterText=1; {точка по центру текста при вертикальном направлении вывода} TopText=2; {точка над текстом} 3. Функция TextHeight(st:string):word - возвращает высоту строки st в точках. 4. Функция TextWidth(st:string):word - возвращает ширину строки st в точках. 5. Процедура OutText (st:string) - выводит строку, выравнивая ее заданным способом относительно текущей точки. 6. Процедура OutTextXY(x, y:word; st:string) - выводит строку st, выравнивая ее в соответствии с установленными режимами вертикального и горизонтального выравнивания относительно точки (х, у). Процедуры управления окнами, страницами. Помимо управления цветом, рисования примитивов и вывода текстов модуль Graph содержит специальные процедуры управления окнами и страницами. 1. Процедура ClearDevice - очищает экран. 2. Процедура SetViewPort (х1, у1, х2, y2: word; clip:boolean) – устанавливает окно. Параметры xl, у1, х2, у2 определяют размеры окна, а параметр clip - будут ли видимы фрагменты рисунка, вышедшие за границы окна. 3. Процедура GetViewSettings(Var win:ViewPortType) - возвращает параметры последнего окна через параметр-переменную win типа ViewPortType: Туре ViewPortType =record x1,y1,x2,y2:word; {координаты} clip:boolean; {отсечение} end;... 4. Процедура ClearViewPort - очищает окно, связывая все точки этого окна с 0 регистром палитры. 5. Процедура SetActivePage (pageNumber:word) - переключает активную страницу - делает активной страницу с указанным номером pageNumber. На активной странице строится нужное изображение, в то время как высвечиваться продолжает прежняя страница. Когда изображение готово, осуществляют переключение видимости страниц и появляется новое изображение. 6. Процедура SetVisualPage(pageNumber:word) - переключает видимость страниц. Например: … SetVisualPage(0); {установили видимой 0 страницу} SetActivePage(1); {установили активной 1 страницу} Rectangle(10, 60, 30, 80); {вывели прямоугольник} Readln; {убедились, что он не видим} SetVisiialPage(1); {установили видимой 1 страницу - прямоугольник стал видимым} … Процедуры и функции создания движущихся изображений. Модуль Graph предоставляет некоторые ресурсы для создания движущихся изображений. 1. Процедура GetImage(x1, y1, x2, y2:word; var p:pointer) - сохраняет в памяти прямоугольный фрагмент изображения. Параметры х1, у1, х2, у2 определяют прямоугольник. Параметр р должен содержать адрес буфера в памяти, куда копируется изображение. Размер этого буфера определяется с помощью специальной функции ImageSize. 2. Функция ImageSize(x1, y1, x2, y2:word):word - возвращает размер буфера, необходимого для сохранения прямоугольного фрагмента изображения. 3. Процедура PutImage(x, y:word; var p:pointer; bitblt:word ) – выводит сохраненное изображение на экран в прямоугольную область с координатами верхнего левого угла (х, у). Параметр р должен содержать адрес буфера. Способ наложения bitblt определяется специальными константами: NormalPut=0; {наложение со стиранием} XorPut=1; {побитное «исключающее или»} OrPut=2; {побитное «или»} AndPut=3; {побитное «и»} NotPut=4; {побитное «не»} Так, если цвет точки был розовым (12 = 11002) и на нее накладывается точка того же цвета (12 = 11002), то при разных способах наложения и стандартной палитре мы получим NormalPut - 1100 - точка розового цвета; XorPut - 0000 - точка черного цвета (цвета фона); OrPut - 1100 - точка розового цвета; AndPut - 1100 - точка розового цвета; NotPut - 0011 - точка голубого цвета. Буфер под образ обычно размещается в динамической памяти. Например: Size:=ImageSize(0,0,99,99); GetMem(p,Size); {выделяем память под буфер для сохранения изображения} х:=0; у:=0; Pieslice(50,50,0,360,7); {рисуем закрашенный круг} GetImage(0,0,99,99,p^); {сохраняем изображение в памяти} repeat PutImage(x,y,p^,0); {выводим изображение на экран, стирание выполняется чистым краем образа} delay (100); {задержка} х:=х+3; у:=у+1; until x>getmaxx-50; {выход по достижении конца экрана} FreeMem(p, Size); {освобождаем динамический буфер} …
|