Введение

Линейные алгоритмы

Алгоритмы с ветвлением

Алгоритмы с повторением

Одномерный массив (вектор)

Двумерный массив (матрица)

Пользовательские процедуры и функции

Строки

Множества

Записи

Файлы

Графика
маркированный список

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

маркированный список

задачи,  решения, программы

На главную
            

Графика

procedure SetPixel(x,y,color: integer);

Закрашивает один пиксел с координатами (x,y) цветом color.

function GetPixel(x,y): integer;

Возвращает текущее значение цвета для пиксела с координатами (x,y).

procedure MoveTo(x,y: integer);

Передвигает невидимое перо к точке с координатами (x,y); эта функция работает в паре с функцией LineTo(x,y).

procedure LineTo(x,y: integer);

Рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y).

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

Рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2).

procedure Circle(x,y,r: integer);

Рисует окружность с центром в точке (x,y) и радиусом r.

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

Рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2).

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

Рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).

procedure RoundRect(x1,y1,x2,y2,w,h: integer);

Рисует прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев.

procedure Arc(x,y,r,a1,a2: integer);

Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).

procedure Pie(x,y,r,a1,a2: integer);

Рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc).

procedure Chord(x,y,r,a1,a2: integer);

Рисует фигуру, ограниченную дугой окружности и отрезком, соединяющим ее концы (параметры процедуры имеют тот же смысл, что и в процедуре Arc).

procedure TextOut(x,y: integer; s: string);

Выводит строку s в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s).

procedure FloodFill(x,y,color: integer);

Заливает область одного цвета цветом color, начиная с точки (x,y).

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

Заливает прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2), цветом текущей кисти.

procedure Polygon(var a; n: integer);

Строит ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.

procedure Polyline(var a; n: integer);

Строит замкнутую ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.

Модуль GraphABC содержит константы и функции для работы с цветами. Тип ColorType, описывающий цвет, определен следующим образом:

type ColorType=integer;

Стандартные цвета задаются символическими константами:

clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed
– красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue
– синий
clSkyBlue – голубой
clYellow – желтый
clCream
– кремовый

  

clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clMoneyGreen – цвет зеленых денег
clLtGray – светло-серый
clDkGray – темно-серый
clMedGray – серый
clSilver
– серебряный

Для работы с цветами используются следующие функции.

function RGB(r,g,b: integer): ColorType;

Возвращает целое значение, являющееся кодом цвета, который содержит красную, зеленую и синюю составляющие с интенсивностями r, g и b соответственно (r, g и b – целые в диапазоне от 0 до 255, причем, 0 соответствует минимальной интенсивности, 255 – максимальной).

function GetRed(color: ColorType): integer;

Выделяет красную составляющую из цвета color (целое в диапазоне от 0 до 255);

function GetGreen(color: ColorType): integer;

Выделяет зеленую составляющую из цвета color (целое в диапазоне от 0 до 255);

function GetBlue(color: ColorType): integer;

Выделяет синюю составляющую из цвета color (целое в диапазоне от 0 до 255).

Действия с пером


function PenX: integer;
function
PenY: integer;

Возвращают текущие координаты пера.

procedure SetPenColor(color: integer);

Устанавливает цвет пера, задаваемый параметром color.

function PenColor: integer;

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

procedure SetPenWidth(w: integer);

Устанавливает ширину пера, равную w пикселам.

function PenWidth: integer;

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

procedure SetPenStyle(ps: integer);

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

function PenStyle: integer;

Возвращает текущий стиль пера.

procedure SetPenMode(m: integer);

Устанавливает режим пера, задаваемый параметром m.

function PenMode: integer;

Возвращает текущий режим пера. Режим пера определяет, как цвет пера взаимодействует с цветом поверхности.

Режимы пера задаются следующими именованными константами:

pmCopy – обычный режим; при рисовании цвет поверхности заменяется цветом пера;

pmNot – режим инвертирования; при рисовании цвет поверхности инвертируется (становится негативным), а цвет пера при этом игнорируется.

Действия с кистью


