
- •Часть 1
- •Implementation
- •Implementation
- •Implementation
- •Часть 1
- •Implementation
- •Implementation
- •Implementation
- •IBplementation
- •Implementation
- •Часть 1
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Interface
- •Часть 1
- •Interface
- •Часть 1 I. 104
- •Implementation
- •Implementation
- •Implementation
- •Часть I
- •Р ис. 1.46. Окно программы Звуки Windows
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Interface
- •Часть 1
- •168 Част
- •Implementation
- •Часть 1
- •Interface uses
- •Implementation
- •Interface
- •Implementation
- •Часть 1
- •Часть 1 I Примеры и задачи
- •Часть 1 I Примеры и задачи
- •Implementation
- •205 Часть
- •Interface
- •Implementation
- •216 Часть 1
- •Поле т ип Размер Информация
- •Часть 1
- •Implementation
- •Interface
- •Implementation
- •Implementation
- •Часть 2 Таблица 2.2 (окончание)
- •252 Часть 2
- •Часть 2 I Delphi — краткий справочник
- •Часть 2
Interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls,
jpeg;
type
TForml = class(TForm) // вопрос Label5: TLabel;
// альтернативные ответы Labell: TLabel;
Рис. 1.71. Форма программы тестирования
Label2: TLabel; Label3: TLabel; Label4: TLabel;
// переключатели выбора ответа RadioButtonl: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton;
Image1: TImage; // область вывода иллюстрации Buttonl: TButton; Panell: TPanel; RadioButton5: TRadioButton;
procedure FormActivate(Sender: TObject); procedure ButtonlClick(Sender: TObject); procedure RadioButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject);
// Эти объявления вставлены сюда вручную procedure Info;
208
ЧастьД Примеры и задачи
209
procedure VoprosToS deprocedure ShowPicture; // выводит иллюстрацию procedure ResetForm; // "очистка" формы перед выводом
// очередного вопроса procedure Itog; // результат тестирования
private
{ Private declarations )
public
! Public declarations )
end;
repeat
readln(f,s) ; if s[l] <>
then buf := buf +s + #13; until s[l] \ Label5.caption:=buf; end;
//\ прочитать информацию об оценках за тест
var
// форма
Forml: TForml;
Implementation
{$R *.DFM} const
N_LEV=4; // четыре уровня оценки
N_ANS=4; // четыре варианта ответов
var
f:TextFile;
fn:string; // имя файла вопросов
// сумма, соответствукщая уровню 1evel:array[1..N_LEV] of integer;
// сообщение, соответствующее уровню mes:array[1..N_LEV] of string;
score:array[1..N_ANS] of integer; // оценка за выбор ответа
summa:integer; // набрано очков
vopros:integer; // номер текущего вопроса
otv:integer; // номер выбранного ответа
// вывод информации о тесте procedure Tforml.Info; var
s,buf:string; begin
readln(f,s);
Forml.Caption := s;
buf: = " ;
procedure GetLevel;
var
i: integer ; buf:string; begin
i:=l; repeat
readln(f,buf);
if buf[1] <> '.' then begin
mes[i]:=buf; // сообщение readln(f,level[i]); // оценка i:=i+l; end;
until buf[1]='.'; end;
// масштабирование иллюстрации Procedure TForml.ShowPicture; var
w,h: integer; // максимально возможные размеры картинки
begin
// вычислить допустимые размеры картинки
v:=ClientWidth-10;
h:=ClientHeight
Panel1.Height -10
Label5.Top
Label5.Height - 10;
// вопросы
if Label1.Caption <> ''
then h:=h-Labell.Height-10; if Label2.Caption <> "
then h:=h-Labe!2.Height-10;
210
Примеры и задачи
211
if Labe13.Caption <>
then h:=h-Label3.Height-10; if Label4.Caption <> ''
then h:=h-Label4.Height-10;
// если размер картинки меньше w на h,
// то она не масштабируется
Imagel.Тор:=Forml.Label5.Top+Label5.Height+10;
if Imagel.Picture.Bitmap.Height > h
then Image1.He i ght:=h
else Imagel.Height:= Imagel.Picture.Height; if Imagel.Picture.Bitmap.Width > w
then Imagel.Width:=w
else Imagel.Width:=Imagel.Picture.Width;
Imagel.Visible := True; end;
// вывести вопрос Procedure TForml.VoprosToScr; var
i:integer;
s,buf:string;
ifn:string; // файл иллюстрации begin
vopros:=vopros+l;
caption:='Bonpoc ' + IntToStr(vopros);
// прочитать вопрос
buf: = ";
repeat
readln(f,s) ;
if (s[l] о '.') and (s[l] <> '\')
then buf:=buf+s+' ' ; until (s[l] ='.') or (s[l] ='V); Label5.caption:=buf; // вывести вопрос
{ Иллюстрацию прочитаем, но выведем только после того, как прочитаем альтернативные ответы и определим максимально возможный размер области формы, который можно использовать для ее вывода.) if s[l] <> 'V
then Imagel.Tag:=0 //к вопросу нет иллюстрации
else // к вопросу есть иллюстрация begin
Imagel.Tag:=l;
ifn:=copy(s,2,length(s));
try
Imagel.Picture.LoadFromFile(ifn); except
on E:EFOpenError do
Imagel.Tag:=0; end; end;
// читаем варианты ответов
i:=l;
repeat
buf:='';
repeat // читаем текст варианта ответ? readln(f,s); if (s[l]<>' . ') and (s[l] <> ', ' )
then buf:=buf+s+' ' ; until (s[l] = \ ')or(s[l] = '.'); // прочитан альтернативный ответ score[i]:= StrToInt(s[2]) ; case i of
1: Labell.caption:=buf; 2: Label2.caption:=buf; 3: Label3.caption:=buf; 4: Label4.caption:=buf; end; i:=i+l;
until s[l] = ' . '; // здесь прочитана иллюстрация и альтерйативные отввты
// текст вопроса уже выведен
if Imagel.Tag =1 // есть иллюстрация к вопросу then ShowPicture;
// вывод альтернативных ответов
if Forml.Labe11.Caption <> "
then begin
if Forml.Imagel.Tag =1
then Labell.Top:=Imagel.Top+Imag^1■Height+10 else Labell.Top:=Label5.Top+Labei5-Hei9ht+10;
212
Част
Примеры и задачи
213
RadioButtonl.Top:=Labell.Top; Labell.visible:=TRUE; RadioButtonl.visible:=TRUE; end;
if Forml.Label2.Caption о '' then begin
Label2.top:=Labell.top+ Labell.height+10; RadioButton2.top:=Label2.top; Label2.visible:=TRUE; RadioButton2.visible:=TRUE; end;
if Forml.Label3.Caption <> '' t±ien begin
Label3.top:=Label2.top+ Label2.height+10;
RadioButton3.top:=Label3.top;
Label3.visible:=TRUE;
RadioButton3.vis ible:=TRUE; end;
if Forml.Label4.Caption <> '.' then begin
Label4.top:=Label3.top+ Label3.height+10; RadioButton4.top:=Label4. top; Label4.visiЫe:=TRUE; RadioButton4.visible:=TRUE; end; end;
Procedure TForml.ResetForm;
begin // сделать невидимыми все метки и переключатели
Labell.Visible:=FALSE; Labell.Caption: = '';
Labell.Width:=ClientWidth-Labell.left-5; RadioButtonl.Visible:=FALSE;
Label2.Visible:=FALSE;
Label2.Caption:='';
Label2.Width:=ClientWidth-Label2.left-5;
RadioButton2.Visible:=FALSE;
Label3.Visible:=FALSE; Label3.Caption:='';
Label3.Width:=ClientWidth-Label3.left-5; RadioButton3.Visible:=FALSE;
Label4.Visible:=FALSE;
Label4.Caption:='';
Label4.Width:=ClientWidth-Label4.left-5;
RadioButton4.Visible:=FALSE;
Label5.Width:=ClientWidth-Label5.left-5;
Imagel.Visible:=FALSE; end;
// определение достигнутого уровня procedure TForml.Itog; var
i:integer; buf:string; begin buf: = "; buf:='Результаты тестирования'+ #13
+'Всего баллов: '+ IntToStr(summa); i:=l; while (summa < level[i]) and (i<N_LEV) do
i:=i+l;
buf:=buf+ #13+mes[i]; Label5.Top:=20; Label5.Caption:=buf; end;
procedure TForml.FormActivate(Sender: TObject); begin
ResetForm;
if ParamCount = 0
then begin
Label5.Caption:= 'He задан файл вопросов теста.'; Buttonl.Caption: = 'Ok' ; Buttonl.Tag:=2; Buttonl.Enabled:=TRUE end else begin
fn := ParamStr(1); assignfile(f,fn);
215
try
reset(f); except
on EFOpenError do -''■•'. begin
ShowMessage('Файл теста '+fn+' не найден.1 Buttonl.Caption:='Ok'; Buttonl.Tag:=2; Buttonl.Enabled:=TRUE; exit ; end; end;
Info; // прочитать и вывести информацию о тесте GetLevel; // прочитать информацию об уровнях оцет
end;
end;
// щелчок на кнопке Buttonl
procedure TForml.ButtonlClick(Sender: TObject); begin
case Buttonl.tag of 0: begin
Buttonl.caption:='Дальше'; Buttonl.tag:=1; RadioButtonb.Checked:=TRUE; // вывод первого вопроса Buttonl.Enabled:=False; ResetForm; VoprosToScr; end;
1: begin // вывод остальных вопросов summa:=summa+score[otv] ; RadioButton5.Checked:=TRUE; Buttonl.Enabled:=False; ResetForm; if not eof(f)
then VoprosToScr else
begin
summa: =sunima+score [otv] ; closefile(f) ;
_ Buttonl.caption:='Ok';
Forml.caption:='Результат'; Buttonl.tag:=2; Buttonl.Enabled:=TRUE; Itog; // вывести результат end; end; 2: begin // завершение работы
Forml.Close; end; end; end;
// Процедура обработки события Onclick
I/ для компонентов RadioButtonl-RadioButton4
procedure TForml.RadioButtonClick(Sender: TObject),
begin
if sender = RadioButtonl then otv:=l
else if sender = RadioButton2 then otv:=2
else if sender = RadioButton3 then otv:=3 else otv:=4; Buttonl.enabled:=TR0E; end;
// обеспечивает настройку компонентов procedure TForml.FormCreate(Sender: TObject);
begin
Imagel.AutoSize := False;
Imagel.Proportional := True;
RadioButtonl.Visible := False; end;
end.