
- •Занятие 1. Введение Почему именно Delphi?
- •Что мы видим на экране
- •Контрольные вопросы:
- •Занятие 2. Мое первое приложение в Delphi Вывести текст в окне
- •Задания для самостоятельной работы
- •Кнопки. Какие они бывают и зачем они?
- •Задания для самостоятельной работы
- •Поле редактирования
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Занятие 3. Введение в язык программирования Pascal
- •Понятие алгоритма
- •Структура процедуры
- •Правила задания имен языка Pascal
- •Задания для самостоятельной работы
- •Тип данных
- •Числовой тип данных. Целые числа
- •Числовой тип данных. Вещественные числа
- •Описание данных
- •Задания для самостоятельной работы
- •Операции
- •Присвоение значения переменной. Оператор присваивания
- •Задания для самостоятельной работы
- •Задача «Простой калькулятор»
- •Встроенные функции
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Занятие 4. Разветвляющийся алгоритм
- •Логический тип данных
- •Описание данных логического типа
- •Логические выражения
- •Разветвляющийся алгоритм
- •Оператор if
- •Оператор выбора case
- •Задания для самостоятельной работы
- •Списки. Компоненты ListBox и ComboBox
- •Зависимые переключатели. Компоненты RadioButton, RadioGroup
- •Задание для самостоятельной работы
- •Добавление формы к проекту
- •Структура модуля Pascal
- •Как открыть форму
- •Задание для самостоятельной работы
- •Способность форм ссылаться друг на друга
- •Задание для самостоятельной работы
- •Просмотр форм и ассоциированных с ними модулей
- •Основные свойства, методы и события формы
- •Менеджер проектов
- •Опции пpоекта
- •Упpавление пpоектами
- •Компиляция и сборка проекта
- •Выполнение и отладка проекта
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Занятие 6. Начинаем рисовать
- •Рисование линий
- •Задание цвета
- •Рисование фигур
- •Свойства класса tBrush
- •Вывод текста
- •События формы OnPaint и OnResize
- •Задания для самостоятельной работы
- •Занятие 7. Циклы
- •Цикл со счетчиком: for
- •Цикл с предусловием: while
- •Цикл с постусловием: repeat..Until
- •Использование операторов Continue и Break в циклах
- •Задание случайных чисел. Функция Random. Процедура Randomize
- •Вложенные циклы
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Занятие 8. Массивы
- •Одномерные массивы
- •Двумерные массивы
- •Компонент tStringGrid
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Занятие 9. Строки и символы
- •Символьный тип данных
- •Строковый тип данных
- •Сравнение текстовой информации
- •Функции для работы с текстовой информацией
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Занятие 10. Работа с изображениями
- •Редактор Image Editor
- •Как отобразить рисунок в форме
- •Компонент Timer
- •Как заставить картинку двигаться
- •Случайное движение
- •Задание для самостоятельной работы.
- •Движение по закону
- •Задание для самостоятельной работы
- •Управляемое движение
- •Задание для самостоятельной работы
- •Как совместить разные виды движения
- •Задание для самостоятельной работы
- •Использование мыши
- •Занятие 11. Процедуры и функции
- •Описание и вызов процедуры
- •Описание и вызов функции
- •Где описывать процедуры(функции)
- •Передача параметров по ссылке и по значению
- •Контрольные вопросы
- •Задание для самостоятельной работы
- •Занятие12. Еще про компоненты Еще раз про списки
- •Функция MessageDlg
- •Задание для самостоятельной работы
- •Главное меню приложения. Компонент MainManu
- •Задание для самостоятельной работы
- •Кнопочная панель. Компонент ToolBar
- •Область редактирования. Компонент Memo
- •Контекстное меню. Компонент PopupMenu
- •Диалоговые окна Windows
- •Задание для самостоятельной работы
- •Занятие 13. Объектно-ориентированный подход (ооп) в программировании Основные понятия ооп
- •Основные принципы ооп
- •Тип данных запись (структура)
- •Задание для самостоятельной работы
- •Классы и объекты в Delphi
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Занятие 14. Работа с файлами
- •Общая технология работы с файлами в Delphi
- •Стандартный подход к работе с файлами
- •Описание файловой переменной
- •Открытие файлов
- •Запись в файл
- •Считывание из файла
- •Закрытие файла
- •Установка новой позиции в файле
- •Текстовые файлы
- •Конец файла
- •Стандартные подпрограммы для работы с файлами и каталогами
- •Пример работы с нетипизированными файлами
- •Пример работы с типизированными файлами
- •Пример работы с текстовыми файлами
- •Объектный подход к работе с файлами
- •Задания для самостоятельной работы
- •Контрольные вопросы
Занятие 11. Процедуры и функции
Часто одна и та же последовательность операторов может выполняться в программе несколько раз в разных местах. В этом случае эту последовательность операторов можно оформить как подпрограмму и вызывать с разными параметрами в нужных местах программы. Подпрограммы в Паскале реализованы в виде процедур и функций. Процедура(функция) это подпрограмма, которая описывается один раз, а вызываться может несколько раз из разных мест программы, возможно с разными параметрами. Отличие процедур от функций заключается в том, что функция возвращает значение, а процедура - нет.
Использование процедур(функций) позволяет:
избежать дублирования программного кода: описав процедуру(функцию) один раз, можно вызывать ее несколько раз из разных мест программы;
упаковка программного кода в процедуры(функции) позволяет структурировать программу: с использованием процедур(функций) программа приобретает четкую и понятную структуру;
однажды написанная процедура(функция) может многократно использоваться в других программах, таким образом, создаются библиотеки процедур(функций).
Примером применения процедуры(функции) может служить подпрограмма, которая вычисляет минимальное значение двух переменных, находит подстроку из строки, обработчики событий и методы объектов оформлены в виде процедур.
Процедуры и функции перед использованием должны быть обязательно описаны.
Описание процедуры(функции) состоит из трех частей: заголовка, раздела описаний и тела:
<Заголовок подпрограммы>
<Раздел описаний>
<Тело>
Описание и вызов процедуры
Синтаксис описания процедуры имеет вид:
Procedure <имя процедуры> [(список формальных параметров)];
[(раздел описаний)]
begin
<операторы>
end;
Ключевое слово procedure задает описание заголовка. В заголовке задается:
имя процедуры, по которому она в дальнейшем может быть вызвана;
список формальных параметров, который не является обязательным.
Формальными параметрами называются параметры, которые задаются при описании процедуры, в отличие от фактических параметров, которые задаются при вызове процедуры. Каждый параметр в списке описывается со своим типом. Разделителем списка формальных параметров является - ';' (точка с запятой). Если несколько параметров имеют одинаковый тип, то их можно перечислить через запятую. Например:
Procedure Compute(x,y : integer; str : String);
В разделе описаний описываются переменные, константы и другие подпрограммы, которые используются только внутри этой процедуры.
Тело процедуры заключается в операторные скобки begin..end.
Например: процедура считает сумму двух чисел, которые поступают на вход и выдает их сумму в свойстве caption объекта Label1.
Procedure sum(a,b:integer);
Begin
Label1.Caption:=IntToStr(a + b);
End;
Синтаксис вызова процедуры имеет следующий вид:
<имя процедуры>[(список фактических параметров)];
Фактические параметры это параметры, которые задаются при вызове процедуры(функции). Разделителем списка фактических параметров является - ',' (запятая). Порядок следования и типы фактических параметров должны четко соответствовать порядку следования и типам соответствующих формальных параметров.
Пример 1.Вызов процедуры sum:
sum(4,7);
Пример 2. Дан двумерный массив размером 10 на 10, описывающий поле для игры «Сапер». Если значение в ячейке поля равно 0, то там нет мины, если значение ячейки равно 1 – там лежит мина. Написать процедуру, которая инициализирует этот массив, т.е. пустым ячейкам поля присваивает значения 0 и раскладывает 20 мин в случайных ячейках поля.
Решение. Опишем массив на верхнем уровне секции реализации или в секции Interface:
var Pole:array[1..10,1..10] of byte;
Назовем процедуру InitPole. Входных параметров она не имеет. Поэтому вызывается она следующим образом: InitPole;
В секции implemention опишем тело процедуры:
Procedure InitPole;
Var i, j, k : Integer;
Begin
{ всем ячейкам поля присвоить значение 0 }
for i:=1 to 10 do
for j:=1 to 10 do Pole[i,j]:=0;
{ разложить мины в случайные места поля }
i:=1;
randomize;
while i<=20 do
begin
j:=random(10)+1;
k:=random(10)+1;
if Pole[j,k]=1 then continue;
Pole[j,k]:=1;
i:=i+1;
end;
End;
Пример 3. В игре, описанной в пункте «Как совместить разные виды движения», все летающие тарелки движутся по одному и тому же закону. Требуется написать процедуру, назовем ее FlyNLO, которая будет управлять движением тарелки. На вход процедуре поступает указатель на летающую тарелку. Для того чтобы можно было получать доступ к объектам формы внутри процедуры, следует делать процедуру методом класса формы. Для этого нужно ее заголовок описать в классе формы, как показано:
type
TForm1 = class(TForm) { описание класса формы }
Pushka: TImage;
Fly1: TImage;
Fly2: TImage;
Snar: TImage;
Timer1: TTimer;
Timer2: TTimer;
procedure FlyNLO(Sender:TObject); { заголовок процедуры }
…
Как видно из заголовка процедуры ей передается параметр Sender типа TObject – это указатель на конкретную летающую тарелку. Тело процедуры описывается в разделе implementation модуля и имеет следующий вид:
procedure TForm1.FlyNLO(Sender:TObject);
begin
if not (Sender as TImage).Visible then
with (Sender as TImage) do
begin
top:=random(200)+1;
left:=0;
visible:=true;
tag:=random(10)+5;
end
else
{ полет }
if (Sender as TImage).left+(Sender as TImage).Width<Form1.Width then
(Sender as TImage).left:= (Sender as TImage).left+(Sender as TImage).tag
else
(Sender as TImage).visible:=false;
end;
Как вы видите этот программный код мало, чем отличается от того, что мы писали в пункте «Как совместить разные виды движения». Для правильной работы процедуры-метода необходимо указать тип объекта Sender. Для этого используется оператор As, который позволяет рассматривать Sender как объект класса TImage.
Вызывается эта процедура в обработчике события OnTimer, столько раз, сколько у нас летающих тарелок с соответствующими параметрами:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
FlyNLO(Fly1); {полет 1 летающей тарелки}
FlyNLO(Fly2); {полет 2 летающей тарелки}
End;