procedure SetBrushColor(color: integer);

Устанавливает цвет кисти, задаваемый параметром color.

function BrushColor: integer;

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

procedure SetBrushPicture(fname: string);

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

procedure ClearBrushPicture;

Очищает рисунок-образец, выбранный для кисти.

procedure SetBrushStyle(bs: integer);

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

function BrushStyle: integer;

Возвращает текущий стиль кисти.

Действия со шрифтом


procedure SetFontColor(color: integer);

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

function FontColor: integer;

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

procedure SetFontSize(sz: integer);

Устанавливает  размер шрифта в пунктах.

function FontSize: integer;

Возвращает  текущий размер шрифта в пунктах.

procedure SetFontName(name: string);

Устанавливает  наименование шрифта.

function FontName: string;

Возвращает  текущее наименование шрифта.

По умолчанию установлен шрифт, имеющий наименование MS Sans Serif.
Наиболее распространенные шрифты – это Times, Arial и Courier New.
Наименование шрифта можно набирать без учета регистра.

procedure SetFontStyle(fs: integer);

Устанавливает  стиль шрифта.

function FontStyle: integer;

Возвращает  текущий стиль шрифта.

Стили шрифта задаются следующими именованными константами:

fsNormal – обычный;

fsBold – жирный;

fsItalic – наклонный;

fsBoldItalic – жирный наклонный;

fsUnderline – подчеркнутый;

fsBoldUnderline – жирный подчеркнутый;

fsItalicUnderline – наклонный подчеркнутый;

fsBoldItalicUnderline – жирный наклонный подчеркнутый.

function TextWidth(s: string): integer;

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

function TextHeight(s: string): integer;

Возвращает высоту строки s в пикселях при текущих настройках шрифта.

Действия с рисунками


Работа с рисунками в модуле GraphABC производится либо с помощью описателей (целых чисел, однозначно определяющих рисунок), либо с помощью объектов класса Picture. Работа с помощью описателей позволяет манипулировать рисунками, используя обычные поцедуры и функции и не используя классы.

Каждый рисунок, хранящийся во время работы программы в оперативной памяти, имеет описатель (дескриптор), представляющий собой целое число. Это число возвращается функцией загрузки рисунка из файла LoadPicture, а также функцией создания рисунка CreatePicture, после чего передается в качестве первого параметра во все остальные процедуры и функции работы с рисунками.

function LoadPicture(fname: string): integer;

n:=LoadPicture(fname) – загружает рисунок из файла с именем fname в оперативную память и возвращает описатель рисунка в целую переменную n; если файл не найден, то возникает ошибка времени выполнения. Загружать можно рисунки в формате .bmp, .jpg или .gif.

procedure SavePicture(n: integer; fname: string);

Сохраняет рисунок с описателем n в файл с именем fname. Рисунки можно сохранять в формате .bmp, .jpg или .gif.

procedure DrawPicture(n,x,y: integer);

Выводит рисунок с описателем n в позицию (x,y) графического окна.

procedure DrawPicture(n,x,y,w,h: integer);

Выводит рисунок с описателем n в позицию (x,y) графического окна, масштабируя его размеры к ширине w и высоте h. Если w<0, то рисунок зеркально отражается относительно вертикальной прямой, проходящей через x, если же h<0, то рисунок зеркально отражается относительно горизонтальной прямой, проходящей через y.

procedure DrawPicture(n: integer; x,y: integer; r: Rect);

Выводит часть рисунка с описателем n, заключенную в прямоугольнике r, в позицию (x,y) графического окна.

procedure DrawPicture(n: integer; x,y,w,h: integer; r: Rect);

Выводит часть рисунка с описателем n, заключенную в прямоугольнике r, в позицию (x,y) графического окна, масштабируя его размеры к ширине w и высоте h. Если w<0, то рисунок зеркально отражается относительно вертикальной прямой, проходящей через x, если же h<0, то рисунок зеркально отражается относительно горизонтальной прямой, проходящей через y.

procedure CopyRect(n: integer; dest: Rect; n1: integer; src: Rect);

