Руководство для пользователя Выполняемый файл называется ld. Exe. После его запуска на экране появляется окно - shikardos.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Программа для обнаружения компьютерных вирусов 1 194.06kb.
Руководство для пользователя v-01. 13 (08. 04. 2008) 3 981.88kb.
Инструкция по установке и настройке Установка Запустить файл setup exe 1 14.3kb.
Руководство пользователя детское автомобильное кресло серии jupiter... 1 122.59kb.
«Документы» Откроется новая вкладка Документы Google Нажимаем кнопку 1 18.7kb.
Перед началом эксплуатации этого механизма внимательно изучите данное... 1 226.17kb.
Руководство по эксплуатаци мк 00. 000 Рэ г. Киев -2 2 504.2kb.
Руководство пользователя Оглавление 1 271.96kb.
Руководство пользователя Скриншоты игры 1 54.74kb.
Руководство пользователя (краткое описание) г. Зеленоград 2002 Содержание... 1 69.09kb.
Руководство пользователя ао "Фонд Национального благосостояния " 1 186.01kb.
Vii местоимения и слова-заместители предложения с вводящим there... 1 407.9kb.
- 4 1234.94kb.
Руководство для пользователя Выполняемый файл называется ld. Exe. После его запуска - страница №1/1



Разработка интерактивной среды обучения работе в 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 со строчным значением, т. к. литералы хранятся в памяти как глобальные константы.
Адреса локальных (размещенных в стеке) и динамических переменных не могут быть помещены в подобную константу.
2. 6 Примеры программ

Ниже приведены примеры программ, использующих типизированные константы. Они написаны в Delphi, но в виде консольного приложения – чтобы не загромождать текст программ описанием форм и других объектов, к которым данная задача не имеет отношения.

Тексты программ-примеров помещены на дискете с курсовой работой в директории EXAMPLES.
Пример 1.
program Example1;

{$APPTYPE CONSOLE}

{Данная программа-пример демонстрирует применение констант-массивов. Преобразует численный формат даты в обычный, с названием месяца}

uses


SysUtils;
const month:array[1..12] of string[20]=('January','February','March','April','May', 'June','July','August','September','October','November', 'December');

var d:string[10];

s:string[30];

s1:string[3];

begin

write('Enter date (dd:mm:yyyy): ');



readln(d);

s:='';


if copy(d,1,1)<>'1' then begin

if copy(d,2,1)='1' then s1:='`st' else

if copy(d,2,1)='2' then s1:='`nd' else

if copy(d,2,1)='3' then s1:='`rd'

end else s1:='`th';

s:=copy(d,1,2)+s1+' of '+month[strtoint(copy(d,4,2))]+' ' +copy(d,7,4);

writeln(s);

readln


end.
Пример 2.
unit Example2frm;
{Этот пример показывает,как применяются константы-записи. Здесь строится многоугольник (с применением метода Polyline объекта Canvas),а координаты вершин многоугольника содержатся в массиве констант-записей.}
interface
uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;


type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }



public

{ Public declarations }

end;
var

Form1: TForm1;

PolyLines:array[1..4] of tpoint=((x:170;y:20),(x:320;y:320),(x:20;y:320), (x:170;y:20));
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);

begin


form1.Canvas.Pen.Width:=3;

form1.canvas.Polyline(polylines)

end;
end.
Окно этой программы-примера приведено на рис. 2. 1 (стр. 20):

Рисунок 2. 1 – Окно программы-примера


Выводы
В данной работе представлена образовательная программа, разработанная в среде программирования Borland Delphi 5. К ней прилагается файл урока, описывающего основы Delphi. Но вообще, эту систему обучения можно “заставить” обучать какой-угодно дисциплине – для этого достаточно создать файлы уроков и записать их имена в файл конфигурации.

В процессе разработки программы детально изучены графические возможности Делфи и объекта Canvas.

Во второй части работы рассмотрены типизированные константы в Паскале, их применение. Даны примеры программ.

Приложение А

Ниже дан исходный код всех модулей программы


unit Mainfrm;
interface
uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls, StdCtrls;
type

TfrmMain = class(TForm)

Image1: TImage;

Timer1: TTimer;

Button1: TButton;

procedure Timer1Timer(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }



public

{ Public declarations }

end;
var

frmMain: TfrmMain;


