Графические возможности языка PASCAL

ÄВВЕДЕНИЕ

ÄРождение Паскаля

ÄГрафические возможности языка Паскаль

ÄРабота в графическом видеорежиме. Общий обзор

ÄИнициализация графического режима

ÄУправление экраном и окнами

ÄУправление цветом и фоном

ÄПостроение простейших графических изображений

ÄУправление курсором

ÄВывод текстовой информации в графическом видеорежиме

ÄАлгоритм построения окон и статических объектов в них

ÄДеловая графика

ÄПостроение графиков  элементарных функций

ÄРеализация имитации движения графических объектов

ÄСПРАВОЧНЫЕ ТАБЛИЦЫ

ÄСправочные  материалы о языке Pascal

ÄТВОРЧЕСТВО УЧАЩИХСЯ

ÄЗадания для самостоятельного выполнения

ÄПостроение функций второго порядка

ÄЭТО ИНТЕРЕСНО

ÄЛИТЕРАТУРА

 

ÄКАРТА

Справочные материалы о языке Pascal

 

 

СОДЕРЖАНИЕ

1. Среда Турбо Паскаля

  1. - вспомогательные действия.
  2. File(файл) – действие с файлами.
  3. Edit (редактировать) – редактирование файлов.
  4. Search (искать) – поиск.
  5. Run (работа) –прогон программы.
  6. Compile (компиляция) – компиляция программы.
  7. Debug ( отладка) – отладка программы.
  8. Options (варианты) – установка параметров среды.
  9. Windows (окно) – работа с окнами.
  10. Help (помощь) –обращение к справочной службе.
  11.  Редактирование файла

2. Язык программирования Турбо Паскаль

  1. Идентификаторы языка Турбо Паскаль (ТП)
  2. Общие понятия и правила программирования на языке Турбо Паскаль
  3. Структура программы на языке Турбо Паскаль
  1. Uses

  2. Const (константы)

  3. Type (тип данных)

    Простые типы

    1.  Численные типы

    2.  Символьные переменные - char

    3.   Логические переменные - boolean

    Сложные типы

    1. Массивы- array.

    2.  Строковые переменные – string.

  4. Var (Переменные)

  5. Основная программа

    1. Ввод исходных данных.

    2.   Расчет.

      • Основные математические соотношения и операции Турбо Паскаль
      • Стандартные функции Турбо Паскаля
      • Стандартные процедуры
      • Константы
    3.     Вывод результатов

  1. Технология программирования. Пример решения задачи
  2. Структурное программирование

  3. Модуль Graph


Среда Турбо Паскаля

Среда Турбо Паскаля (ТП) загружается файлом turbo.exe. Главное меню ТП содержит оглавление дополнительных меню:

  1. - вспомогательные действия.
  2. File(файл) – действие с файлами.
  3. Edit (редактировать) – редактирование файлов.
  4. Search (искать) – поиск.
  5. Run (работа) –прогон программы.
  6. Compile (компиляция) – компиляция программы.
  7. Debug ( отладка) – отладка программы.
  8. Options (варианты) – установка параметров среды.
  9. Windows (окно) – работа с окнами.
  10.  Help (помощь) –обращение к справочной службе.

