Листинг подпрограммы
procedure TForm1.FormCreate (Sender: TObject); Begin s:= False; end; procedure TForm1.CheckBox1Click (Sender: TObject); var Index, i, num: Integer; e: Boolean; Begin if s then Exit; {Если программа снова вызовет процедуру обработки, будет выполнен оператор Exit – немедленный выход из процедуры} s:= True; for Index: = 0 to 4 do {Оператор break прерывает выполнение цикла} if Sender = Controls[i] then break; {Определяется, какой флажок был переключен} {Когда выполнение цикла завершается, значение переменной Index соответствует переключенному флажку} {Если значение свойства Checked (Установлен) равно False (Нет), флажок сброшен, а если True (Да) – установлен. Номер флажка в массиве определяется переменной Index} if not (Controls[Index] as TCheckBox).Checked then (Controls[Index] as TCheckBox).Checked:= True {Условие выполнено, если флажок сейчас сброшен, т.е. до щелчка он был установлен} else {Программирование изменения состояния «дополнительных флажков». Текущий флажок уже переключен} Begin num:= Index + 1; {Переключение двух следующих флажков} if Index = 4 then num:= 0; {Изменение состояния нулевого флажка} {Состояние флажка надо поменять на противоположное} (Controls[num] as TCheckBox).Checked:= not (Controls[num] as CheckBox).Checked; {Выполнение проверки на выход за пределы массива} num:= num + 1; if Index = 3 then num:= 0; (Controls[num] as TCheckBox).Checked:= not (Controls[num] as CheckBox).Checked; end; e:= True; {Головоломка решена, если установлены все пять флажков} for i:= 0 to 4 do e:= e and (Controls[i] as TCheckBox).Checked; {После цикла значение останется равным True, если все флажки установлены} if e then {Головоломка решена} for i:= 0 to 4 do Begin (Controls[i] as TCheckBox).Caption:= ‘Победа!’; (Controls[i] as TCheckBox).Enabled:= False; {Отключение флажков} end; s:= False; end;
|