implementation
uses runfrm;
{$R *.DFM}
var x:integer;
procedure TfrmMain.Timer1Timer(Sender: TObject);

var r:trect;

begin

r.Left:=x;



r.Top:=150;

r.Bottom:=170;

r.Right:=frmmain.Width;

frmmain.canvas.fillrect(r);

frmmain.canvas.TextOut(x,151,'Добро пожаловать в программу "Learn Delphi" !!!');

dec(x,3);

if x<-720 then x:=frmmain.width
end;
procedure TfrmMain.FormCreate(Sender: TObject);

begin


frmmain.canvas.Brush.Color:=clsilver;

frmmain.canvas.pen.color:=clblue;

x:=frmmain.width;

frmmain.canvas.font.name:='Times New Roman';

frmmain.canvas.font.size:=19;

frmmain.canvas.font.color:=clblue

end;
procedure TfrmMain.Button1Click(Sender: TObject);

begin


frmmain.hide;

frmrun.show;

end;
end.
unit runfrm;
interface
uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, checklst;
type

Tfrmrun = class(TForm)

lblessons: TListBox;

Label1: TLabel;

Button1: TButton;

Button2: TButton;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

procedure lblessonsDblClick(Sender: TObject);

procedure lblessonsKeyPress(Sender: TObject; var Key: Char);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }



public

{ Public declarations }

end;
var

frmrun: Tfrmrun;

lessonname:string[40];
implementation
uses Mainfrm, lessonfrm;
{$R *.DFM}
type

tconfig=record

name:string[50];

filename:string[40];

end;
var names:array[1..100] of string[40];
procedure loadlesson;

begin


lessonname:=names[frmrun.lblessons.itemindex+1];

frmrun.hide;

frmlesson.show

end;
procedure Tfrmrun.FormClose(Sender: TObject; var Action: TCloseAction);

begin

halt;


end;
procedure Tfrmrun.FormCreate(Sender: TObject);

var f:file of tconfig;

lesson:tconfig;

n:byte;


begin

n:=0;


assignfile(f,'ld.cfg');

reset(f);

while not eof(f) do begin

inc(n);


read(f,lesson);

names[n]:=lesson.filename;

lblessons.Items.Add('Урок '+inttostr(n)+' '+lesson.name);

end;


closefile(f);

end;
procedure Tfrmrun.lblessonsDblClick(Sender: TObject);

begin

loadlesson;



end;
procedure Tfrmrun.lblessonsKeyPress(Sender: TObject; var Key: Char);

begin


if key=#13 then loadlesson

end;
procedure Tfrmrun.Button2Click(Sender: TObject);

begin

close


end;
procedure Tfrmrun.Button1Click(Sender: TObject);

begin


loadlesson;

end;
end.

unit lessonfrm;
interface
uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls, Buttons, StdCtrls;
type

TfrmLesson = class(TForm)

pic1:timage;

pic2:timage;

pic3:timage;

SpeedButton1: TSpeedButton;

SpeedButton2: TSpeedButton;

SpeedButton3: TSpeedButton;

cmdYes: TButton;