Выбор пункта главного меню приводит к появлению дополнительного меню, вид и назначение которого для каждой клавиши рассмотрены ниже на примере версии Турбо Паскаля 6.0.

  1. Вспомогательные действия
    About Версия о Паскале
    Refresh display Восстановление экрана
    Clear Desktop Очистка экрана
     
  2. File (файл) – действие с файлами;
    OpenF3 Открыть файл {A:\LB1}
    New Новый файл
    SaveF2 Сохранение
    Save as … Сохранить как
    Save all Записать всё
    Change dir Изменение директории
    Print Распечатывает файл из активного окна
    Get into Получение информации
    Dos shell Временный выход в DOS (из Turbo Pascal)
    Exit Alt-X Выход из Turbo Pascal

     

  3. Edit – редактирование
    Restore Line Восстановление строки
    CutShift+Del Удаление выделенного блока из окна в буфер
    Copy Ctrl-Ins Копирование выделенного блока из окна в буфер
    Paste Shift-Ins Копирование буфера в окно редактирования
    Copy Examples Копирование примера
    Clear Ctrl-Del Удаление выделенного блока
     
  4. Search - поиск
    Find Найти
    Replace Заменить
    Search again Повторить поиск
    Go to line number Искать линию с номером
    Find procedure Поиск процедуры
    Find Error Поиск ошибки
     
  5. Run – работа
    Run Ctrl+F9 Запуск программы
    Program Reset Прекращение отладки
    Go to cursor Начало режима отладки
    Trace into F7 Режим отладки сначала
    Step over F8 Следующий шаг
    Parameters Параметры
     
  6. Compile – компиляция
    CompileAlt+F9 Создание exeфайла
    MakeF9 Перекомпиляция измененных файлов
    Build Перекомпиляция всех файлов
    Destination Путь компиляции
    Primary File Имя компилируемого файла
     
  7. Debug – отладка
    Evaluate/Modify Ctrl+F4 Оценка модификации
    Watches Наблюдение
    Toggle Break Point Ctrl+F8 Установка контрольной точки
    Break points Контрольные точки
     
  8. Options – Опции
    Compiler Компилятор
    Memory size Размер памяти
    Linker Редактор связи
    Debugger Отладка
    Directories Директории
    Environment Окружающая среда
    Save options Запись опций
    Retrieve Загрузка опций
     
  9. Windows – окна
    Size/Move Размер и положение окна на экране
    ZoomF5 Распахнуть
    Title Черепица
    Cascade Каскад
    Next F6 Следующее окно
    Previous Shift+F6 Предыдущее окно
    CloseAlt+F3 Закрыть
    Watch Окно наблюдения
    Register Регистр
    Output Выходное окно
    Call stack Показать список
    User screenAlt+ F5 Окно пользователя
    List Посмотреть содержимое экрана
     
  10. Help – помощь
    Contents Содержание
    IndexSheft+F1 Алфавитный список
    Topic Search Ctrl+F1 Поиск в окрестностях курсора
    Previous Topic Alt+F1 Предыдущее сообщение

Редактирование файла

Для корректировки файла в редакторе ТП зарезервированы следующие комбинации клавиш:

Язык программирования Турбо Паскаль

  1. Идентификаторы языка Турбо Паскаль (ТП)

    Идентификаторами ТП называют произвольный набор символов.

    Требования к идентификаторам:

    • Идентификатор состоит из латинских букв и цифр (заглавные и строчные буквы не различаются).
    • Идентификатора должен начинаться обязательно с буквы {"а1", а не "1а"}.
    • Идентификатор может состоять из любого количества символов, но распознаются только первые 63 .
    • Служебные слова запрещается использовать в качестве идентификаторов.
    • При написании идентификатора нельзя использовать пробелы.
  2. Общие понятия и правила программирования на языке Турбо Паскаль
    • Программа составляется из операторов Турбо Паскаля, которые разделяются символом ";".
    • Для выделения группы операторов используют операторные скобки: begin…..end.
    • Несколько операторов, заключенных в операторные скобки, называют составным оператором.
    • В тексте программы фигурными скобками выделяются комментарии, которые игнорируются при выполнении программы. В тексте лекций будем также использовать фигурные скобки для комментирования.
  3. Структура программы на языке Турбо Паскаль
    Program P1; {заголовок, название программы} {±}

    Uses………;{подключение внешних модулей с расширением *.tpu}{±}

    Const……...; {описание констант} {±}

    Type………; {задание типов} {±}

    Var………..; {раздел объявления переменных}{±}

    Function F1 ….; {описание функций} {±}

    Procedure Pr1 ….; {описание процедур} {±}

    Begin{начало основной программы} {+}

    ….. {тело основной программы} {±}

    End. {конец основной программы} {+}.

    Примечание. {+} – обязательная часть программы,

    {±} – необязательная часть программы.

    Рассмотрим основные части программы

    3.1. Uses – подключение внешних библиотек для расширения в программе набора доступных операторов.

    Пример:

    UsesDOS, Crt, Graph, Printer; { Подключение четырех стандартных модулей:

    DOS – использование в программе команд операционной системы.

    Crt – расширение возможностей ввода-вывода, использование звукового генератора.

    Graph – подключение графических процедур и функций.

    Printer – легкий доступ к печати.}

    Пример. Следующая программа обеспечивает реализацию легкого доступа к печати.

    UsesPrinter; {подключение модуля}

    begin

    Write(‘привет’); {выводится на экран слово "привет"}

    Write(lst,‘привет’); {выводится на принтер слово "привет"}

    end.

    3.2. Const (константы).

    В этом разделе описания идентификаторам задаются значения, которые не меняются при выполнении программы.

    Пример.

    Const

    a=4; {численная константа}

    b=’A’; {символьная константа}

    s=’ABBA’; {строковая константа}

    b1=false; {логическая константа}

    M:array[1..4] of integer=(1,5,6,7); {массив констант}.

    3.3. Type (тип данных) определяет множество допустимых значений, которые принимает идентификатор и множество операций, которые с ним можно производить.

    На рисунке приведены основные типы данных языка Турбо Паскаль.

    Основные типы данных ТП

    Типы данных, которые далее будут использованы при написании программ, рассмотрим подробнее.

    Простые типы

    3.3.1 Численные типы

    Тип Размер,

    Байт

    Диапазон значений
    Byte 1 0…255
    Shortint 1 -128…127
    Word 2 0…65535
    Integer 2 -32768…32767
    Longint 4 -2147483648…2147483647
    Single 4 7..8 значащих цифр

    -45…38-диапазон десятичного порядка

    Real 6 11..12 значащих цифр

    -39…38-диапазон десятичного порядка

    Double 8 15..16 значащих цифр

    -324…308-диапазон десятичного порядка

    Extended 10 19..20 значащих цифр

    -4951…4932-диапазон десятичного порядка

    3.3.2. Символьные переменные - char

    Значениями символьного типа является множество всех символов ПК. Каждому символу приписывается целое число в диапазоне 0…255.

    3.3.3. Логические переменные - boolean

    Значениями логического типа может быть одна из предварительно объявленных констант (False – ложь, True – истина).

    Сложные типы

    3.3.4. Массивы- array.

    Тип данных Массив позволяет одному идентификатору задать несколько значений, которые отличаются порядковым номером. Номер элемента массива указывается после идентификатора в квадратных скобках {M[5] – пятый элемент массива М}. При описании массива указывается диапазон номеров элементов массива и тип, к которому относится каждый его элемент. Массивы могут быть одно-, двух- и многомерными.

    Пример описания и заполнения элементов массива.

    Var {описание массивов}

    M: array [1..5] of integer; {одномерный массив М с номерами элементов от 1 до 5, состоящий из целых чисел}

    M1: array [2..3,11..15] of char; {двумерный массив М1 с номерами строк от 2 до 3, с номерами столбцов от 11 до 15, состоящий из символов}

    Begin {заполнение массива}

    М[2]:=100; {второму элементу численного массива М присвоено значение 100}

    М1[2,3]:=’d’; {элементу второй строки и третьего столбца символьного двухмерного массива М1 присвоено значение ’d’}

    End.

    3.3.5. Строковые переменные – string.

    Переменные строкового типа состоят из нескольких символов.

    Пример.

    Var s:string; {описание идентификатора s как строковую переменную}

    Begin

    s:=’Привет’; {задание значения строковой переменной}

    Writeln(s); {распечатка на экране слова "Привет"}

    end.

    3.4. Var (Переменные).

    Все идентификаторы, используемые в программе, должны быть описаны. Описать идентификатор - указать тип данных, к которому он относится.

    Пример.

    Var

    x,y:real; {идентификаторы x,y - переменные реального типа}

    i,j,k:integer; { идентификаторы i,j,k – переменные целого типа }

    M:array [1..4] of char; { M - одномерный символьный массив из 4 элементов}

    M1:array [1..3,1..4] of byte; { M1 двухмерный массив из 12 элементовцелого типа}

    Type

    re=real; { описание нового типа: идентификатор re - реальный тип}

    Var

    z:re; {идентификатор z – переменная типа re, то есть реального типа}

    {Четыре последние строки примера можно заменить следующим

    образом: Var z:real;}

    3.5. Основная программа

    Основная программа, как правило, состоит из трех частей:

    1. Ввод исходных данных.
    2. Расчет.
    3. Вывод результата.

    Рассмотрим эти части более подробно.

    3.5.1. Ввод исходных данных.

    Варианты ввода исходной информации покажем на примерах:

    • Const х=20; {идентификатору x задается постоянного значения в разделе описания констант}
    • y:=20; {идентификатору y присваивается численное значение в теле основной программы}
    • read(x); { выполнение программы приостанавливается для ввода значения "x" с клавиатуры. Оператор аналогичен оператору INPUT в Бейсике}
    • readln(x); {ввод значения идентификатора с новой строки}
    • read(x,y); {ввод двух значений x ,y. Одно значение от другогоотделяется нажатием клавишей пробела или Enter}
    • Write(‘x= ’); readln(x); {Ввод значения с пояснением. На экране в месте ввода появляется сообщение: ‘х= ’}

    3.5.2.Расчет.

    Основные математические соотношения и операции Турбо Паскаль:

    • + { сложение}
    • – { вычитание}
    • * { умножение}
    • / { деление}
    • = {равенство (используется при описании констант, типов и т.д.)}
    • := {присваивание}
    • > { больше}
    • < { меньше}
    • >= { больше либо равно}
    • <= { меньше либо равно}
    • <> { не равно}.
     

    Стандартные функции Турбо Паскаля

    • abs(x); {модуль, абсолютная величина}
    • exp(x); {еx- экспонента}
    • sqr(x); {x2 - квадрат числа}
    • sqrt(x); {корень квадратный}
    • ln(x); {вычисление натурального логарифма}
    • {xa=exp(a*ln(x)) - возведение в степень}
    • sin(x); {-вычисление синуса}
    • cos(x); {-вычисление косинуса}
    • {tg(x) = sin(x)/cos(x) - вычисление тангенса}

    • {ctg(x) = cos(x)/sin(x) - вычисление котангенса}

    • arctan(x); {вычисление арктангенса}
    • round(x); {округление: x=4.9; y=round(x), ⇒ y=5 }
    • trunc(x); { выделение целой части: x=4.9; y=trunc(x),  y=4}
    • i mod j; { остаток целочисленного деления 10 mod 3 → 1 {10:3=3(1)}
    • i div j ; {целочисленное деление 10 div 3 → 3}
    • chr(i) ; {по порядковому номеру i возвращает символ}
    • ord(b);{функция, обратная предыдущей (возвращение порядкового номера)}
    • int(r) ;{возвращение целой части числа}
    • frac(r) ;{возвращение дробной части числа}

    Стандартные процедуры

    • Dec(i); {i:=i-1}
    • inc(i); {i:=i+1}
    • GotoXY(i,j); {перемещение курсора в указанную точку экрана с координатами i, j}
    • str(x,S); {идентификатор численного типа x переводит в строковую переменную S: x→S. }{ Требуется модуль Crt}
    • Clrscr; {очистка экрана} {Требуется модуль Crt }

    Константы

    Pi{число π = 3.14…}

    3.5.3. Вывод результатов

    • Write(x); {вывод на экран значения x: при реальном x=4, на экран выводится "4.0000000000E+00"}
    • Write(x:5:1); {вывод форматированных данных, то есть выделение на экране заданного количества позиций для вывода идентификатора: 5 показывает общее число позиций, 1 – число знаков после запятой: при x=4 , на экран выводится "4.0"}
    • Writeln(x); {вывод с новой строки}
    • Writeln(x,y); {вывод двух значений идентификаторов}
    • Writeln(‘x= ’,x:4:1); {вывод с комментариями и форматированием: "x= 4.0"}
    • Writeln(‘Площадь круга радиусом 3 м равна’,3.14*sqr(3):4:1); {Вывод с комментариями и выполнением расчетов: "Площадь круга радиусом 3 м равна 28.3"}


    Технология программирования. Пример решения задачи

    Включает пять технологических операций (этапов):

    1. Постановка задачи.
    2. Математическое описание.
    3. Алгоритм – структограмма.
    4. Написание текста программы.
    5. Отладка, получение результатов.

    При разработке программ будем последовательно выполнять технологические этапы программирования, для наглядности помещая их в таблицу.

    Пример. Определить площадь круга.

    Этапы разработки программы сведены в таблицу.

    Таблица

    N Этапы программирования Выполнение
    1. Постановка задачи Составить программу для вычисления площади круга радиусом R.
    2. Математическое описание Расчетная формула: S=πR2
    3. Разработка алгоритма (структограммы)
    Описание R,S
    Ввод R
    Расчет S=πR2
    Вывод S

     
    4. Написание программы Program P1; { программа вычисления площади круга}

    Var r,S:real; {Описание переменных}

    Begin

    Read(R); {в этом месте программа останавливается, для ввода числового значения R}

    {R:=4;}{другой вариант ввода исходных данных}

    S:=3.14*Sqr(R); {расчет}

    {S:=Pi*sqr(R);} {другой вариант расчета}

    Writeln(‘R=’,R:3:1, ‘S=’,S:8:4); {Вывод}

    end.

    5. Отладка и получение результатов R= 4.0 S= 48.7654
     

    Структурное программирование

    Структурное программирование – это стиль программирования, позволяющий разрабатывать хорошо структурированные программы.

    Основные положения структурного программирования:

    1. Программа разбивается на блоки, каждый из которых имеет один "вход" и один "выход".
    2. Любая программа может быть составлена из трех структур или блоков, которые представлены в таблице.
    3. Алгоритмы при структурном программировании представляются в виде структоргамм, элементы написания которых также приведены в таблице.


    Таблица

    Основные типы структур и примеры их изображения на структограммах

    Название Алгоритм
    Блок-схема Структограмма
    а) линейная структура

    б) Ветвящаяся структура

    в) циклическая структура:    
    с предусловием

    с постусловием

