Реферат: Разработка интерактивной среды обучения работе

--PAGE_BREAK--Введение

          На Земле каждый час увеличивается количество компьютеров. Они работают с программами, количество которых тоже растет. Написаны все программы с использованием разных языков программирования – С++, Delphi, Assembler. Изучение таких языков мало уступает по сложности изучению обычных, человеческих. Это очень сложный и трудоемкий процесс.

Для его облегчения и упрощения создаются различные обучающие программы. Компьютер учит человека. Такой «учитель» никогда не устает, всегда объективен, не обижается…

В данной работе представлена подобная программа, способная (как мне кажется), обучить начинающего программиста основам визуальной среды Delphi и языка Паскаль.

1 Описание программы 1. 1 Основные характеристики


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

Файл урока представляет собой текстовый файл с расширением .LES; в нем сдержится текст урока и специальные команды, заставляющие программу, выполнять некоторые действия, например, выводить текст таким-то цветом, изменять размер шрифта, вставлять картинки. Описание команд будет приведено ниже.


1. 2  Руководство для пользователя

          Выполняемый файл называется LD. EXE. После его запуска на экране появляется окно, показанное на рис. 1. 1
<img width=«302» height=«237» src=«ref-1_406565305-6970.coolpic» v:shapes="_x0000_i1025">

Рисунок 1. 1 –  Окно, возникающее после запуска
          По нему «ползет» надпись: «Добро пожаловать в программу Learn Delphi!!!». Для входа в программу надо нажать кнопку «ОК». Следующее окно показано на рис. 1. 2:


<img width=«322» height=«164» src=«ref-1_406572275-2102.coolpic» v:shapes="_x0000_i1026">

Рисунок 1. 2 –  Окно выбора нужного урока
          Пользователь выбирает нужный ему урок и нажимает кнопку «Загрузить». После этого он видит основное окно, в которое загружена первая страница урока. Это окно представлено на рис. 1. 3 (стр. 8).

          В правом нижнем углу окна помещены три кнопки SpeedButton:

<img width=«29» height=«29» src=«ref-1_406574377-248.coolpic» hspace=«12» v:shapes="_x0000_s1027">Переход на предыдущую страницу

<img width=«29» height=«29» src=«ref-1_406574625-262.coolpic» hspace=«12» v:shapes="_x0000_s1028">

Переход на следующую страницу

<img width=«29» height=«29» src=«ref-1_406574887-211.coolpic» hspace=«12» v:shapes="_x0000_s1029">

Выход из текущего урока (появляется окно выбора уроков).

1. 3 Описание командформата .LES


          Как уже было сказано выше, данная программа имеет специальную систему команд. Они делятся на три типа:

·        Текстовые

·        Графические

·        Логические.

          Все команды предваряются символами /:, чтобы их можно было отличить от обычного текста, выводимого на экран.

Все, что не имеет в начале символов
/:
будет вы
ведено!





<img width=«680» height=«499» src=«ref-1_406575098-9655.coolpic» v:shapes="_x0000_i1027">


Рисунок 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

Дает знать системе, что дальше следует новая страница.


    продолжение
--PAGE_BREAK--1. 3. 2 Графические команды


          В данной версии программы имеется только одна графическая команда– /:picture, которая загружает и помещает по указанным координатам картинку из файла в формате .BMP.

          Синтаксис:

          /:Picture

          X-координата рисунка.

          Y-координата
. рисунка.


          имя файла рисунка

          На одну страницу можно поместить до трех картинок. Этого в большинстве случаев достаточно.


1. 3. 3  Логические команды

          Логическая команда в данной версии тоже одна. Это /:question.
Синтаксис:

         

          /:question

          текст вопроса

          правильный ответ (1-«Да»  2-«Нет»)

         

          Результатом выполнения является присутствие на странице вопроса, обведенного двойной красной рамкой. Справа, после текста вопроса, находятся две кнопки – «Да» и «Нет». Пользователь нажимает на кнопку, которая символизирует, по его, юзера,  мненеию, правильный ответ и кнопки сразу становятся неактивными. Программа посчитывает количество правильных и неправильных ответов и в конце работы выставляет оценку.

          На странице не допускается размещать больше одного вопроса!

          Версия программы, представленная в курсовой работе является
DEMO
-версией, поэтому вообще в уроке допускается лишь одна логическая команда.


1.    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. При этом и распознаются команды.


1.     4. 3 Перспективы


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

          Кроме того, используя возможности Windows, можно будет «заставить» обучалку взаимодействовать с системой программирования Delphi, что повысит наглядность примеров и тогда Learn Delphi способна будет готовить неплохих специалистов в области компьютерных технологий.

          Но и это еще не все! LD – универсальная система, в файл урока можно записать что-угодно, так что применять это средство можно и для обучения другим предметам, даже несколько удаленным от информатики, как, например, история, иностранные языки.

    продолжение
--PAGE_BREAK--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):
<img width=«457» height=«391» src=«ref-1_406584753-3794.coolpic» v:shapes="_x0000_i1028">
Рисунок 2. 1– Окно программы-примера


         

    продолжение
--PAGE_BREAK--Выводы


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

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

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

Перечень ссылок

1. Культин Н.
Delphi 4.
Программирование на
Object Pascal. BHV,
Санкт-Петербург, 1999. – 480 с., ил.



2. Дэн Оузьер и др.
Delphi 3.
Освой самостоятельно. М.: “Издательство БИНОМ”, 1998 г. – 560 с.: ил.



3. Бондарев В. М., Рублинецкий В. И., Качко Е. Г. Основы программирования. Харьков: Фолио; Ростов н/Д: Феникс, 1998  – 368 с.


4. Справочная система Delphi


5.
Фаронов В. В. Delphi 4. Учебный курс. М.: «Нолидж», 1999 – 464 с., ил.


Приложение А


          Ниже дан исходный код всех модулей программы
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<sp-1 do begin

           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;    продолжение
--PAGE_BREAK--
еще рефераты
Еще работы по информатике