cmdNo: TButton;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure SpeedButton3Click(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure FormDeactivate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure cmdYesClick(Sender: TObject);

procedure cmdNoClick(Sender: TObject);

procedure SpeedButton2Click(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

private
{ Private declarations }

public


nq,npq:byte;

end;
var

frmLesson: TfrmLesson;

implementation

{$R *.DFM}

uses runfrm, resfrm;

var f:textfile;

textY:integer;

first,nopaint:boolean;

strpage:array[1..80] of string[80];

numpage,ap,np,sp,pp:byte; {прав. ответ; кол-во вопросов; правильных ответов}

pages:array[0..100] of byte;

fontemp:tfont;

pagefonts:array[1..100] of tfont;


procedure loadpage;

begin


pagefonts[numpage]:=frmlesson.canvas.font;

sp:=1;


inc(pp);

pages[pp]:=pages[pp-1];

while not eof(f) do begin

readln(f,strpage[sp]);

inc(sp);

inc(pages[pp]);

if strpage[sp-1]='/:newpage' then exit

end;


end;
procedure drawpage;

label 1;


var s:string;

x,y:integer;

npic:^timage;

q:tcolor;

i,n:byte;

w:tfontstyles;

r:trect;

temp:tfont;


begin

{ frmlesson.pic1.left:=0;}

frmlesson.Canvas.TextOut(3,3,'');

np:=1;


r.Left:=0;

r.Top:=0;

r.Right:=frmlesson.Width;

r.Bottom:=frmlesson.Height-80;

frmlesson.Canvas.FillRect(r);

if not nopaint then begin

npic:=@frmlesson.pic1;

frmlesson.pic1.hide;

frmlesson.pic2.hide;

frmlesson.pic3.hide

end;

frmlesson.canvas.fillrect(r);



i:=1;

while i

s:=strpage[i];

inc(i);


if s='/:question' then begin

temp:=frmlesson.Canvas.Font;

frmlesson.Canvas.Font.Color:=clred;

frmlesson.Canvas.pen.Color:=clred;

r.Top:=texty;

r.Left:=3;

r.Right:=frmlesson.Width-10;

r.Bottom:=texty+38;

frmlesson.Canvas.Rectangle(r);

frmlesson.cmdyes.top:=texty+6;

frmlesson.cmdYes.Left:=frmlesson.width-170;

frmlesson.cmdno.top:=texty+6;

frmlesson.cmdno.Left:=frmlesson.width-90;

frmlesson.cmdYes.Show;

frmlesson.cmdno.show;

frmlesson.Canvas.Font:=temp;

s:=strpage[i];

frmlesson.Canvas.TextOut(5,texty+3,s);

ap:=strtoint(strpage[i+1]);

inc(texty,40);

inc(i,2)

end else


if s='/:picture' then begin

inc(i,3);

if nopaint then goto 1;

x:=strtoint(strpage[i-3]);

y:=strtoint(strpage[i-2]);

s:=strpage[i-1];

npic^.Enabled:=true;

npic^.Picture.LoadFromFile(s);

npic^.left:=x;

npic^.top:=y;

npic^.visible:=true;
if np=1 then begin

np:=2;


npic:=@frmlesson.pic2;
end else npic:=@frmlesson.pic3;

1:

end else



if s='/:size' then begin

n:=strtoint(strpage[i]);

inc(i);

frmlesson.canvas.Font.Size:=n



end else

if s='/:font' then begin

s:=strpage[i];

inc(i);


frmlesson.canvas.Font.Name:=s

end else


if s='/:style' then begin

n:=strtoint(strpage[i]);

inc(i);

case n of



1:w:=[];

2:w:=[fsbold];

4:w:=[fsitalic];

3:w:=[fsunderline];

5:w:=[fsstrikeout];

end;


frmlesson.canvas.Font.Style:=w

end else


if s='/:color' then begin

s:=strpage[i];

inc(i);

if s='black' then q:=clblack;



if s='red' then q:=clred;

if s='blue' then q:=clblue;

if s='green' then q:=clgreen;

if s='gray' then q:=clgray;

if s='yellow' then q:=clyellow;

frmlesson.canvas.font.Color:=q

end else

if s='/:newpage' then exit else begin

frmlesson.Canvas.TextOut(2,texty,s);

inc(texty,frmlesson.Canvas.Font.Size+10)

end;

end


end;
procedure TfrmLesson.FormClose(Sender: TObject; var Action: TCloseAction);

begin


closefile(f);

if nq>0 then frmresult.show else frmrun.Show

end;

procedure TfrmLesson.SpeedButton3Click(Sender: TObject);



begin

frmlesson.hide;

frmresult.show

end;


procedure TfrmLesson.FormPaint(Sender: TObject);

begin


texty:=2;

if first then begin

first:=false;

fontemp:=frmlesson.canvas.font;

drawpage

end else begin

nopaint:=true;

drawpage;

nopaint:=false

end


end;
procedure TfrmLesson.FormShow(Sender: TObject);

var s,name:string;

begin

nq:=0;


first:=true;

nopaint:=true;

assignfile(f,lessonname);

reset(f);

while not eof(f) do begin

readln(f,s);

if s='/:question' then inc(nq)

end;


closefile(f);

reset(f);

readln(f,name);

frmlesson.Caption:=name;

textY:=2;

loadpage;

frmlesson.Canvas.textout(20,20,'');

end;
procedure TfrmLesson.FormDeactivate(Sender: TObject);

begin

nopaint:=true



end;
procedure TfrmLesson.Timer1Timer(Sender: TObject);

var q:tcolor;

x,y:integer;

begin


{ if not frmlesson.Visible then exit;

x:=random(frmlesson.Width);

y:=random(frmlesson.Height);

if (x in [pic1.Left..pic1.Left+pic1.Width]) or (y in [pic1.Top..pic1.Top+pic1.Height]) then exit;

q:=frmlesson.canvas.pixels[x,y];

if q<>clwhite then begin

nopaint:=true;

texty:=1;

drawpage

end;


frmlesson.canvas.pixels[x,y]:=clred;}
end;
procedure TfrmLesson.FormCreate(Sender: TObject);

begin


npq:=0;

ap:=1;


pp:=0;

numpage:=1;

end;
procedure TfrmLesson.cmdYesClick(Sender: TObject);

begin


if ap=1 then inc(npq);

frmlesson.cmdYes.enabled:=false;

frmlesson.cmdno.enabled:=false;

end;
procedure TfrmLesson.cmdNoClick(Sender: TObject);

begin

if ap=2 then inc(npq);



frmlesson.cmdYes.enabled:=false;

frmlesson.cmdno.enabled:=false;

end;
procedure TfrmLesson.SpeedButton2Click(Sender: TObject);

begin


canvas.Rectangle(0,0,width,height);

pic1.Hide;

pic2.Hide;

pic3.Hide;

frmlesson.Repaint;

{ pic1.show;

pic1.hide; }

inc(numpage);

if not speedbutton1.enabled then speedbutton1.Enabled:=true;

frmlesson.cmdYes.hide;

frmlesson.cmdno.hide;

{ frmlesson.pic1.hide;}

frmlesson.pic2.hide;

frmlesson.pic3.hide;

texty:=1;

sp:=0;


loadpage;

drawpage;

if eof(f) then speedbutton2.Enabled:=false

end;
procedure TfrmLesson.SpeedButton1Click(Sender: TObject);

var i:byte;

q:integer;


s:string[100];

begin


pic1.Hide;

pic2.Hide;

pic3.Hide;

frmlesson.Repaint;

dec(numpage);

if not speedbutton2.enabled then speedbutton2.Enabled:=true;

closefile(f);

reset(f);

canvas.Font:=pagefonts[numpage];

if numpage=1 then begin

readln(f);

speedbutton1.Enabled:=false

end else begin

i:=0;


while ireadln(f,s);

if s='/:color' then begin

readln(f,s);

if s='black' then q:=clblack;

if s='red' then q:=clred;

if s='blue' then q:=clblue;

if s='green' then q:=clgreen;

if s='gray' then q:=clgray;

if s='yellow' then q:=clyellow;

frmlesson.canvas.font.Color:=q

end;


if s='/:name' then begin

readln(f,s);

canvas.Font.Name:=s

end;


if s='/:size' then begin

readln(f,q);

canvas.Font.Size:=q

end;


if s='/:newpage' then inc(i)

end


end;

{ for i:=1 to pages[pp-2] do readln(f);

for i:=1 to pp do pages[pp]:=0;

dec(pp,2);

if pp=0 then begin

readln(f);

frmlesson.canvas.Font:=fontemp;

end;}


frmlesson.cmdYes.hide;

frmlesson.cmdno.hide;

frmlesson.pic1.hide;

frmlesson.pic2.hide;

frmlesson.pic3.hide;

texty:=1;

sp:=0;

loadpage;



if pp=1 then speedbutton1.enabled:=false;

drawpage;

end;
procedure TfrmLesson.FormActivate(Sender: TObject);

begin


formcreate(sender);

end;
end.

unit resfrm;
interface
uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Grids;
type

TfrmResult = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

procedure FormActivate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private


{ Private declarations }

public


{ Public declarations }

end;
var

frmResult: TfrmResult;
implementation
uses runfrm, lessonfrm;
{$R *.DFM}
procedure TfrmResult.FormActivate(Sender: TObject);

begin


with stringgrid1 do begin

colwidths[0]:=150;

cells[1,0]:='Количество';

cells[0,1]:='Вопросов';

cells[0,2]:='Правильных ответов';

cells[1,1]:=inttostr(frmlesson.nq);

cells[1,2]:=inttostr(frmlesson.npq);

end


end;
procedure TfrmResult.Button1Click(Sender: TObject);

begin


frmresult.Hide;

frmrun.Show

end;
procedure TfrmResult.FormClose(Sender: TObject; var Action: TCloseAction);

begin


action:=cahide;

frmrun.Show



end;
end.