Копирует часть рисунка с описателем n1, заключенную в прямоугольнике src, в прямоугольник dest рисунка с описателем n.

procedure DestroyPicture(n: integer);

Удаляет рисунок с описателем n из оперативной памяти, описатель рисунка при этом становится недействительным.

procedure SetPictureSize(n,w,h: integer);

Устанавливает размер рисунка с описателем n равным w на h пикселей.

function PictureWidth(n: integer): integer;

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

function PictureHeight(n: integer): integer;

Возвращает высоту рисунка с описателем n.

function PictureTransparent(n: integer): boolean;

Возвращает режим прозрачности рисунка с описателем n.

function CreatePicture(w,h: integer): integer;

Создает рисунок ширины w и высоты h и возвращает его описатель.

function CreatePictureFromRect(r: Rect): integer;

Создает рисунок из прямоугольника r графического окна и возвращает его описатель.

function CreatePictureFromScreenBufferRect(r: Rect): integer;

Создает рисунок из прямоугольника r внеэкранного буфера графического окна и возвращает его описатель.

procedure SetPictureTransparent(n: integer; b: boolean);

Устанавливает (b=True) или отключает (b=False) режим прозрачности при рисовании рисунка с описателем n. Если b=True, то при его рисовании фон не отображается. Фоновым считается цвет левого нижнего пиксела рисунка.

function ImageIntersect(n1,n2: integer): boolean;

Определяет, пересекаются ли изображения на рисунках с описателями n1 и n2. Рисунки должны иметь одинаковый размер. Белый цвет на рисунке считается прозрачным. Изображения на рисунках считаются пересекающимися, если имеется хотя бы один пиксел, который не прозрачен и имеет одни и те же координаты для обоих рисунков.

function StandardImageFolder: string;

Возвращает стандартный каталог для картинок (обычно \Media\Images\).

procedure FlipPictureHorizontal(n);

Зеркально отображает картинку с описателем n относительно горизонтальной оси симметрии.

procedure FlipPictureVertical(n);

Зеркально отображает картинку с описателем n относительно вертикальной оси симметрии.

Действия с графическим окном


procedure ClearWindow;

Очищает графическое окно белым цветом.

procedure ClearWindow(c: ColorType);

Очищает графическое окно цветом c.

function WindowWidth: integer;

Возвращает ширину графического окна.

function WindowHeight: integer;

Возвращает высоту графического окна.

function WindowLeft: integer;

Возвращает отступ графического окна от левого края экрана.

function WindowTop: integer;

Возвращает отступ графического окна от верхнего края экрана.

function WindowCaption: string;

Возвращает заголовок графического окна.

procedure SetWindowWidth(w: integer);

Устанавливает ширину графического окна.

procedure SetWindowHeight(h: integer);

Устанавливает высоту графического окна.

procedure SetWindowLeft(l: integer);

Устанавливает отступ графического окна от левого края экрана.

procedure SetWindowTop(t: integer);

Устанавливает отступ графического окна от верхнего края экрана.

procedure SetWindowSize(w,h: integer);

Устанавливает ширину и высоту графического окна.

procedure SetWindowPos(l,t: integer);

Устанавливает отступ графического окна от левого и верхнего края экрана.

procedure SetWindowCaption(s: string);

Устанавливает заголовок графического окна.

procedure SetWindowTitle(s: string);

Устанавливает заголовок графического окна. Синоним SetWindowCaption.

procedure SaveWindow(fname: string);

Сохраняет содержимое графического окна в файл с именем fname.

procedure LoadWindow(fname: string);

Выводит в графическое окно рисунок из файла с именем fname. Файл ищется вначале в текущем каталоге, а затем в каталоге PascalABC\Media\Images.

procedure FillWindow(fname: string);

Заполняет графическое окно мозаикой из рисунка, содержащегося в файле с именем fname.

procedure FillWindow(n: integer);

Заполняет графическое окно мозаикой из рисунка с описателем n.

procedure CloseWindow;

Закрывает графическое окно.

function ScreenWidth: integer;

Возвращает ширину экрана.

function ScreenHeight: integer;

