понедельник, 22 апреля 2013 г.

Практикум

Задания для самостоятельного решения (на выбор)

Задание 1 "Определи цвет". Напишите программу, которая создает на экране разноцветную картинку (используются несколько стандартных цветов). Затем щелчок мыши по экрану выдает название цвета, на который попадет мышь.
Например, рисуем светофор. Наводим мышь, щелкаем по цвету и на свободном поле (напротив цвета) появляется надпись  - "Красный цвета, прохода нет" и т. д.
Задание 2 "Назови фигуру". Напишите программу, которая рисует на экране несколько геометрических фигур (квадрат, круг, треугольник, пятиугольник и т. д.) и заливает их разным цветом (стандартным, код которого известен). Затем по щелчку мыши на фигуре выдает название этой фигуры.
Задание 3 "Найди цвет". Напишите программу, которая задает несколько квадратов известного расположения и цвета. Затем предлагается щелкнуть по квадрату указанного цвета. Если щелчок происходит в нужной области, по выводится - "Молодец, верно!", иначе предлагается повторить попытку (до тех пор пока не будет найден верный цвет).

вторник, 16 апреля 2013 г.

Модуль Events (продолжение)

1. Событие нажатие на клавиши

Пример программы, осуществляющая движение графического окна с помощью клавиатуры.
uses GraphABC,Events;
procedure KeyDown(Key: integer); 
begin
  case Key of 
VK_Left: SetWindowLeft(WindowLeft-2); 
VK_Right: SetWindowLeft(WindowLeft+2); 
VK_Up: SetWindowTop(WindowTop-2); 
VK_Down: SetWindowTop(WindowTop+2); 
  end; 
end; 

begin
SetWindowCaption('Двигайте окно стрелками');  
  OnKeyDown:=KeyDown; 
end.
Задание 1. Увеличьте шаг движения окна с помощью клавиатуры.
Задание 2. Измените программу таким образом, чтобы при нажатии на курсор влево окно двигалось по диагонали влево и вниз, при нажатии курсора вправо - вправо и вверх.

2. Событие изменение размеров графического окна

Пример программы, меняющей форму и размеры эллипса в зависимости от изменения размеров окна.

uses GraphABC,Events;

procedure Resize;
begin
  FillRect(0,0,WindowWidth,WindowHeight);
  Ellipse(0,0,WindowWidth,WindowHeight);
end;

begin
  OnResize:=Resize;
  Resize;
end. 
Задание 4. Измените в программе эллипс на ромб, вершины которого лежат на середине сторон окна.


понедельник, 8 апреля 2013 г.

Модуль Events

1. Обзор 

Модуль Events предназначен для создания программ, управляемых событиями. Он работает только в паре с модулем GraphABC. При одновременном подключении модулей GraphABC и Events программа после запуска и выполнения своего основного блока begin/end не завершается, а продолжает выполняться, отслеживая возникающие события. После закрытия графического окна программа завершается.
Каждому событию соответствует своя процедурная переменная:
  • нажатие мыши OnMouseDown 
  • отпускание мыши OnMouseUp 
  • перемещение мыши OnMouseMove  
  • нажатие клавиши OnKeyDown  
  • отпускание клавиши OnKeyUp  
  • нажатие символьной клавиши OnKeyPress  
  • изменение размеров графического окна OnResize  
  • закрытие графического окна OnClose 
До начала работы программы эти переменные имеют нулевые значения. Чтобы при возникновении некоторого события выполнить определенное действие, необходимо в программе присвоить процедурной переменной конкретную процедуру, выступающую в роли обработчика события. При возникновении одного из перечисленных выше событий проверяется, содержит ли соответствующая процедурная переменная ссылку на процедуру-обработчик, и если да, то данная процедура-обработчик вызывается.

Переменные, соответствующие событиям, описаны в модуле Events следующим образом:
var
 OnMouseDown, OnMouseUp, OnMouseMove: procedure (x,y,mousebutton: integer);
 OnKeyDown, OnKeyUp: procedure (key: integer);
 OnKeyPress: procedure (ch: char);
 OnResize, OnClose: procedure;

Параметры x и y в обработчиках OnMouseDown, OnMouseUp и OnMouseMove определяют координаты курсора мыши в момент наступления события, параметр mousebutton равен 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши. Параметр key в обработчиках OnKeyDownи OnKeyUp определяет виртуальный код нажатой клавиши. Параметр ch в обработчике OnKeyPress определяет нажатый символ. Если переменная-событие OnKeyPress имеет обработчик, то графическое окно не закрывается по нажатию клавиши Esc.