Модуль Graph

ТР обладает достаточно разнообразными средствами для работы со стандартным VGA экраном (возможно также использование и и других типов видеоадаптеров).

VGA адаптер имеет разрешение 640х480 пиксел (точка (0,0) в левом верхнем углу экрана), 16 цветов.

Перед началом работы с графикой необходимо ее инициализировать, а по окончании - "закрыть". Все графические процедуры и функции находятся в модуле Graph, поэтому также необходимо его подключение.

Общая структура графической программы:

Uses crt, graph;
  var Gd, Gm: Integer;
begin
  Gd := Detect;
  InitGraph(Gd, Gm, 'c:\bp\bgi');
  ...
  {Здесь построение изображения}
  ...
  ReadKey;
  CloseGraph;
end.

Путь c:\bp\bgi указывает расположение файла egavga.bgi (драйвер графического адаптера). На разный компьютерах этот путь может быть разным. Если файл egavga.bgi поместить в каталог с программой, то путь можно не указывать.

Основные графические процедуры и функции:

Построение фигур

PutPixel(x,y,c)
- отображает на экране точку с координатами (x,y) и цветом c

Line(x1,y1,x2,y2)
- рисует линию с началом в точке (x1,y1) и концом - (x2,y2)

Rectangle(x1,y1,x2,y2)
- рисует контур прямоугольника с диагональю (x1,y1) - (x2,y2)

