logo
Разработка динамически подключаемых библиотек DLL. Разработка программы проведения тестов

2.2 Описание механизма программы

Механизм основан на работе с массивом и динамическим созданием компонент. Массив, в свою очередь, состоит из записей с некоторыми полями. Для редактора необходимы процедуры удаления вопроса, редактирования и добавления вопроса, а также "проставление компонент" - удаление динамически созданных объектов, и добавление, ссылки на которые имеются в записи. Создание компонент подбирает размеры и расстояния от левого края и верха формы так, чтобы картинка и радиогруппа не закрывали друг друга. В радиогруппе записывается 4 возможных варианта ответа, в свойство Caption - вопрос. При изменениях в массиве вызывается "проставление компонент", которое отражает нововведения.

procedure TForm1.addcomponents;

var i:integer;

Heightt, Widthh: integer;

HH, WW: real;

begin

Form1.Refresh;

if n>0 then

for i:=0 to n-1 do

begin

if(arr[i].im<>nil) then arr[i].im:=nil;

arr[i].im:=TImage.Create(Form1);

arr[i].im.Name:=im+inttostr(i);

arr[i].im.Parent:=Form1;

arr[i].im.Height:=137;

arr[i].im.Width:=161;

arr[i].im.Left:=24;

if arr[i].fpic<> then

arr[i].im.Picture.LoadFromFile(arr[i].fpic)

else

arr[i].im.Picture.LoadFromFile(ref+Nopic.jpg);

arr[i].im.Top:=8+i*(137+120);

Heightt:=137;

Widthh:=209;

arr[i].im.AutoSize := true;

arr[i].im.AutoSize := false;

HH := arr[i].im.Height / Heightt;

WW := arr[i].im.Width / Widthh;

if (HH > WW) then

begin

arr[i].im.Height := trunc(arr[i].im.Height / HH);

arr[i].im.Width := trunc(arr[i].im.Width / HH);

arr[i].im.Stretch := True;

end

else

begin

arr[i].im.Height := trunc(arr[i].im.Height / WW);

arr[i].im.Width := trunc(arr[i].im.Width / WW);

arr[i].im.Stretch := True;

end;

if(arr[i].r<>nil) then arr[i].r:=nil;

arr[i].r:=TRadioGroup.Create(Form1);

arr[i].r.Name:=r+inttostr(i);

arr[i].r.Parent:=Form1;

arr[i].r.Width:=209;

arr[i].r.Height:=105;

arr[i].r.Left:=24;

arr[i].r.Top:=152+i*(137+105+7);

arr[i].r.Items.Add(1)+arr[i].fans1);

arr[i].r.Items.Add(2)+arr[i].fans2);

arr[i].r.Items.Add(3)+arr[i].fans3);

arr[i].r.Items.Add(4)+arr[i].fans4);

arr[i].r.Caption:=inttostr(i+1)+.+arr[i].fquestion;

arr[i].r.ItemIndex:=0;

arr[i].r.Tag:=arr[i].frightanswer;

end;

end;

procedure TForm1.clearcomponents;

var i:integer;y:boolean;

begin

if n>0 then

for i:=0 to n-1 do

begin

arr[i].r:=TRadioGroup.Create(nil);

arr[i].r.Free;

arr[i].im:=TImage.Create(nil);

arr[i].im.Free;

end;

y:=true;

while(y) do

begin

y:=false;

for i:=0 to Form1.ComponentCount-1 do

if Form1.Components[i].GetParentComponent=Form1 then

begin

begin

if (Form1.Components[i] is TRadioGroup) then

begin

Form1.Components[i].Free;

y:=true;

break;

end;

if (Form1.Components[i] is TImage) then

begin

if Form1.Components[i]<>nil then

(Form1.Components[i] as TImage).Picture.Bitmap.FreeImage;

Form1.Components[i].Free;

y:=true;

break;

end;

end;

end;

end;

end;

procedure TForm1.visualcomp;

begin

clearcomponents;

addcomponents;

end;