postMessage(Window, WM_SYSCOMMAND, SC_MINIMIZE, 0);
Возможно, дотошный читатель обратит внимание на то, как я громоздко провожу проверку на правильность заполнения полей редактирования в модуле, реализующем диалоговое окно "Параметры системы", каждое поле редактирования контролируется отдельно.
Замечание
Здесь я сознательно не использовал операторы Delphi as и is, упрощающие и сокращающие код, поскольку их использование заметно замедляет работу приложения
Серьезным упреком к процедуре проверки может быть то, что для перевода вещественных чисел в строку и наоборот используются процедуры val и str, не учитывающие, какой разделитель дробной части установлен в системе, поэтому могут возникнуть неудобства, если пользователь сильно привык к запятой в качестве такого разделителя
При проверке содержимого каждого поля в случае допущенной пользователем ошибки применяется "тихая" исключительная ситуация - стандартный прием:
If edtFAmbientR.Text = '' then raise EAbort.Create ('Заполните все поля1');
Val (edtFAmbientR.Text, dW, iW) ;
If (iW<>0) then raise EAbort.Create ('Числовые данные введены с ошибкой1');
Обращение к процедуре проверки осуществляется в защищенном блоке, при возникновении ошибки класса EAbort пользователь получает соответствующую информацию, и попытка применить введенные значения прекращается.
try
Forml.Proverka except
on E : EAbort do With Forml do begin
TabbedNotebookl.Visible := False;
btnApply.Visible := False;
btnCancel.Visible := False;
btnOK.Visible := False;
btnError.Visible := True;
IblError.Caption := E.Message;
IblError.Visible := True;
Exit;
// ошибка, данные применять нельзя
end;// with
end; // try
Разобранную программу можно использовать в качестве шаблона для проектирования других приложений подобного типа. Подкаталог Ех05 содержит еще один проект по визуализации автоматов, также схематично демонстрирующий работу реальной установки
(Рисунок 5.6).