unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls, ImgList, Menus,
ExtCtrls;
type
TForm1 = class(TForm)
XMLDocument1: TXMLDocument;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
ImageList1: TImageList;
N1: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
Edit1: TEdit;
Timer1: TTimer;
Edit2: TEdit;
N2: TMenuItem;
N3: TMenuItem;
N7: TMenuItem;
procedure N6Click(Sender: TObject);
procedure OpenClick(Sender: TObject);
function Tokenize(Str: WideString; Delimiter: string): TStringList;
procedure IdType (Vetv: IXMLNode; num: integer; var typeid,kusok:integer);
Procedure TrFa (vopr:IXMLNode);
procedure Match(vopr:IXMLNode);
procedure Multichoice(vopr:IXMLNode);
procedure Multichoice2(vopr:IXMLNode);
Procedure Sort;
procedure finish;
procedure NumTest(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N7Click(Sender: TObject);
private
{ Private declarations }
Procedure ButtonTrFaClick(Sender: TObject);
Procedure ButtonMatchClick(Sender: TObject);
Procedure ButtonMultichoiceClick(Sender: TObject);
Procedure ButtonMultichoice2Click(Sender: TObject);
Procedure ButtonExitOncLick(Sender: TObject);
Procedure PropuskTrFaClick(Sender: TObject);
Procedure PropuskMatchClick(Sender: TObject);
procedure PropuskMultichoiceClick(Sender: TObject);
procedure PropuskMultichoice2Click(Sender: TObject);
public
IDUser:Integer;
{ Public declarations }
end;
Const
// Параметры кнопки Далее
Cap='Далее';
He=33;
Le=520;
Top1=416;
Wi=73;
En=false;
top2=50;
var
Form1: TForm1;
bufer:integer;
RB: Array of TRadioButton;
cb: array of TCheckBox;
m:TMemo;
B:TButton;
prop:TButton;
quest:IXMLNode;
Bal:Integer;
mar: array of TMemo;
combox: array of TComboBox;
nad:TLabel;
GetDirNames : TStringList;
Kolichestvovoprosov:Integer;
otvety: array of Integer;
finito:Boolean;
nadTime:TLabel;
min, sec:Integer;
fin:integer;
quest2:IXMLNode;
NadItog: array of TLabel;
Nazvanie:WideString;
nadpis1,nadpis2:TLabel;
implementation
uses Open, DBModule, Unit2, Result, Vybor, Group, Vybor2;
{$R *.dfm}
// Функция разбивае строки на подстроки по заданному разделителю (номера вопросов)
function TForm1.Tokenize(Str: WideString; Delimiter: string): TStringList;
var
tmpStrList: TStringList;
tmpString, tmpVal: WideString;
DelimPos: LongInt;
begin
tmpStrList := TStringList.Create;
TmpString := Str;
DelimPos := 1;
while DelimPos > 0 do
begin
DelimPos := LastDelimiter(Delimiter, TmpString);
tmpVal := Copy(TmpString, DelimPos + 1, Length(TmpString));
if tmpVal <> '' then
tmpStrList.Add(UpperCase(tmpVal));
Delete(TmpString, DelimPos, Length(TmpString));
end;
Tokenize := tmpStrList;
end;
procedure TForm1.IdType (Vetv: IXMLNode; num: integer; var typeid,kusok:integer);
Var
i,j:Integer;
id:Integer;
tmp: IXMLNode;
begin
tmp:=vetv;
Id:=num;
j:=tmp.ChildNodes.Count-1;
For i:=0 to j do
begin
If tmp.ChildNodes[i].ChildNodes['ID'].Text =inttostr(id)then
begin
kusok:=i;
If tmp.ChildNodes.Nodes[i].ChildNodes['QTYPE'].Text ='truefalse' {верно-неврно} then typeid:=1;
If tmp.ChildNodes.Nodes[i].ChildNodes['QTYPE'].Text = 'match' { на соответствие } then typeid:=2;
If tmp.ChildNodes.Nodes[i].ChildNodes['QTYPE'].Text ='multichoice' { множественный выбор } then typeid:=3;
end;
end;
end;
Procedure TForm1.TrFa (vopr:IXMLNode);
Var
tmp2:IXMLNode;
begin
tmp2:=vopr;
// Создаем окно MEMO
m:=TMemo.Create(nil);
m.Top:=top2;
m.Height:=241;
m.Left:=24;
m.Width:=537;
m.WordWrap:=True;
m.Parent:=Form1;
m.Text:=tmp2.ChildNodes['QUESTIONTEXT'].Text;
// Создаем кнопки RadioButton
SetLength(rb,length(rb)+2);
RB[0]:=TRadioButton.Create(nil);
RB[1]:=TRadioButton.Create(nil);
Rb[0].Caption:='Верно';
Rb[0].Height:=17;
Rb[0].Left:=600;
Rb[0].Top:=104;
Rb[0].Width:=113;
Rb[1].Caption:='Неверно';
Rb[1].Height:=17;
Rb[1].Left:=600;
Rb[1].Top:=144;
Rb[1].Width:=113;
RB[0].Name:='RadBut1';
RB[1].Name:='RadBut2';
Rb[0].Parent:=Form1;
RB[1].Parent:=Form1;
TButton(B).OnClick:=ButtonTrFaClick;
TButton(prop).OnClick:=PropuskTrFaClick;
end;
Procedure TForm1.PropuskTrFaClick(Sender: TObject);
Begin
Edit1.Text:='eeee';
m.Free;
RB[0].Free;
RB[1].Free;
SetLength(rb,0);
If finito=true then finish else Sort;
End;
Procedure TForm1.ButtonTrFaClick(Sender: TObject);
var
verno, buf, i:Integer;
Id:WideString;
Begin
buf:=3;
verno:=9999;
// Запоминаем правельный ответ
Id:=quest.ChildNodes['TRUEFALSE'].ChildNodes['TRUEANSWER'].Text;
For i:=0 to 1 do
If quest.ChildNodes['ANSWERS'].ChildNodes[i].ChildNodes['ID'].Text= Id then
verno:=StrToInt(quest.ChildNodes['ANSWERS'].ChildNodes[i].ChildNodes['FRACTION'].Text);
If RB[0].Checked then buf :=1;
If RB[1].Checked then buf :=0;
If buf = 3 then ShowMessage('Выбирите ответ');
If buf <> 3 then
Begin
m.Free;
RB[0].Free;
RB[1].Free;
SetLength(rb,0);
fin:=fin+1;
If buf=verno then
Begin
Otvety[bufer]:=1;
End
else Otvety[bufer]:=2;
If fin = Kolichestvovoprosov then finish else sort;
End;
end;
procedure TForm1.Match(vopr:IXMLNode);
Var
kolvopr, i, j, dlina:Integer;
maxdlin : Integer;
Begin
// Узнаем кол-во вопросов
kolvopr:=vopr.ChildNodes['MATCHS'].ChildNodes.Count;
For i:=0 to kolvopr-1 do
begin
// Рисуем TMemo
SetLength(mar,length(mar)+1);
mar[i]:=TMemo.Create(nil);
mar[i].Height:=40;
mar[i].Left:=8;
mar[i].Top:=top2+60*i;
mar[i].Width:=345;
mar[i].Parent:=Form1;
// Пишем вопросы
mar[i].Text:=vopr.ChildNodes['MATCHS'].ChildNodes[i].ChildNodes['QUESTIONTEXT'].Text;
// Рисуем ComboBox
SetLength(combox,length(combox)+1);
combox[i]:=TComboBox.Create(nil);
combox[i].Height:=21;
combox[i].Left:=370;
combox[i].Top:=top2+8+60*i;
combox[i].Width:=363;
combox[i].Style:=csDropDownList;
combox[i].Parent:=Form1;
For j:=0 to kolvopr-1 do
Begin
// смотрим длину ответов
dlina:=length(vopr.ChildNodes['MATCHS'].ChildNodes[j].ChildNodes['ANSWERTEXT'].Text);
If maxdlin < dlina then maxdlin:=dlina;
// заносим ответы
combox[i].Items.Add(vopr.ChildNodes['MATCHS'].ChildNodes[j].ChildNodes['ANSWERTEXT'].Text);
End;
// выставляем длину окна списка
combox[i].Width:=10*maxdlin;
End;
If combox[kolvopr-1].Top > 366 then b.Top:=combox[kolvopr-1].Top+50;
If combox[kolvopr-1].Top > 366 then prop.Top:=combox[kolvopr-1].Top+50;
TButton(B).OnClick:=ButtonMatchClick;
TButton(prop).OnClick:=PropuskMatchClick;
If maxdlin < 30 then
For i:=0 to kolvopr-1 do
combox[i].Width:=150;
End;
Procedure TForm1.PropuskMatchClick(Sender: TObject);
Var
bufvopr,i:integer;
Begin
Edit1.Text:='rrrrrrr';
bufvopr:=quest.ChildNodes['MATCHS'].ChildNodes.Count;
for i:=0 to bufvopr-1 do
begin
combox[i].Free;
mar[i].Free;
end;
SetLength(combox,0);
SetLength(mar,0);
prop.Top:=Top1;
b.Top:=Top1;
If finito=true then finish else Sort;
End;
Procedure TForm1.ButtonMatchClick(Sender: TObject);
Var
i, bufotv,bufvopr,j,buf:integer;
Begin
bufvopr:=quest.ChildNodes['MATCHS'].ChildNodes.Count;
bufotv:=0;
buf:=0;
// Проверяем все ли позиции выбраны
For j:=0 to bufvopr-1 do
If combox[j].Items.Strings[combox[j].itemindex] <> '' then buf:= buf+1;
// Проверяем ответы
If buf=bufvopr then
begin
for i:=0 to bufvopr-1 do
Begin
If quest.ChildNodes['MATCHS'].ChildNodes[i].ChildNodes['ANSWERTEXT'].Text = combox[i].Items.Strings[combox[i].itemindex]
Then bufotv:=bufotv+1;
combox[i].Free;
mar[i].Free;
End;
SetLength(combox,0);
SetLength(mar,0);
b.Top:=Top1;
prop.Top:=Top1;
IF bufotv=bufvopr then
begin
Otvety[bufer]:=1
end
else Otvety[bufer]:=2;
fin:=fin+1;
If fin = Kolichestvovoprosov then finish else sort;
End
Else ShowMessage('Выберите ответ');
End;
procedure TForm1.Multichoice(vopr:IXMLNode);
Var
kolotv,i: Integer;
Begin
// Рисуем Memo
m:=TMemo.Create(nil);
m.Top:=top2;
m.Height:=97;
m.Left:=16;
m.Width:=705;
m.WordWrap:=True;
m.Parent:=Form1;
m.Text:=vopr.ChildNodes['QUESTIONTEXT'].Text;
// Узнаем кол-во ответов
kolotv:=vopr.ChildNodes['ANSWERS'].ChildNodes.Count;
// Рисуем Rad.But
For i:=0 to kolotv-1 do
Begin
SetLength(RB,length(RB)+1);
rb[i]:=TRadioButton.Create(nil);
rb[i].WordWrap:=True;
rb[i].Height:=33;
rb[i].Left:=408;
rb[i].Width:=225;
rb[i].Top:=top2+100+i*50;
rb[i].Parent:=Form1;
rb[i].Caption:=vopr.ChildNodes['ANSWERS'].ChildNodes[i].ChildNodes['ANSWER_TEXT'].Text;
If rb[i].Top > 366 then b.Top:=rb[i].Top+50;
If rb[i].Top > 366 then prop.Top:=rb[i].Top+50;
End;
// Делаем надпись
nad:=TLabel.Create(nil);
nad.Height:=24;
nad.Left:=160;
nad.Top:=120;
nad.Font.Size:=14;
nad.Width:=198;
nad.Caption:='Выберите один ответ';
nad.Parent:=Form1;
TButton(B).OnClick:=ButtonMultichoiceClick;
TButton(prop).OnClick:=PropuskMultichoiceClick;
end;
procedure TForm1.PropuskMultichoiceClick(Sender: TObject);
Var
kolotv,i:Integer;
Begin
Edit1.Text:='tttttt';
kolotv:=quest.ChildNodes['ANSWERS'].ChildNodes.Count;
For i:=0 to kolotv-1 do
rb[i].Free;
SetLength(RB,0);
b.Top:=Top1;
prop.Top:=Top1;
TMemo(m).Free;
nad.free;
If finito=true then finish else Sort;
end;
procedure TForm1.ButtonMultichoiceClick(Sender: TObject);
Var
kolotv,i, nomerotv,nomervern,buf: Integer;
begin
buf:=0;
kolotv:=quest.ChildNodes['ANSWERS'].ChildNodes.Count;
For i:=0 to kolotv-1 do
Begin
if rb[i].Checked then
begin
nomerotv:=i;
buf:=1;
end;
If quest.ChildNodes['ANSWERS'].ChildNodes[i].ChildNodes['FRACTION'].Text='1'
Then nomervern:=i;
End;
If buf <> 0 then
begin
For i:=0 to kolotv-1 do
begin
rb[i].Free;
end;
SetLength(RB,0);
b.Top:=Top1;
TMemo(m).Free;
nad.free;
If nomerotv=nomervern then
Begin
Bal:=Bal+1;
Otvety[bufer]:=1;
End
else Otvety[bufer]:=2;
fin:=fin+1;
If fin = Kolichestvovoprosov then finish else sort;
end
else ShowMessage('Выберите ответ');
end;
procedure TForm1.Multichoice2(vopr: IXMLNode);
Var
kolotv, i :integer;
begin
// Рисуем Memo
m:=TMemo.Create(nil);
m.Top:=top2;
m.Height:=97;
m.Left:=16;
m.Width:=705;
m.WordWrap:=True;
m.Parent:=Form1;
m.Text:=vopr.ChildNodes['QUESTIONTEXT'].Text;
// Узнаем кол-во ответов
kolotv:=vopr.ChildNodes['ANSWERS'].ChildNodes.Count;
// Рисуем Rad.But
For i:=0 to kolotv-1 do
Begin
SetLength(cb,length(cb)+1);
cb[i]:=TCheckBox.Create(nil);
cb[i].WordWrap:=True;
cb[i].Height:=33;
cb[i].Left:=408;
cb[i].Width:=225;
cb[i].Top:=top2+100+i*50;
cb[i].Parent:=Form1;
cb[i].Caption:=vopr.ChildNodes['ANSWERS'].ChildNodes[i].ChildNodes['ANSWER_TEXT'].Text;
If cb[i].Top > 366 then b.Top:=cb[i].Top+50;
If cb[i].Top > 366 then prop.Top:=cb[i].Top+50;
End;
// Делаем надпись
nad:=TLabel.Create(nil);
nad.Height:=24;
nad.Left:=100;
nad.Top:=120;
nad.Font.Size:=14;
nad.Width:=198;
nad.Caption:='Выберите хотя бы один ответ';
nad.Parent:=Form1;
TButton(B).OnClick:=ButtonMultichoice2Click;
TButton(prop).OnClick:=PropuskMultichoice2Click;
end;
procedure TForm1.PropuskMultichoice2Click(Sender: TObject);
Var
kolotv,i:Integer;
Begin
Edit1.Text:='tttttt222222';
kolotv:=quest.ChildNodes['ANSWERS'].ChildNodes.Count;
For i:=0 to kolotv-1 do
cb[i].Free;
SetLength(cB,0);
b.Top:=Top1;
prop.Top:=Top1;
TMemo(m).Free;
nad.free;
If finito=true then finish else Sort;
end;
procedure TForm1.ButtonMultichoice2Click(Sender: TObject);
Var
kolotv, buf, i, sovp:Integer;
verno: array[0..200] of Integer;
otv:array[0..200] of Integer;
begin
buf:=0;
sovp:=1;
// Узнаем кол-во ответов
kolotv:=quest.ChildNodes['ANSWERS'].ChildNodes.Count;
// Проверяем выбран ли ответ
For i:=0 to kolotv-1 do
Begin
If cb[i].Checked then
Begin
buf:=1;
otv[i]:=1;
End
else otv[i]:=0;
IF quest.ChildNodes['ANSWERS'].ChildNodes[i].ChildNodes['FRACTION'].Text <> '0'
then verno[i]:=1 else verno[i]:=0;
End;
If buf<>0 then
Begin
TMemo(m).Free;
nad.free;
For i:=0 to kolotv-1 do
Begin
if otv[i]<>verno[i] then sovp:=0;
cb[i].Free;
End;
If sovp=1 then
Begin
Bal:=Bal+1;
Otvety[bufer]:=1;
End
else Otvety[bufer]:=2;
fin:=fin+1;
If fin = Kolichestvovoprosov then finish else sort;
End
Else ShowMessage('Выберите ответ');
end;
procedure TForm1.N6Click(Sender: TObject);
begin
close;
end;
procedure TForm1.OpenClick(Sender: TObject);
var
QString:WideString;
i,j,z: integer;
Q:IXMLNode;
num:Integer;
otv:Boolean;
begin
if FormOpen.ShowModal=mrOk then
If FormVybor2.ShowModal=mrOk then
Begin
XMLDocument1.Active:=true;
XMLDocument1.LoadFromFile(FormOpen.EditObzor.Text);
N4.Enabled:=False;
Timer1.Enabled:=False;
finito:=false;
//Cоздаем кнопку Далее
b:=TButton.Create(nil);
b.Caption:=Cap;
b.Height:=He;
b.Left:=Le;
b.Top:=Top1;
b.Width:=Wi;
b.Parent:=Form1;
b.Name:='ButtonTrFa';
b.Enabled:=True;
// Кол-во тестов
j:=XMLDocument1.DocumentElement.ChildNodes['COURSE'].ChildNodes['MODULES'].ChildNodes.Count;
i:=0;
For z:=0 to j-1 do
If XMLDocument1.DocumentElement.ChildNodes['COURSE'].ChildNodes['MODULES'].ChildNodes[z].ChildNodes['MODTYPE'].Text= 'quiz'then
Begin
SetLength(RB,length(RB)+1);
rb[i]:=TRadioButton.Create(nil);
rb[i].WordWrap:=True;
rb[i].Height:=33;
rb[i].Left:=108;
rb[i].Width:=225;
rb[i].Top:=120+i*50;
rb[i].Parent:=Form1;
rb[i].Caption:=XMLDocument1.DocumentElement.ChildNodes['COURSE'].ChildNodes['MODULES'].ChildNodes[z].ChildNodes['NAME'].Text;
If rb[i].Top > 366 then b.Top:=rb[i].Top+50;
i:=i+1;
End;
b.OnClick:=NumTest;
b.Tag:=i;
End;
End;
Procedure TForm1.Sort;
Var
TypeId:Integer;
nomer, j,i,num :integer;
q:ixmlnode;
Begin
bufer:=bufer+1;
If bufer > Kolichestvovoprosov then bufer:=1;
If (Otvety[bufer] <> 2) and (Otvety[bufer] <> 1) then
Begin
Num:=StrToInt(GetDirNames[bufer]);
//Определяем тип вопроса: TypeId=
//1-верно-неверно
//2-на соответствие
//3-множ.выбор
IdType(quest2,Num,TypeId,nomer);
// IdType(quest2,8,TypeId,nomer);
quest:=quest2.ChildNodes[nomer];
// Если верно-неверно
If TypeId=1 then
Begin
TrFa(quest);
end;
// Если на соответствие
If TypeId=2 then Match(quest);
// Если множ выбор
If TypeId=3 then
Begin
If quest.ChildNodes['MULTICHOICE'].ChildNodes['SINGLE'].Text='1'
Then Multichoice(quest) else Multichoice2(quest);
End;
End
else
Begin
sort;
end;
end;
procedure TForm1.finish;
Var
nadpis1, nadpis2:TLabel;
i:integer;
Verno:integer;
TempString:WideString;
Begin
Timer1.Enabled:=false;
nadTime.free;
prop.Free;
Verno:=0;
nadpis1:=TLabel.Create(nil);
nadpis1.Caption:='Всего вопросов '+IntToStr(Kolichestvovoprosov);
nadpis1.Height:=13;
nadpis1.Left:=8;
nadpis1.Top:=24;
nadpis1.Font.Size:=14;
nadpis1.Parent:=Form1;
SetLength(NadItog,Kolichestvovoprosov);
For i:=1 to Kolichestvovoprosov do
Begin
NadItog[i]:=TLabel.Create(nil);
NadItog[i].Left:=8;
NadItog[i].Top:= 60+40*i;
NadItog[i].Parent:=Form1;
If otvety[i]=1 then
Begin
NadItog[i].Caption:='Вопрос № '+IntToStr(i) + ' - верно';
Verno:=Verno+1;
End
else NadItog[i].Caption:='Вопрос № '+IntToStr(i) + ' - неверно';
End;
If NadItog[Kolichestvovoprosov-1].Top > 366 then b.Top:=NadItog[Kolichestvovoprosov-1].Top+50;
TempString:=IntToStr(Verno)+' из '+ IntToStr(Kolichestvovoprosov);
nadpis2:=TLabel.Create(nil);
nadpis2.Caption:=TempString;
nadpis2.Height:=13;
nadpis2.Left:=8;
nadpis2.Top:=naditog[Kolichestvovoprosov].Top+30;
nadpis2.Font.Size:=14;
nadpis2.Parent:=Form1;
DataBaseModule.ADOTableResult.Insert;
DataBaseModule.ADOTableResultDSDesigneranie.Value:=nazvanie;
DataBaseModule.ADOTableResultDSDesigner2.Value:=TempString;
DataBaseModule.ADOTableResultDSDesigner3.Value:=now;
DataBaseModule.ADOTableResultLinkKey.Value:=IDUser;
FormVybor.ShowModal;
Edit2.Text:=IntToStr(IDUser);
b.Caption:='Выход';
b.OnClick:=ButtonExitOncLick;
End;
procedure TForm1.ButtonExitOncLick(Sender: TObject);
Var i:integer;
begin
For i:=1 to Kolichestvovoprosov do
NadItog[i].Free;
DataBaseModule.ADOConnection1.Connected:=false;
b.Free;
nadpis1.Free;
nadpis2.Free;
Close;
end;
procedure TForm1.NumTest(Sender: TObject);
Var
QString:String;
j,z,i,a:integer;
NumT, temp, temp2:integer;
begin
temp2:=0;
For a:=0 to b.Tag-1 do
If rb[a].Checked then temp2:=1;
If temp2=1 then
Begin
z:=XMLDocument1.DocumentElement.ChildNodes['COURSE'].ChildNodes['MODULES'].ChildNodes.Count;
NumT:=0;
For a:=0 to z-1 do
If XMLDocument1.DocumentElement.ChildNodes['COURSE'].ChildNodes['MODULES'].ChildNodes[a].ChildNodes['MODTYPE'].Text= 'quiz'then
Begin
If rb[i].Checked then NumT:=a;
rb[i].Free;
i:=i+1;
End;
SetLength(RB,0);
QString:=XMLDocument1.DocumentElement.ChildNodes['COURSE'].ChildNodes['MODULES'].ChildNodes[numt].ChildNodes['QUESTIONS'].Text;
Nazvanie:=XMLDocument1.DocumentElement.ChildNodes['COURSE'].ChildNodes['MODULES'].ChildNodes[numt].ChildNodes['NAME'].Text;
// Находим номера вопросов
GetDirNames := Tokenize(QString, ',');
Form1.AutoScroll:=True;
Kolichestvovoprosov:=GetDirNames.Count-1;
bufer:=0;
fin:=0;
Edit1.Text:=IntToStr(Kolichestvovoprosov);
//min:= StrToInt(XMLDocument1.DocumentElement.ChildNodes['COURSE'].ChildNodes['MODULES'].ChildNodes[numt].ChildNodes['TIMELIMIT'].Text);
min:=1;
If min <> 0 then
Begin
Timer1.Enabled:=True;
End;
sec:=1;
nadTime:=TLabel.Create(nil);
nadTime.Left:=10;
nadTime.Top:=5;
nadTime.Font.Size:=14;
nadTime.Parent:=Form1;
nadTime.Enabled:=False;
// Обнуляем счетчик!!!
Bal:=0;
SetLength(RB,0);
prop:=TButton.Create(nil);
prop.Caption:=Cap;
prop.Height:=He;
prop.Left:=420;
prop.Top:=Top1;
prop.Width:=Wi;
prop.Parent:=Form1;
prop.Enabled:=True;
prop.Caption:='Пропустить';
b.Caption:='Ответить';
SetLength(Otvety,Kolichestvovoprosov);
for temp:=1 to Kolichestvovoprosov do
otvety[temp]:=3;
//загружаем нужный фрагмент в переменную и работаем с ней
//так же как с объектом XMLDocument1
quest2:=XMLDocument1.DocumentElement.ChildNodes['COURSE'].ChildNodes['QUESTION_CATEGORIES'].ChildNodes['QUESTION_CATEGORY'].ChildNodes['QUESTIONS'];
sort;
end
else ShowMessage('Выберите тест');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
sec:=sec-1;
if nadTime.Enabled=false then nadTime.Enabled:=true;
if (min = 0) and (sec = 0) then
Begin
finito:=true;
prop.Click;
//Timer1.Enabled:=false;
exit;
End;
if (sec = 0) and (min > 0) then
begin
sec := 60;
min := min - 1;
end;
nadTime.Caption:='осталось '+IntToStr(min)+' : '+IntToStr(sec);
end;
procedure TForm1.N3Click(Sender: TObject);
begin
FormSpisok.ShowModal;
end;
procedure TForm1.N7Click(Sender: TObject);
begin
FormResult.ShowModal;
end;
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.