2. События с мышью

Пример программы, в которой каждый раз при щелчке мыши по графическому окну в окно вывода будет выводиться "Щелчок мыши!"
uses GraphABC, Events;
     procedure MouseDown(x,y,mb: integer);
        begin
        write('Щелчок мыши!');
        end;
begin
OnMouseDown:=MouseDown;
end.
Задание 1. Измените эту программу таким образом, чтобы вывод данного текста происходил в графическое окно с задержкой на экране и последующим очищением окна.
Указание: для вывода текста в  графическое окно используйте процедуру TextOut, для задержки sleep, для очистки окна ClearWindow.

Задание 2. Доработайте программу таком образом, чтобы текст выводился в точку, где произошел щелчок мыши.

Задание 3. Напишите программу, которая оставляет в точке, где происходит щелчок мыши, штамп (штамп - это некоторое графическое изображение, размер его не меняется).

Пример программы, рисование мышью.

uses GraphABC, Events;

procedure MouseDown(x,y,mb: integer);

begin
  MoveTo(x,y);
end;

procedure MouseMove(x,y,mb: integer);

begin
  SetWindowCaption('('+IntToStr(x)+','+IntToStr(y)+')');
  if mb=1 then LineTo(x,y);
end;

begin

  OnMouseDown:=MouseDown;
  OnMouseMove:=MouseMove
end.

Задание 4. Измените цвет и толщину пера (цвет- красный, толщина - 10 пиксел).

Задание 5. Изменение цвета должно происходить каждый раз после отпускания мыши (цвет - случайный).


3. События с окном


Пример программы, демонстрирующей обработку события OnClose (закрытие окна).

uses GraphABC,Events;
     procedure CloseWin;
     var i: integer;
     begin
     for i:=1 to 20 do
     begin TextOut(10,20*i,'Не хочу закрываться!');
     Sleep(100); end;
     end;
begin
OnClose:=CloseWin;
end.
Задание 6. Измените программу таким образом, чтобы при закрытии окна трижды менялся его цвет (случайным образом).


понедельник, 1 апреля 2013 г.

Шрифт

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

TextOut(x,y,s) - выводит строку s в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s);
SetFontColor(color) - цвет шрифта;
SetFontSize(sz) - размер шрифта в пунктах;
SetFontName(name) - наименование шрифта (наиболее популярные Times, Arial и Courier New);
SetFontStyle(fs) - стиль шрифта.

Стили шрифта:
fsNormal – обычный;
fsBold – жирный;
fsItalic – наклонный;
fsBoldItalic – жирный наклонный;
fsUnderline – подчеркнутый;
fsBoldUnderline – жирный подчеркнутый;
fsItalicUnderline – наклонный подчеркнутый;
fsBoldItalicUnderline – жирный наклонный подчеркнутый.

Пример программы, выводящей слово 'Привет!" в окно, начиная с точки (10,10) с заданным цветом, размером и стилем.


Uses GraphABC;
begin
SetFontColor(clRed);
SetFontSize(48);
SetFontStyle(fsBold);
TextOut(10,10,'Привет!')
end.

Задание 1. Измените положение текста, его размер, цвет и стиль.
Задание 2. Напишите программу, выводящую следующий текст:

Для вывода используйте цикл! Цвет текста задается случайным образом.

2. Дополнительно о шрифте

tw:=TextWidth(s) - возвращает ширину строки s в пикселях при текущих настройках шрифта;
th:=TextHeight(s)возвращает высоту строки s в пикселях при текущих настройках шрифта.

Пример программы, выводящей текст по центру окна. Обратите внимание на процедуры SetWindowCaption и CenterWindow.
uses GraphABC;
var
  s: string;
  tw,th: integer;
begin
  SetWindowCaption('Текст по центру');//задает заголовок окна
  s:='Width & Height';
  SetWindowSize(700,300);
  CenterWindow;//Центрирует графическое окно по центру экрана
  SetFontName('Times'); SetFontSize(50);
  tw:=TextWidth(s); th:=TextHeight(s);
  TextOut(WindowWidth div 2 - tw div 2,WindowHeight div 2 - th div 2,s);
end.

Задание 3. Измените программу таким образом, чтобы текст вписывался в верхнюю четверть окна (точно по центру). Возможно надо будет изменить и размер шрифта.
Задание 4. Напишите программу, выводящую 4 строки в центр каждой из четырех четвертей окна (см. картинку).