9. Программирование пользовательского интерфейса

Только чтобы переменная InputForm была доступна (иногда говорят — видима) в файле DiceUnit.cpp, в него надо включить заголовочный файл IDnit.h:

ftinclude "lUnit.h"

Теперь программу можно запустить, и при выборе пункта меню Порог на экране появится новое окно. Однако работать с ним не удобно, потому что оно не диалоговое. Не закрыв это окно, можно переключиться на главное окно программы и продолжить с ним работу, что, конечно, неправильно. Необходимо дождаться, когда человек нажмет одну из кнопок во вспомогательной форме, не позволяя ему до этого вернуться к главному окну (такие окна, не допускающие перехода на другие окна своего приложения, называются модальными. Они больше известны как диалоговые).

Вернитесь в C++Builder и измените метод Show() на ShowModalQ (показать как модальное окно):

InputFo'rm->ShowModal () ; *

Теперь форма InputForm будет работать так, как ей и полагается. Только при работе с подобными диалоговыми окнами обычно не разрешается менять их размеры. Чтобы сделать границы вспомогательного окна неизменяемыми, задайте свойству BorderStyle (Стиль границ) формы InputForm значение bsDialog (Стиль диалогового окна).

А как узнать, на какой кнопке щелкнул пользователь? Метод ShowModalQ возвращает одно из предопределенных значений mrOk или mrCancel. С помощью условного оператора можно проверить, какое значение возвращено:

// если была нажата кнопка ОК if( InputForm->ShowModal() == mrOk )

В логическом блоке условного оператора надо перевести введенное в поле ввода Input текстовое значение в число и проверить его на «разумность величины» (допустим, от 50 до 1000). Это можно сделать с помощью другого условного оператора, как бы вложенного в предыдущий, а нужное число удобно сохранить во временной переменной input:

// если после показа InputForm нажата кнопка- ОК:

if( InputForm->ShowModal() == mrOk ) '{ int input;

// преобразовать введенный пользователем текст в число

164