Bar(x1,y1,x2,y2)
- рисует закрашенный прямоугольник с диагональю (x1,y1) - (x2,y2)

Circle(x,y,r)
- рисует окружность с центром (x,y) и радиусом r

Ellipse(x,y,ba,ea,xr,yr)
- рисует дугу эллипса с центром в (x,y), горизонтальным и вертикальным радиусом xr и yr, и начальным и конечным углом ba и ea

FillEllipse(x,y,xr,yr)
- рисует закрашенный эллипс с центром в (x,y), горизонтальным и вертикальным радиусом xr и yr

Определение цветов и стилей

GetPixel(x,y)
- возвращает цвет пиксела с координатами (x,y)

SetColor(c)
- устанавливает цвет изображения (для линий)

SetFillStyle(p,c)
- устанавливает текущий стиль p и цвет c (для "закрашенных" фигур)

FloodFill(x,y,b)
- закрашивает замкнутую область с внутренней точкой (x,y) и цветом контура b

Работа с текстом

OutTextXY(x,y,st)
- выводит на экран строку st с позиции (x,y)

SetTextStyle(f,d,s)
- устанавливает шрифт f, его направление d и размер

Сообщения об ошибках


function GraphErrorMsg(ErrorCode : integer) : String;

Возвращает строку сообщения об ошибке для заданного кода ErrorCode.

function GraphResult : integer;

Возвращает код ошибки для последней графической операции.

Определение адаптера, инициализация и переход между текстом и графикой


procedure DetectGraph(var GraphDriver, GraphMode: integer);

Проверяет аппаратуру и определяет какой графический драйвер и в каком режиме используется (тип адаптера - в GraphDriver, режим - GraphMode).

function GetDriverName : string;
Вoзвращает строку с именем текущего драйвера.

procedure InitGraph(var GraphDriver : integer;
var GraphMode : integer;
PathToDriver : String);

Инициализирует графическую систему и устанавливает устройство в графический режим. PathToDriver - полный путь к драйверу .bgi, обычно 'c:\tp\bgi'. Если путь опущен (''), то драйвер должен находится в текущем каталоге.

function RegisterBGIfont(Font : pointer) : integer;

Регистрирует шрифт BGI для графической системы. Зарегистрированный фонт может использоваться в вызове SetTextStyle. Он может быть загружен с диска в кучу или преобразован в .obj файл (с помощью binobj.exe) и связан в файл .exe. В случае ошибки функция возвращает отрицательное значение.

function RegisterBGIdriver(Driver : pointer) : integer;

