работе в Borland Delphi
Введение
На Земле каждый час увеличивается количество компьютеров. Они работают с
программами, количество которых тоже растет. Написаны все программы с
использованием разных языков программирования – С++, Delphi, Assembler. Изучение
таких языков мало уступает по сложности изучению обычных, человеческих. Это
очень сложный и трудоемкий процесс.
Для его облегчения и упрощения создаются различные обучающие программы.
Компьютер учит человека. Такой “учитель” никогда не устает, всегда объективен,
не обижается…
В данной работе представлена подобная программа, способная (как мне кажется),
обучить начинающего программиста основам визуальной среды Delphi и языка
Паскаль.
1 Описание программы
1. 1 Основные характеристики
Рассматриваемая программа имеет возможность использования уроков, хранящихся в
файлах, что позволяет создавать уроки, не изменяя кода программы.
Файл урока представляет собой текстовый файл с расширением .LES; в нем сдержится
текст урока и специальные команды, заставляющие программу, выполнять некоторые
действия, например, выводить текст таким-то цветом, изменять размер шрифта,
вставлять картинки. Описание команд будет приведено ниже.
1. 2 Руководство для пользователя
Выполняемый файл называется LD. EXE. После его запуска на экране появляется
окно.
По нему “ползет” надпись: “Добро пожаловать в программу Learn Delphi!!!”. Для
входа в программу надо нажать кнопку “ОК”. Следующее окно показано на рис. 1. 2:
Рисунок 1. 2 – Окно выбора нужного урока
Пользователь выбирает нужный ему урок и нажимает кнопку “Загрузить”. После этого
он видит основное окно, в которое загружена первая страница урока. Это окно
представлено на рис. 1. 3 (стр. 8).
1. 3 Описание команд формата .LES
Как уже было сказано выше, данная программа имеет специальную систему команд.
Они делятся на три типа:
Текстовые
Графические
Логические.
Все команды предваряются символами /:, чтобы их можно было отличить от обычного
текста, выводимого на экран.
Все, что не имеет в начале символов /: будет выведено!
Рисунок 1. 3 – Окно урока
1. 3. 1 Текстовые команды
Таблица 1. 1 – Текстовые команды
/:size
размер шрифтаУстанавливает размер шрифта. Размер вводится сразу после
команды.
Пример:
Таблица 1. 1 – Текстовые команды (продолжение)
/:size
750
/:color
цветУстанавливает цвет выводимого текста. Поддерживает основные цвета:
red, blue, black, yellow, green, grey.
Пример:
/:color
red
/:style
стильУстанавливает стиль выводимого текста:
1 – нормальный,
2 – полужирный,
3 – подчеркнутый,
4 – курсив,
5 – перечеркнутый.
Пример:
/:style
5
/:font
имяЗагружает другой шрифт.
Пример:
/:font
Times New Roman
/:newpageДает знать системе, что дальше следует новая страница.
1. 3. 2 Графические команды
В данной версии программы имеется только одна графическая команда – /:picture,
которая загружает и помещает по указанным координатам картинку из файла в
формате .BMP.
Синтаксис:
/:Picture
X-координата рисунка.
Y-координата. рисунка.
имя файла рисунка
На одну страницу можнопоместить до трех картинок. Этого в большинстве случаев
достаточно.
1. 3. 3 Логические команды
Логическая команда в данной версии тоже одна. Это /:question.
Синтаксис:
/:question
текст вопроса
правильный ответ (1-"Да" 2-"Нет")
Результатом выполнения является присутствие на странице вопроса, обведенного
двойной красной рамкой. Справа, после текста вопроса, находятся две кнопки –
“Да” и “Нет”. Пользователь нажимает на кнопку, которая символизирует, по его,
юзера, мненеию, правильный ответ и кнопки сразу становятся неактивными.
Программа посчитывает количество правильных и неправильных ответов и в конце
работы выставляет оценку.
На странице не допускается размещать больше одного вопроса!
Версия программы, представленная в курсовой работе является DEMO-версией,
поэтому вообще в уроке допускается лишь одна логическая команда.
4 Описание внутренней структуры программы
1. 4. 1 Общая организация
Программа имеет четыре окна: frmMain, frmRun, frmLesson и frmRes. В табл. 1. 2
представлены функции, выполняемые каждым из них:
Таблица 1. 2 Функции, выполняемые окнами в программеНазвание окнаФункции,
которые выполняет в программе
frmMain Данное окно появляется, когда пользователь запускает программу.
Оно служит как-бы приглашением к работе. Показано данное окно на рис. 1.
1.
FrmRunПосле frmMain пользователь попадает в окно frmRun. Здесь он может
выбрать нужный урок и загрузить его или выйти из программы. Показано оно
на рис. 1. 2.
FrmLessonОсновное окно для обучения. В нем выводится текст урока, все
картинки и вопросы. В модуле этого окна описаны все подпрограммы для
обработки файлов уроков. Показано это окно на рис. 1. 3.
FrmResПосле прохождения урока пользователь должен знать, как он усвоил
материал. В данном окне помещена таблица с числом вопросов и правильных
ответов. Это очнь простое окно, поэтому не представлено на рисунках.
1. 4. 2 Алгоритмы, достойные рассмотрения
Одним из удачно реализованных алгоритмов автор считает реализацию распознавания
команд. В приложении А, в конце записки представлен исходный код программы, в
котором можно рассмотреть эти процедуры. Текст выводится в окне с помощью
объекта Canvas. Это вызвано необходимостью помещать картинки вперемежку с
текстом. Проще всего реализуется такая идея с применением Canvas’a. При
тестировании возникла проблема: при перерисовке окна (в случае временного
перекрытия другим окном и т. п.) объекты, выведенные с помощью Canvas’a, не
перерисовывались. Исчезали крупные фрагменты текста. В конце-концов проблема
решена: запускается обработчик события OnPaint.
Каждая страница урока загружается в специальную переменную (процедура LoadPage),
а потом выводится на экран процедурой DrawPage. При этом и распознаются команды.
4. 3 Перспективы
Данная программа, как мне кажется, является довольно перспективным “прожектом”.
В следующих версиях программы, которые, несомненно, появятся, будут
усовершенствованы возможности тестирования, добавятся несколько логических и
графических команд, а чуть позже – и специальный редактор для упрощения создания
уроков.
Кроме того, используя возможности Windows, можно будет “заставить” обучалку
взаимодействовать с системой программирования Delphi, что повысит наглядность
примеров и тогда Learn Delphi способна будет готовить неплохих специалистов в
области компьютерных технологий.
Но и это еще не все! LD – универсальная система, в файл урока можно записать
что-угодно, так что применять это средство можно и для обучения другим
предметам, даже несколько удаленным от информатики, как, например, история,
иностранные языки.
2 Типизированные константы
2. 1 Общая характеристика
Язык Паскаль, и, соответственно, Делфи, имеет специальный вид констант –
типизированные. В отличие от обычных, констант, они могут содержать массивы,
указатели, записи и значения процедурных типов. При установленной директиве
компилятора {$J+} они ведут себя как обычные инициализированные переменные. При
{$J-} значения не могут изменяться.
Синтаксис: Const имя_константы: тип =значение
Пример:Const Max: integer=200
2. 2 Константы-массивы
Чтобы задать какую-либо константу-массив, нужно описать значения всех элементов.
Значения описываются в круглых скобках, через запятую. Например:
Const Digits: array[1..5] of byte=(1, 2, 3, 4, 5)
В данном примере объявляется константа-массив Digits типа Byte. Ей сразу
присваиваются числа от 1 до 5.
Константы-массивы часто используются для задания строк, оканчивающихся символом
#0. В этом случае описание выглядит так:
Const Stroka: array[1..5] of char=(‘Hello’)
Константой может быть и многомерный массив. Для этого каждое его измерение
помещается в круглые скобки. Пример:
type TCube = array[0..1, 0..1, 0..1] of Integer;
const Maze: TCube = (((0, 1), (2, 3)), ((4, 5), (6,7)))
Создается массив Maze, где:
Maze[0,0,0] = 0
Maze[0,0,1] = 1
Maze[0,1,0] = 2
Maze[0,1,1] = 3
Maze[1,0,0] = 4
Maze[1,0,1] = 5
Maze[1,1,0] = 6
Maze[1,1,1] = 7
Все константы-массивы не могут содержать файловых переменных ни на каком уровне.
2. 3 Константы-записи
Для задания константы-записи необходимо заполнить ее поля согласно синтаксису:
Имя_поля: значение. Значения разделяются точками с запятой и все выражение
помещается в круглые скобки. Значения должны быть представлены константами. Поля
должны быть перечисленны в том порядке, в каком ониразмещены в описании записи.
Поле-описатель, если такое есть, должно быть заполнено; в случае записи с
вариантами только вариант, выбранный описателем может использоваться.
Примеры:
type
TPoint = record
X, Y: Single;
end;
TVector = array[0..1] of TPoint;
TMonth = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
TDate = record
D: 1..31;
M: TMonth;
Y: 1900..1999;
end;
const
Origin: TPoint = (X: 0.0; Y: 0.0);
Line: TVector = ((X: -3.1; Y: 1.5), (X: 5.8; Y: 3.0));
SomeDay: TDate = (D: 2; M: Dec; Y: 1960);
Все константы-записи не могут содержать файловых переменных ни на каком уровне.
2. 4 Процедурные константы
Для определения процедурной константы нужна процедура с подходящими параметрами.
Например:
function Calc(X, Y: Integer): Integer;
begin
...
end;
type TFunction = function(X, Y: Integer): Integer;
const MyFunction: TFunction = Calc;
После такого описания, функция вызывается:
I := MyFunction(5, 7)
Вы также можете присвоить константе значение nil.
2. 5 Константы-указатели
Такие константы содержат адрес в памяти переменной или подпрограммы. При их
объявлении констант нужно следить за тем, чтобы адрес, на который она указывает,
использовался. Примеры:
Константа содержит адрес переменной:
const PI: ^Integer = @I;
Константа содержит адрес подпрограммы:
const PF: Pointer = @MyFunction;
Вы можете объявить константу типа PChar со строчным значением, т. к. литералы