Возвращает высоту экрана.

procedure CenterWindow;

Центрирует графическое окно по центру экрана.

procedure MaximizeWindow;

Максимизирует графическое окно на экране.

procedure NormalizeWindow;

Восстанавливает положение графического окна на экране.

Все размеры устанавливаются и возвращаются в пикселах.

Задание режимов вывода


procedure SetDrawingSurface(n: integer);

Устанавливает в качестве канвы для рисования рисунок с описателем n. В результате весь графический вывод осуществляется не на экран, а на рисунок; настройки кисти, пера и шрифта также осуществляются для рисунка.

procedure SetDrawingSurface(p: Picture);

Устанавливает в качестве канвы для рисования рисунок с описателем n. В результате весь графический вывод осуществляется не на экран, а на рисунок; настройки кисти, пера и шрифта также осуществляются для рисунка.

procedure RestoreDrawingSurface;

Устанавливает в качестве канвы для рисования графическое окно.

procedure Redraw;

Осуществляет перерисовку окна вывода при заблокированном выводе в графическое окно.

procedure LockDrawing;

Блокирует вывод в графическое окно, осуществляя рисование только во внеэкранном буфере. Для перерисовки графического окна требуется вызвать процедуру Redraw. Если графический вывод перенаправлен в рисунок вызовом процедуры SetDrawingSurface, то не оказывает никакого воздействия на вывод.

procedure UnlockDrawing;

Снимает блокировку вывода в графическое окно.

procedure LockScreenBuffer;

.Блокирует вывод во внеэкранный буфер графического окна. После вызова этой процедуры рисование незначительно ускоряется, однако, изображение графического окна перестает восстанавливаться.

procedure UnlockScreenBuffer;

Снимает блокировку вывода во внеэкранный буфер графического окна.

function DrawingIsLocked: boolean;

Возвращает True, если вывод в графическое окно заблокирован, и False в противном случае.

procedure SetRedrawProc(procedure RedrawProc);

Устанавливает пользовательскую процедуру для перерисовки содержимого графического окна, вызываемую автоматически в тот момент, когда требуется его перерисовка. В настоящее время используется в модуле ABCObjects для автоматической перерисовки всех графических объектов и фона.

Блокировка вывода в графическое окно с последующим вызовом Redraw используется для простейшего создания анимации без мерцания.

Класс Picture


Для работы с рисунками в модуле GraphABC используются либо описатели, либо объекты класса Picture.

Класс Picture описывает рисунок, хранящийся в оперативной памяти, и имеет следующий интерфейс:

type
  Picture=class
    constructor Create(w,h: integer);
    constructor Create(fname: string);
    constructor CreateFromRect(r: Rect);
    constructor CreateFromScreenBufferRect(r: Rect);
    destructor Destroy;
    procedure Load(fname: string);
    procedure Save(fname: string);
    procedure SetSize(w,h: integer);
    property Width: integer;
    property Height: integer;
    property Transparent: boolean;
    property NeedDestroy: boolean;
    function Handle: integer;
    function Intersect(p: Picture): boolean;
    procedure Draw(x,y: integer);
    procedure Draw(x,y,w,h: integer);
    procedure Draw(x,y: integer; r: Rect);
    procedure Draw(x,y,w,h: integer; r: Rect);
    procedure CopyRect(dst: Rect; p: Picture; src: Rect);
    procedure FlipHorizontal;
    procedure FlipVertical;
  end;

Конструкторы и деструкторы

constructor Create(w,h: integer);

Создает объект класса Picture ширины w и высоты h. Рисунок может быть скопирован в него из прямоугольной области другого рисунка методом CopyRect. На рисунке может быть также произведено рисование вызовом любых процедур рисования после установки его в качестве поверхности рисования (метод SetDrawingSurface).

constructor Create(fname: string);

Создает объект класса Picture и загружает в него рисунок из файла fname (допустимые форматы файлов: .bmp, .gif, .jpg, .png). Рисунок с именем fname ищется вначале в текущем каталоге, а затем в подкаталоге Media\Images\ каталога программы PascalABC.exe.