Регистрирует драйвер BGI для графической системы. Зарегистрированный драйвер будет использоваться процедурой InitGraph. Он может быть загружен с диска в кучу или преобразован в .obj файл (с помощью binobj.exe) и связан в файл .exe. В случае ошибки функция возвращает отрицательное значение.
function InstallUserDriver(DriverFileName : string; AutoDetectPtr : pointer) : integer;

Устанавливает пользовательский драйвер устройства в BGI таблицу драйверов устройств.

function InstallUserFont(FontFileName : string) : integer;

Устанавливает новый шрифт, который не встроен в BGI систему.

procedure SetGraphBufSize(BufSize : word);

Позволяет изменить размер буфера для функций заполнения (закрасок). Буфер с размером BufSize байт размещается в куче при обращении к InitGraph. По умолчанию размер 4К, что достаточно для построения многоугольника с 650 линиями.

function GetMaxMode : integer;
Возвращает номер максимального режима текущего загруженного драйвера.

procedure GetModeRange(GraphDriver : integer; var LoMode, HiMode : integer);

Возвращает минимальный и максимальный графические режимы для данного драйвера.

function GetModeName(GraphMode : integer) : string;

Возвращает строку с именем указанного графического режима.
procedure SetGraphMode(Mode : integer);

Переводит систему в указанный графический режим и очищает экран.

function GetGraphMode : integer;

Возвращает текущий графический режим.

procedure GraphDefaults;

Устанавливает текущий указатель (CP) в исходную позицию (т.е. точку 0,0) и сбрасывает все устанавливаемые пользователем режимы в исходное состояние, в т.ч. окна, палитру, основной цвет и цвет фона, стиль линий, шрифт, выравнивание текста, размер символов и стиль выводимого текста. Система должна находиться в графическом режиме.

procedure RestoreCrtMode;

Восстанавливает текстовый видеорежим, который был до инициализации графики. Не освобождает буфер и не обнуляет установленные переменные.

procedure CloseGraph;

Закрывает графическую систему. Восстанавливает текстовый видеорежим, который был до инициализации графики. Освобождает буфер и сбрасывает все графические переменные.

Координаты графического курсора


function GetX : integer;

Возвращает координату X текущей позиции (CP).

function GetY : integer;

Возвращает координату Y текущей позиции (СР).

function GetMaxX : integer;

Возврашает максимальный Х (разрешение по горизонтали) для текущего графического драйвера и режима.

function GetMaxY : integer;

Возвращает максимальный Y (разрешение по вертикали) для текущего графического драйвера и режима.

Работа с экраном, окнами и страницами


procedure ClearDevice;
Очищает экран и устанавливает текущий указатель (CP) в начало.

procedure SetViewPort(x1, y1, x2, y2 : integer; Clip : boolean);

Устанавливает текущее окно для графического вывода. Если Clip = ClipOn (true), то изображения, не вмещающиеся в границы, будут отсекаться, если ClipOff (false) - не будут.

procedure GetViewSettings(var ViewPort : ViewPortType);

Возвращает запись, содержащую параметры окна и отсечения.

procedure ClearViewPort;

Очищает текущее окно.

procedure SetVisualPage(Page : word);

Устанавливает видимой страницу с номером Page (нумерация страниц начинается с нуля).

procedure SetActivePage(Page : word);

Устанавливает активную страницу для графического вывода. Страница при этом может быть невидимой.
 

Точки


procedure PutPixel(X, Y : integer; Pixel : word);

Рисует точку (пиксел) с координатами (X,Y) цветом Pixel.
function GetPixel(X, Y : integer) : word;

Возвращает цвет точки с координатами (X,Y).

Линии и перемещение текущего указателя


procedure SetWriteMode(WriteMode : integer);

Устанавливает режим вывода (копирование или исключающее или) для линий, рисуемых с DrawPoly, Line, LineRel, LineTo, Rectangle.

procedure LineTo(X, Y : integer);

Рисует линию от текущего указателя к точке с координатами (X,Y).

procedure LineRel(Dx, Dy : integer);

Рисует линию от текущего указателя (CP) к точке, лежащей на заданном растоянии от него.

procedure MoveTo(X, Y : integer);

Передвигает текущий указатель (CP) в (X,Y).

procedure MoveRel(Dx, Dy : integer);

Передвигает текущий указатель (CP) на заданное расстояние от его текущей позиции.

procedure Line(x1, y1, x2, y2 : integer);

