МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Разработка тестового приложения Компоненты меню Delphi

    информацию лишь в ходе исполнения программы.

    Три основные части разработки интерфейса следующие: проектирование

    панели, проектирование диалога и представление окон. Для общего

    пользовательского доступа также должны учитываться условия применения

    архитектуры прикладных систем.

    Сегодня появилась реальная возможность с помощью моделирования на

    современных многофункциональных средствах обработки и отображения

    информации, таких как Delphi конкретизировать тип и характеристики

    используемых информационных моделей, выявить основные особенности будущей

    деятельности операторов, сформулировать требования к параметрам аппаратно-

    программных средств интерфейса взаимодействия и т.д.

    Использование типовых решений, модульного принципа проектирования

    систем отображения и обработки информации приобретает всё более широкие

    масштабы, что, впрочем, вполне естественно.

    Особый упор при внедрении данных задач следует, конечно, придавать

    современным CASE-средствам разработки программ, так как они наиболее

    оптимально позволяют проектировать решения, в основе которых лежат, в

    первую очередь, требования к согласованному пользовательскому интерфейсу,

    каковым и является интерфейс Windows. Никакие продукты других фирм,

    доступные сегодня, не обеспечивают одновременную простоту использования,

    производительность и гибкость в такой степени, как Delphi. Этот язык

    заполнил брешь между языками 3-го и 4-го поколений, соединив их сильные

    стороны и создав мощную и производительную среду разработки.

    2.3. Функциональная и логическая структура

    При запуске, программа проверяет наличие подключенного к ней файла

    вопросов, если его не обнаружено, выдаётся сообщение об ошибке. Если файл

    вопросов есть, тогда программа из него загружает введение, т.е. часть, в

    которой дается краткое представление о тесте, а затем вопрос с вариантами

    ответов, при выборе варианта ответа программа запоминает количество баллов

    за выбранный ответ и переходит к следующему вопросу. В конце программы

    подсчитываются количество баллов за ответы и выводятся результаты

    тестирования, которые так же находятся в файле вопросов. После этого

    предлагается сохранить эти результаты в виде файла, которому необходимо

    присвоить имя. Наглядное представление о работе программы можно получить из

    рис. 2.

    Нет

    Да

    Рис. 2. Алгоритм работы программы

    2.4. Алгоритм реализации проекта

    2.4.1. Файл теста

    Тест представляет собой последовательность вопросов, на которые

    испытуемый должен ответить путем выбора правильного ответа из нескольких

    предложенных вариантов.

    Файл теста состоит из трех разделов:

    . раздел заголовка;

    . раздел оценок;

    . раздел вопросов.

    Заголовок содержит общую информацию о тесте, например, о его

    назначении. Заголовок может состоять из нескольких строк. Признаком конца

    заголовка является точка, стоящая в начале строки. За заголовком следует

    раздел оценок, в котором приводятся названия оценочных уровней и количество

    баллов, необходимое для достижения этих уровней. Название уровня должно

    располагаться в одной строке. Признаком конца раздела оценок является

    точка, стоящая в начале строки. За разделом оценок следует раздел вопросов

    теста. Каждый вопрос начинается текстом вопроса, за которым может следовать

    имя файла иллюстрации, размещаемое на отдельной строке и начинающееся

    символом \. Имя файла иллюстрации является признаком конца текста вопроса.

    Если к вопросу нет иллюстрации, то вместо имени файла ставится точка. После

    вопроса следуют альтернативные ответы. Текст альтернативного ответа может

    занимать несколько строк. В строке, следующей за текстом ответа,

    располагается количество баллов, которое испытуемый получит за выбор этого

    ответа. Если альтернативный ответ не является последним для текущего

    вопроса, то перед оценкой ставится запятая, если является - то точка.

    В приведенном ниже вопросе второй и третий ответы помечены как

    правильные (оценка за их выбор не равна нулю). При этом видно, что выбор

    второго альтернативного ответа дает более весомый вклад в общую сумму

    баллов.

    Какую формулу следует записать в ячейку В5, чтобы

    вычислить сумму выплаты?

    \tabl.bmp

    =сумма(В2-В4)

    ,0

    =сумма(В2:В4)

    ,2

    =В2+ВЗ+В4

    .1

    Вот пример раздела оценок:

    Отлично

    100

    Хорошо

    85

    Удовлетворительно

    60

    Плохо

    50

    Файл теста может быть подготовлен в текстовом редакторе Notepad или

    Microsoft Word. В случае использования Microsoft Word при сохранении текста

    следует указать, что надо сохранить только текст. Для этого в диалоговом

    окне Сохранить в списке Тип файла следует выбрать вариант Только текст

    (*.txt).

    2.4.2. Форма приложения

    Delphi позволяет объединить компоненты в массив, однако создаваться

    такие компоненты должны не во время разработки формы приложения, а

    динамически - во время работы программы.

    На форме отсутствуют поля вывода альтернативных ответов и

    переключатели выбора правильного ответа. Они будут созданы во время работы

    программы.

    Объявление массива компонентов ничем не отличается от объявления

    обычного массива - указывается имя массива, диапазон изменения индекса и

    тип элементов массива. Ниже приведено объявление массивов компонентов формы

    разрабатываемой программы:

    answer: array[1..N_ANSWERS] of TLabel; // альтернативные ответы

    selector: array[1,.N_ANSWERS+1] of TRadioButton; // кнопки выбора ответа

    Однако, для того чтобы компонент появился в форме, одного объявления

    недостаточно. Компонент - это объект Delphi, и его объявление - это только

    указатель на область памяти, который без наличия объекта ни на что не

    указывает. Создается компонент путем применения метода create к указателю

    на компонент, в нашем случае - к элементу массива.

    Например, инструкции

    answer[l] := TLabel.Create(self);

    answer[1].Parent := Form1;

    создают компонент (Label) и помещают его в форму приложения (Form1).

    После создания компонента программа должна выполнить его настройку,

    т. е. ту работу, которую во время создания формы приложения выполняет

    программист при помощи окна Object Inspector. Под настройкой понимается

    присваивание начальных значений тем свойствам компонента, предопределенные

    значения которых не отвечают предъявляемым требованиям.

    Если компонент должен реагировать на некоторое событие, то нужно

    написать процедуру обработки этого события и поместить объявление созданной

    процедуры в объявление типа формы. Например, объявление типа формы

    разрабатываемой программы должно выглядеть так:

    type

    TForm1 = class(TForm)

    Labels: TLabel; // поле вывода вопроса

    Image1: ТImage; // область вывода иллюстрации

    Panell: TPanel;

    Buttonl: TButton; // кнопка Начать, Дальше, Выход

    procedure FormActivate(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure SelectorClick(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;

    В отличие от других строк, сгенерированных Delphi, объявление

    procedure SelectorClick(Sender: TObject) вставлено в текст программы

    вручную.

    При создании процедуры обработки события для обычного компонента

    (компонента, который добавлен в форму во время разработки формы программы)

    Delphi автоматически генерирует заготовку процедуры обработки события и ее

    объявление. Программист должен написать только инструкции процедуры. В

    случае создания процедуры обработки события для компонента, который

    создается динамически, программист должен полностью написать текст

    процедуры и поместить ее объявление в объявление формы.

    После того как будет написана процедура обработки события, нужно

    связать эту процедуру с конкретным компонентом. Делается это путем

    присвоения имени процедуры обработки свойству, имя которого совпадает с

    именем обрабатываемого события.

    2.4.3. Загрузка файла теста

    Передать имя файла теста программе тестирования можно через параметр

    командной строки путем настройки свойств значка, изображающего программу

    тестирования на рабочем столе или в папке.

    Например, для настройки программы тестирования, значок запуска

    которой находится на рабочем столе, на работу с файлом теста ххх.txt,

    необходимо щелкнуть правой кнопкой мыши на значке программы, из

    появившегося контекстного меню выбрать команду Свойства и в поле Объект,

    после имени файла программы (Project1.exe), ввести имя файла теста

    (xxx.txt), заключив его в двойные кавычки (рис. 3). Текст, находящийся в

    поле Объект вкладки Ярлык диалогового окна Свойства, называется командной

    строкой.

    Программа может получить параметр, указанный в командной строке

    запуска программы, как значение функции ParamStr (n), где n - номер

    параметра. Количество параметров командной строки находится в глобальной

    переменной Paramcount. Для приведенного выше примера командной строки

    запуска программы тестирования значение переменной Paramcount равно 1, а

    функции ParamStr (1) - xxx.txt.

    Ниже приведен фрагмент программы, обеспечивающий прием параметра из

    командной строки:

    if ParamCount = 0 then

    begin

    ShowMessage(' Ошибка! Не обнаружено файла вопросов теста. ');

    goto bye; // аварийное завершение программы

    end;

    FileName:= ParamStr (1); // имя файла - параметр командной строки.

    При запуске программы, использующей параметры командной строки, из

    среды разработки параметры нужно ввести в поле Parameters диалогового окна

    Run Parameters (рис. 4), которое открывается в результате выбора из меню

    Run команды Parameters.

    Рис 3. Настройка программы тестирования

    Рис 4. Диалоговое окно Run Parameters

    2.5. Описание пользовательского интерфейса

    После создания формы в окно редактора кода, в секцию implementation

    следует поместить описание глобальных констант (раздел const) и переменных

    (раздел var). Затем можно приступить к созданию процедур обработки событий.

    Их в программе три:

    1. Обработка события OnActivate для стартовой формы.

    2. Обработка события Onclick для командной кнопки Button1.

    3. Процедура обработки события Onclick - одна, общая для переключателей

    выбора ответа.

    После запуска программы и вывода на экран стартовой формы происходит

    событие onActivate. Процедура FormActivate сначала вызывает процедуру

    ResetForm, которая, присваивая значение False свойству Visible, делает

    невидимыми поля вывода альтернативных ответов и все переключатели.

    Аналогично делается невидимой область иллюстрации. Кроме того, процедура

    устанавливает максимально возможную ширину полей меток альтернативных

    ответов.

    После очистки формы проверяется, указан ли при запуске программы

    параметр - имя текстового файла с вопросами теста.

    Если параметр не указан (значение ParamСount в этом случае равно

    нулю), то присвоением значения свойству Caption метки Label5 выводится

    сообщение: «Не задан файл вопросов теста» и свойству Tag кнопки Buttonl

    присваивается значение 2 (Buttonl.Tag:=2;). Если параметр задан, то

    открывается файл теста.

    Программа тестирования получает имя файла теста как результат функции

    ParamStr (1). Реализация программы предполагает, что если имя файла теста

    задано без указания пути доступа к нему, то файл теста и файлы с

    иллюстрациями находятся в том же каталоге, что и программа тестирования.

    Если путь доступа указан, то файлы с иллюстрациями должны находиться в том

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

    файлы одного теста в одном каталоге.

    Открывается файл теста обычным образом. Сначала обращением к

    процедуре AssignFile имя файла связывается с файловой переменной, а затем

    вызывается инструкция открытия файла для чтения.

    После успешного открытия файла вызывается процедура infо которая

    считывает из файла информацию о тесте и выводит ее в форму присваиванием

    прочитанного текста свойству Caption поля метки Label5.

    Затем вызывается процедура Get Level, которая считывает из файла

    теста информацию об уровнях оценки. Эта процедура заполняет массивы level и

    mes.

    После вывода информационного сообщения программа ждет, когда

    пользователь нажмет кнопку "Начать" (Button1).

    Командная кнопка Button1 используется для:

    . аварийного завершения работы приложения (в случае, если не задано

    имя файла теста);

    . начала тестирования (после прочтения информационного сообщения);

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

    . завершения работы программы (после прочтения результатов

    тестирования).

    Свойство Tag кнопки Button1, используется для идентификации текущего

    состояния формы и выбора действия при нажатии кнопки Button1.

    После вывода информации о тесте значение свойства Tag кнопки Button1

    равно нулю. Поэтому в результате первого нажатия кнопки Button1 выполняется

    та часть программы, которая обеспечивает:

    . вывод первого вопроса;

    . замену текста, находящегося на командной кнопке (свойство caption с

    Начать на Дальше;

    . установку невидимого служебного переключателя RadioButton5 в выбранное

    состояние.

    Кроме того, присваиванием значения False свойству Enabled кнопка

    Button1 делается недоступной, тем самым блокируется переход к следующему

    вопросу до тех пор, пока не будет выбран один из ответов. Значению свойства

    Button1.Tag присваивается единица, тем самым выполняется подготовка к

    обработке следующего нажатия кнопки Button1.

    После выбора ответа и нажатия кнопки Дальше (Button1) (в этом случае

    значение свойства Button1.Tag равно единице) к набранной сумме баллов

    добавляется количество баллов за выбранный ответ. Затем, если конец файла

    не достигнут, вызывается процедура вывода очередного вопроса. Если конец

    файла достигнут, то сначала закрывается файл теста, текст на кнопке Button1

    изменяется на Выход, а значение Button1.Tag устанавливается на 2. Затем

    посредством процедуры itog выводятся результаты тестирования.

    Если значение Button1.Tag равно двум, то применением метода close к

    форме Form1 закрывается окно программы, в результате чего программа

    завершает работу.

    Вывод вопроса и альтернативных ответов выполняет процедура

    voprosToScr. Сначала процедура увеличивает счетчик вопросов vopros и

    присвоением значения свойству формы Caption выводит номер текущего вопроса

    в заголовок окна. Затем процедура читает строки из файла теста до тех пор,

    пока первым символом очередной прочитанной строки не будет точка или

    "обратная наклонная черта".

    После вывода текста вопроса делается проверка, какой символ

    используется в качестве признака конца вопроса. Если обратная наклонная

    черта, что свидетельствует о том, что к вопросу есть иллюстрация, то

    свойству Form1.image1.Tag присваивается единица и из прочитанной строки

    выделяется имя файла иллюстрации.

    Загрузка иллюстрации осуществляется применением метода LoadFromFile к

    свойству image1.Picture. Однако после загрузки иллюстрация на экране не

    появляется, т. к. значение свойства image1.visible равно False.

    После считывания иллюстрации процедура считывает вопросы. После

    обработки последнего вопроса, форма переходит к разделу оценок. Так же на

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

    информации о количестве правильных ответов. Используя процедуру

    Form1.gauge1.progress:=integer мы можем задать необходимое визуальное

    отображение числа баллов за ответы. Для этого нам надо объявить

    переменную, которая бы при подсчёте баллов автоматически отображалась на

    этой компоненте. Этой переменной будет summa. Итак, просто пропишем

    значения суммы (количества баллов) и действия для отображения баллов:

    if summa=10 then

    Form1.gauge1.progress:=100;

    if summa=9 then

    Form1.Gauge1.Progress:=90;

    if summa=8 then

    Form1.gauge1.progress:=80;

    if summa=7 then

    Form1.gauge1.progress:=70;

    if summa=6 then

    Form1.gauge1.progress:=60;

    if summa=5 then

    Form1.gauge1.progress:=50;

    if summa=4 then

    Form1.gauge1.progress:=40;

    if summa=3 then

    Form1.gauge1.progress:=30;

    if summa=2 then

    Form1.gauge1.progress:=20;

    if summa=1 then

    Form1.gauge1.progress:=10;

    if summa=0 then

    Form1.gauge1.progress:=0;

    End;

    Для сохранения результатов тестирования был использован компонент

    Memo, который был связан с компонентом savedialog1. Т.е. при выводе

    результатов тестирования данные из компонента Label5 помещались в Memo и,

    затем, их можно было сохранить, для этого используется следующие операторы:

    savedialog1.Execute; // сохранение данных

    memo1.Lines.SaveToFile(savedialog1.FileName);

    Компонент Memo сделан не визуальным. В конце теста предлагается

    сохранить результат, осуществляется это посредством выбора из главного меню

    вкладки Файл/Сохранить. Общий вид программы можно видеть на рис.5, а полный

    листинг программы в приложении 1.

    [pic]

    Рис. 5. Общий вид программы «Электронный тест»

    2.6. Принцип построения комплекса технических средств

    Для запуска основной части программы, это файл Project1.exe системные

    требования не высоки:

    - процессор I486;

    - 16 Мб оперативной памяти;

    - 1 Мб или меньше видео памяти;

    - Объём дискового пространства не более 5 Мб;

    - Операционная система Windows 9x;

    А для компиляции и отладки самого программного кода системные

    требования возрастают, т.к. необходимо будет устанавливать Delphi 6,

    которой для запуска требуется:

    - Процессор Pentium 166 и выше;

    - 32 Мб оперативной памяти и выше;

    - 4 Мб видео памяти;

    - Объём дискового пространства, в зависимости от установки от 300 и

    более;

    - Windows 98

    Заключение

    В настоящее время компьютеры внедряются во все отрасли человеческой

    деятельности. Они помогают автоматизировать процессы, на выполнение которых

    требуется много времени. В этом курсовом проекте я представил программу для

    тестирования, которая может использоваться в любой сфере.

    Эта программа гораздо лучше, чем другие аналогичные программы,

    благодаря возможности собственноручного редактирования и добавления файла

    вопросов, что даёт определённое преимущество по сравнению с другими

    программами тестирования, при использовании как новых, так и устаревших ПК,

    файл вопросов можно написать в текстовом редакторе, гораздо быстрее, чем

    установить Delphi и редактировать сам программный код.

    Список литературы

    1. Архангельский А.Я. Программирование в Delphi 5. - М.: Нолидж, 2000

    2. Архангельский А.Я. Справочное пособие по Delphi 5. - М.: Нолидж,

    2000.

    3. Баас Р. и другие. Delphi 5. Для пользователя. - Киев, 2000.

    4. Бобровский В.А. Delphi 5. Начальный курс. - СПб., 1998.

    5. Бобровский В.А. Delphi 5. Учебный курс. - СПб., 2000.

    6. Пачек Ксавье. Программирование в Delphi 5. Руководство разработчика. -

    М.: Нолидж, 2000.

    7. Рейсдорф Кент. Delphi 4. Освой самостоятельно. - М.:Бином, 1999.

    8. Свиридов С. и другие. Создание мультимедийных приложений. - М.:

    Нолидж, 2000.

    9. Фаранов В.В. Учебное пособие по Delphi 4. - СПб., 1999.

    10. Эбнер Михаэль. Delphi 5. Руководство разработчика. - Киев, 2000.

    Приложение 1. Листинг программы

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

    Forms,

    Dialogs, ExtCtrls, StdCtrls, Gauges, Menus, jpeg;

    type

    TForm1 = class(TForm)

    Panel1: TPanel;

    Button1: TButton;

    Image1: TImage;

    Label5: TLabel;

    Label1: TLabel;

    Gauge1: TGauge;

    MainMenu1: TMainMenu;

    File1: TMenuItem;

    Save1: TMenuItem;

    exit1: TMenuItem;

    Help2: TMenuItem;

    About1: TMenuItem;

    Contents1: TMenuItem;

    SaveDialog1: TSaveDialog;

    Memo1: TMemo;

    N1: TMenuItem;

    Timer1: TTimer;

    Label2: TLabel;

    procedure FormActivate(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure SelectorClick(Sender: TObject);

    Продолжение приложения 1

    procedure About1Click(Sender: TObject);

    procedure Save1Click(Sender: TObject);

    procedure Contents1Click(Sender: TObject);

    procedure N1Click(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;

    var

    Form1: TForm1;

    x:Real;

    implementation

    uses Unit2, Unit3;

    const

    N_ANSWERS=4;

    N_LEVEL=4;

    var

    answer: array[1..N_ANSWERS] of Tlabel; //альтернативные ответы

    selector: array[1..N_ANSWERS+1] of TRadioButton;// кнопки выбора ответа

    f:TextFile;

    fn:string; // имя файла вопросов

    level:array[1..N_LEVEL] of integer;// сумма, соотв. уровню

    mes:array[1..N_LEVEL] of string; // сообщение, соотв. уровню

    score:array[1..N_ANSWERS] of integer; // очки за выбор ответа

    summa:integer; // набрано очков

    vopros:integer; // номер текущего вопроса

    otv:integer; // номер выбранного ответа

    // установка формы в исходное состояние

    Продолжение приложения 1

    Procedure ResetForm(frm:Tform1);

    var

    i:integer;

    begin

    form1.label2.visible:=false;

    form1.Save1.Visible:=false;

    form1.Gauge1.Visible:=false;

    Form1.Memo1.Visible:=false;

    for i:=1 to N_ANSWERS do

    begin

    answer[i].width:=frm.ClientWidth-answer[i].left-5;

    answer[i].Visible:=false;

    selector[i].Visible:=false;

    end;

    frm.Label5.width:=frm.ClientWidth-frm.Label5.left-5;

    frm.Image1.Visible:=false;

    end;

    // Определение достигнутого уровня

    procedure Itog(summa:integer;frm:TForm1);

    var

    i:integer;

    buf:string;

    begin

    Form1.label2.visible:=true;

    form1.Save1.Visible:=true;

    Form1.Gauge1.Visible:=true;

    Form1.Label5.font.size:=11;

    buf:='';

    str(summa:5,buf);

    Продолжение приложения 1

    buf:='Результаты вашего тестирования'+chr(13)+'Вы ответили правильно

    на:'+buf+' из 10 вопросов';

    i:=1;

    while (summa < level[i]) and (i '.'

    then buf:=buf+s+' ';

    until s[1] ='.';

    Form1.Label5.Caption:=buf;

    end;

    // прочитать информацию об оценках за тест

    Procedure GetLevel(var f:TextFile);

    var

    i:integer;

    buf:string;

    begin // заполняем значения глобальных массивов

    i:=1;

    repeat

    readln(f,buf);

    if buf[1] <> '.' then begin

    mes[i]:=buf;

    readln(f,level[i]);

    i:=i+1;

    end;

    until buf[1]='.';

    Продолжение приложения 1

    end;

    // масштабирование иллюстрации

    Procedure ScalePicture;

    var

    w,h:integer;

    scaleX:real;

    scaleY:real;

    scale:real;

    i:integer;

    begin

    // вычислит макс. допустимые размеры картинки

    w:=Form1.ClientWidth-Form1.Label5.Left;

    h:=Form1.ClientHeight

    - Form1.Panel1.Height -5

    - Form1.Label5.Top

    - Form1.Label5.Height - 5;

    for i:=1 to N_ANSWERS do

    if answer[i].Caption <> ''

    then h:=h-answer[i].Height-5;

    // здесь определена максимально допустимая величина иллюстрации

    // определить масштаб

    if w>Form1.Image1.Picture.Width

    then scaleX:=1

    else scaleX:=w/Form1.Image1.Picture.Width;

    if h>Form1.Image1.Picture.Height

    then scaleY:=1

    else scaleY:=h/Form1.Image1.Picture.Height;

    if scaleY '.') and (s[1] <> '\')

    then buf:=buf+s+' ';

    until (s[1] ='.') or (s[1] ='\');

    frm.Label5.caption:=buf;

    if s[1] ='\'

    then // к вопросу есть иллюстрация

    Продолжение приложения 1

    begin

    frm.Image1.Tag:=1;

    ifn:=copy(s,2,length(s));

    try

    frm.Image1.Picture.LoadFromFile(ifn);

    except

    on E:EFOpenError do

    frm.Tag:=0;

    end // try

    end

    else frm.Image1.Tag:=0;

    // Читаем варианты ответов

    for i:=1 to N_ANSWERS do

    begin

    answer[i].caption:='';

    answer[i].Width:=frm.ClientWidth-Form1.Label5.Left-5;

    end;

    i:=1;

    repeat

    buf:='';

    repeat // читаем текст варианта ответа

    readln(f,s);

    if (s[1]<>'.') and (s[1] <> ',')

    then buf:=buf+s+' ';

    until (s[1]=',')or(s[1]='.');

    // прочитан альтеративный ответ

    val(s[2],score[i],code);

    answer[i].caption:=buf;

    i:=i+1;

    until s[1]='.';

    Продолжение приложения 1

    // здесь прочитана иллюстрация и альтернативные ответы

    if Form1.Image1.Tag =1 // есть иллюстрация ?

    then begin

    ScalePicture;

    Form1.Image1.Visible:=True;

    end;

    // вывод альтернативных ответов

    i:=1;

    while (answer[i].Caption <> '') and (i <= N_ANSWERS) do

    begin

    if i = 1

    then

    if frm.Image1.Tag =1

    then answer[1].Top:=frm.Image1.Top+frm.Image1.Height+5

    else answer[i].top:=frm.Label5.Top+frm.Label5.Height+5

    else

    answer[i].top:=answer[i-1].top+answer[i-1].Height+5;

    selector[i].top:=answer[i].top;

    selector[i].Visible:=true;

    answer[i].Visible:=true;

    i:=i+1;

    end;

    end;

    {$R *.DFM}

    procedure TForm1.FormActivate(Sender: TObject);

    begin

    ResetForm(Form1);

    if ParamCount = 0

    then

    begin

    Продолжение приложения 1

    Label5.font.color:=clRed;

    Label5.Font.Size:=12;

    Label5.caption:='Не обнаружено файла вопросов теста.';

    Button1.Caption:='Выход';

    Button1.Tag:=2;

    Button1.Enabled:=true;

    end

    else begin

    fn:=ParamStr(1);

    assignfile(f,fn);

    {$I-}

    reset(f);

    {I+}

    if IOResult=0 then

    begin

    Info(f,Label5);

    GetLevel(f);

    end;

    summa:=0;

    end;

    end;

    procedure TForm1.Button1Click(Sender: TObject);

    begin

    case Button1.tag of

    0: begin

    Button1.caption:='Далее';

    Button1.tag:=1;

    Selector[N_ANSWERS+1].Checked:=true;

    // вывод первого вопроса

    Button1.Enabled:=false;

    Продолжение приложения 1

    ResetForm(Form1);

    VoprosToScr(f,Form1,vopros)

    end;

    1: begin // вывод остальных вопросов

    summa:=summa+score[otv];

    Selector[N_ANSWERS+1].Checked:=true;

    Button1.Enabled:=false;

    ResetForm(Form1);

    if not eof(f)

    then VoprosToScr(f,Form1,vopros)

    else

    begin

    closefile(f);

    Button1.tag:=2;

    Button1.caption:='Выход';

    Button1.Enabled:=true;

    Itog(summa,Form1);

    end;

    end;

    2: begin // завершение работы

    Form1.Close;

    end;

    end;

    end;

    // щёлчок на кнопке выбора ответа

    Procedure TForm1.SelectorClick(Sender: TObject);

    var

    i:integer;

    begin

    i:=1;

    Продолжение приложения 1

    while Selector[i].Checked = false do

    i:=i+1;

    otv:=i;

    Button1.enabled:=true;

    end;

    procedure TForm1.About1Click(Sender: TObject);

    begin

    AboutBox.ShowModal;

    end;

    procedure TForm1.Save1Click(Sender: TObject);

    begin

    savedialog1.Execute; // сохранение данных

    memo1.Lines.SaveToFile(savedialog1.FileName);

    end;

    procedure TForm1.Contents1Click(Sender: TObject); //Вывод справки

    const

    HELP_TAB = 15;

    INDEX_ACTIVE = 10;

    CONTENTS_ACTIVE = 5;

    Help_CONTENS = 10;

    begin

    Application.HelpCommand(HELP_TAB, INDEX_ACTIVE);

    Application.HelpCommand(HELP_TAB, CONTENTS_ACTIVE);

    end;

    procedure TForm1.N1Click(Sender: TObject);

    begin

    Form1.Close;

    end;

    procedure TForm1.Timer1Timer(Sender: TObject);

    begin

    Продолжение приложения 1

    x:=x+0.1;

    Label2.Left:=60+trunc(60*cos(x));

    Label2.Top:=65-trunc(15*sin(x));

    end;

    end.

    -----------------------

    [pic]

    [pic]

    [pic]

    НАЧАЛО

    Есть файл вопросов?

    Не обнаружено файла вопросов

    ВВЕДЕНИЕ

    ВОПРОС 1

    ВОПРОС 2

    ВОПРОС 3

    ВОПРОС 4

    ВОПРОС 5

    ВОПРОС 6

    ВОПРОС 7

    ВОПРОС 8

    ВОПРОС 9

    ВОПРОС 10

    ВЫВОД РЕЗУЛЬТАТОВ

    ВЫХОД

    СОХРАНИТЬ

    Страницы: 1, 2


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.