constructor CreateFromRect(r: Rect);

Создает объект класса Picture и копирует в него изображение из прямоугольника r на экране. Размер рисунка равен размеру прямоугольника.

constructor CreateFromScreenBufferRect(r: Rect);

Создает объект класса Picture и копирует в него изображение из прямоугольника r внеэкранного буфера. Размер рисунка равен размеру прямоугольника.

destructor Destroy;

Разрушает объект. Если NeedDestroy установлено в True, то рисунок, находящийся в объекте Picture, также разрушается.
 

Свойства

property Width: integer;

Ширина рисунка.

property Height: integer;

Высота рисунка.

property Transparent: boolean;

Прозрачность рисунка. Если Transparent=True, то при выводе рисунка его фон не отображается. Фоновым считается цвет левого нижнего пиксела рисунка.

property NeedDestroy: boolean;

Определяет, должен ли рисунок разрушаться при вызове деструктора и метода Load. NeedDestroy обычно устанавливается в False, если несколько объектов класса Picture разделяют один рисунок.
 

Методы

procedure Load(fname: string);

Загружает рисунок из файла с именем fname. Если NeedDestroy установлено в True, то рисунок, находившийся ранее в объекте Picture, разрушается. Рисунок с именем fname ищется вначале в текущем каталоге, а затем в подкаталоге Media\Images\ каталога программы PascalABC.exe.

procedure Save(fname: string);

Сохраняет рисунок в файле с именем fname. Формат рисунка устанавливается расширением имени файла. Допустимые расширения: .bmp, .gif, .jpg, .png.

function Handle: integer;

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

procedure Draw(x,y: integer);

Выводит рисунок в позицию (x,y) графического окна.

procedure Draw(x,y,w,h: integer);

Выводит рисунок в позицию (x,y) графического окна, масштабируя его к размеру (w,h). Если w<0 или h<0, то выводится зеркальное отражение рисунка относительно вертикалоной или горизонтальной оси соответственно.

procedure Draw(x,y: integer; r: Rect);

Выводит часть рисунка, заключенную в прямоугольнике r, в позицию (x,y) графического окна.

procedure Draw(x,y,w,h: integer; src: Rect);

Выводит часть рисунка, заключенную в прямоугольнике r, в позицию (x,y) графического окна, масштабируя ее к размеру (w,h).

procedure CopyRect(dest: Rect; p: Picture; src: Rect);

Копирует в прямоугольник dest текущего рисунка часть рисунка p, заключенную в прямоугольнике src.

procedure FlipHorizontal;

Зеркально отображает картинку относительно горизонтальной оси симметрии.

procedure FlipVertical;

Зеркально отображает картинку относительно вертикальной оси симметрии.

Описатели рисунков и класс Picture


Рисунки удобно рассматривать как объекты класса Picture, в котором собраны все основные действия с рисунками. Такой подход является более удобным и современным, чем подход с описателями рисунков. Единственный его недостаток - необходимость вводить основные понятия, связанные с классами, при обучении использованию рисунков. Подход с описателями позволяет работать с рисунками сразу после рассмотрения темы "Процедуры и функции" или даже раньше, если подпрограммы рассматривать просто как команды.

Тем не менее, автор программы настоятельно рекомендует использовать именно класс Picture при работе с рисунками, что позволит ученику раньше начать осваивать основные понятия объектно-ориентированного программирования.

Класс Picture полностью написан на Pascal ABC и содержит в своем интерфейсе все подпрограммы работы с рисунками.

Пример работы с рисунком с использованием описателей.

uses GraphABC;
var n: integer;
begin
  n:=LoadPicture('demo.bmp');
  SetPictureTransparent(n,True);
  DrawPicture(n,0,0);
  DestroyPicture(n);
end.

Эквивалентный пример работы с рисунком как объектом класса Picture выглядит более естественным:

uses GraphABC;
var p: Picture;
begin
  p:=Picture.Create('demo.bmp');
  p.Transparent:=True;
  p.Draw(0,0);
  p.Destroy;
end.

 

Сайт создан в системе uCoz