Рисует линию от (X1,Y1) к (X2,Y2).

procedure GetLineSettings(var LineInfo : LineSettingsType);

Возвращает текущие стиль, шаблон и толщину линии, установленные SetLineStyle.

procedure SetLineStyle(LineStyle : word; Pattern : word; Thickness : word);

Устанавливает текущие стиль, шаблон и толщину линии (см. соответствующие таблицы констант выше).

Многоугольники, заполнения и фигуры


procedure Rectangle(x1, y1, x2, y2 : integer);

Рисует прямоугольник с заданными координатами без заполнения (т.е. рамку), используя текущий цвет и тип линии.

procedure Bar(x1, y1, x2, y2 : integer);

Рисует прямоугольник с заданными координатами, используя текущий цвет и тип линии и заполняет его текущим стилем.

procedure Bar3D(x1, y1, x2, y2 : integer; Depth : word; Top : boolean);

Рисует параллелепипед с координатами передней грани (x1, y1, x2, y2) и глубиной Depth, используя текущий стиль и цвет и заполняет его текущим стилем. Если Top = TopOn (true), то верхняя грань рисуется, если TopOff (false), то нет.
procedure DrawPoly(NumPoints : word; var PolyPoints);

Рисует многоугольник (ломаную) текущим цветом и типом линии. Ломаная задается числом вершин в параметре NumPoints и координатами вершин в массиве PolyPoints. Элементами массива являются записи типа PointType.
procedure FillPoly(NumPoints : word; var PolyPoints);

Рисует и заполняет многоугольник текущим типом закраски. Задание вершин аналогично DrawPoly.

procedure GetFillSettings (var FillInfo: FillSettingsType);

Позволяет запросить текущий шаблон и цвет, установленные SetFillStyle или SetFillPattern.
procedure GetFillPattern(var FillPattern: FillPatternType);

Возвращает шаблон заполнения, установленный последним вызовом SetFillPattern. Если ранее в программе нет обращений к SetFillPattern, то будет возвращен массив, состоящий из $FF.
procedure SetFillStyle(Pattern : word; Color : word);

Устанавливает шаблон и цвет заполнения, где Pattern - один из стандартных шаблонов, Color - цвет.
procedure SetFillPattern(Pattern : FillPatternType; Color : word);

Устанавливает шаблон заполнения, определенный пользователем.

procedure FloodFill(X, Y : integer; Border : word);

Заполняет ограниченную область, используя текущий шаблон и цвет заполнения. Закрашивается область, внутри которой находится точка с координатами (X,Y). Border - цвет границы области.

Дуги, окружности и другие кривые


procedure Arc(X, Y : integer; StAngle, EndAngle, Radius: word);

Рисует дугу с радиусом Radius от начального угла StAngle к конечному EndAngle, используя (X,Y) как центр. Углы измеряются в градусах против часовой стрелки. Используется текущий цвет и стиль линий.

procedure GetArcCoords(var ArcCoords : ArcCoordsType);

Получает координаты последней выведенной дуги процедурой Arc.

procedure Circle(X, Y : integer; Radius : word);

Рисует окружность с центром в точке (X,Y) и радиусом Radius.

procedure Ellipse(X, Y : integer; StAngle, EndAngle : word;
XRadius, YRadius : word);


Рисует эллиптическую дугу с центром в точке (X,Y) от начального угла StAngle к конечному EndAngle с радиусами XRAdius и YRadius (горизонтальные и вертикальные оси).

procedure FillEllipse(X, Y : integer; XRadius, YRadius: word);

Рисует и заполняет эллипс с полуосями XRadius и YRadius, используя (X,Y) как центр.

procedure GetAspectRatio(var Xasp, Yasp : word);

Возвращает два числа XAsp и YAsp, которые указывают как одинаковые по количеству пикселов длины сторон X и Y относятся друг к другу. Это позволяет вычислить относительный аспект разрешения экрана XAsp / YAsp. Используется при выводе правильных квадратов и окружностей.

procedure SetAspectRatio(Xasp, Yasp : word);

Изменяет значение относительного аспекта.

procedure PieSlice(X, Y : integer; StAngle, EndAngle, Radius : word);

Рисует и заполняет сектор круга с центром в точке (X,Y, радиусом Radius от начального угла StAngle к конечному EndAngle.

procedure Sector(X, Y : Integer; StAngle, EndAngle, XRadius, YRadius : word);

Рисует и заполняет сектор эллипса с центром в точке (X,Y), полуосями XRadius и YRadius от начального угла StAngle к конечному EndAngle.
 

Цвет и палитра


procedure SetBkColor(Color : word);

Устанавливает цвет фона.

procedure SetColor(Color : word);

Устанавливает основной цвет, которым будет осуществляться рисование.

function GetBkColor : word;

Возвращает текущий фоновый цвет.

function GetColor : word;

Возвращает текущий основной цвет.

procedure SetAllPalette(var Palette);

Устанавливает все цвета палитры. Переменная Palette должна быть типа PaletteType.
procedure SetPalette(ColorNum : word; Color : shortint;

Изменяет один цвет палитры, указанный через ColorNum и Color.
procedure GetPalette(var Palette : PaletteType);

Возвращает текущую палитру в переменной Palette.

function GetPaletteSize : integer;

Возвращает размер таблицы палитры.

procedure GetDefaultPalette(var Palette : PaletteType);

Возвращает аппаратную палитру в записи PaletteTyp. function  GetMaxColor : word;
Возвращает максимальный цвет, который можно задать в SetColor.
procedure SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue : integer);

Позволяет модифицировать один из цветов палитры для IBM 8514 и VGA по насыщенности красного, зеленого и голубого цветов.
 

Сохранение и выдача изображений


function ImageSize(x1, y1, x2, y2 : integer) : word;

Возвращает число байт, требуемое для сохранения прямоугольной области экрана.

procedure GetImage(x1, y1, x2, y2 : integer; var BitMap);

Сохраняет битовый образ указанной прямоугольной части экрана в буфере BitMap.

procedure PutImage(X, Y : integer; var BitMap; BitBlt : word);

Выводит битовый образ BitMap на экран в виде прямоугольника с координатами верхнего левого угла в точке (X,Y). BitBlt - вид наложения образа (и, или, ислючающее или и т.д. - см. таблицу битовых операторов выше).
 

Работа со строками


procedure GetTextSettings(var TextInfo : TextSettingsType);

Возвращает текущий шрифт, направление, размер и выравнивание текста, установленные SetTextStyle и SetTextJustify.

procedure OutText(TextString : string);

Выводит текст на экран, начиная от текущего указателя (CP), используя текущий цвет, шрифт и выравнивание.

procedure OutTextXY(X, Y : integer; TextString : string);

Выводит текст на экран, начиная от точки (X,Y).

procedure SetTextJustify(Horiz, Vert : word);

Устанавливает горизонтальное и вертикальное выравнивание текста, используемое OutText и OutTextXY.
procedure SetTextStyle(Font, Direction : word; CharSize : word);

Устанавливает текущий шрифт Font, направление Direction (горизонтальное или вертикальное) и размер CharSize текста (от 0 до 30).

procedure SetUserCharSize(MultX, DivX, MultY, DivY : word);

Позволяет изменить ширину и высоту символа для штрихового (векторного) шрифта (Gothic, SanSerif, Small, Triplex).
function TextHeight(TextString : string) : word;

Возвращает высоту строки в пикселах, если она будет выводиться текущим шрифтом.

function TextWidth(TextString : string) : word;

Возвращает ширину строки в пикселах.
 

ОТЛИЧИЯ ГРАФИКИ ТУРБО-ПАСКАЛЯ и ТУРБО-СИ


Турбо-Паскаль не различает отличий в регистрах (маленькие или большие буквы) при написании констант, типов, процедур и функций модуля Graph.

В Турбо-Си все константы, типы, переменные должны быть в верхнем регистре (заглавными буквами), а названия процедур и функций - в нижнем (прописными буквами).

Содержание библиотек графики при этом абсолютно одинаково.


НЕДОСТАТКИ BGI-ГРАФИКИ


Несмотря на обширные возможности для деловой графики, графические средства с точки зрения профессионального разработчика оставляют желать лучшего. Нельзя работать с произвольными спрайтами, нет скроллинга экрана, сохранения / вывода всего изображения, масштабирования картинки, функции заполнения и работы с битовыми образами работают медленно, невозможно использование файлов других графических форматов, отсутствуют трехмерные изображения и т.д.

Все это делает затруднительным написание графических редакторов, игрушек, систем инженерной и математической графики.
Для реализации вышеуказанных возможностей необходимо напрямую управлять графическим адаптером, используя прямой доступ в видеопамять и служебные функции BIOS.



Copyright © 2007 Cредняя школа №2 им. Н.П. Массонова г.Свислочь © Ярута Анжелина, Алла Синица