Обратим внимание на особенности обработки события разных, но однотипных компонентов одной функцией. Такая необходимость возникает при описании события EditKeyPress, т.к. для каждого из компонент Edit действия, выполняемые при проверке на корректность введенных данных, однотипны. Различия могут возникать, например, при описании действия при нажатии кнопки Enter.
Рассмотрим три компоненты Edit1, Edit2, Edit3. Реакция компонентов на нажатия всех клавиш, за исключением Enter, одинаковая.
Зададим, что событие KeyPress для компонентов Edit2 и Edit3 обрабатывает функция Edit1KeyPress. При этом, чтобы процедура обработки события KeyPress могла определить, в каком поле пользователь нажал клавишу, запишем в свойство Tag каждого компонента Edit целую константу.
Для того, чтобы в событии Edit1KeyPress различать, в каком поле мы находимся в данный момент, создается экземпляр компоненты Edit:
TEdit *Edit
Edit = (TEdit*)Sender,
который в дальнейшем будет наследовать все свойства активного поля, т.е. Edit- > Tag будет равен 1, если мы работаем с Edit1 и т.д.
Описание действий для остальных клавиш остаются без изменений.
Практикум
1. Написать программу «Электроэнергия», вычисляющую сумму оплаты за месяц. Проверять корректность введеных данных с помощью одного события. Также проверять, чтобы текущее показание счетчика было больше, чем предыдущее. Иначе сообщить об ошибки введенных данных. Форма представлена на рисунке.
2. Напишите программу вычисления стоимости исходящего звонка с сотового телефона. Рекомендуемый вид формы приведен на рисунке.
3. Напишите программу, при помощи которой можно вычислить стоимость окна (стеклопакета). Сделать все необходимые проверки. Рекомендуемый вид формы приведен на рисунке.
Строковый тип данных
Тип данных AnsiString используется, чтобы содержать последовательность символов, подобно предложениям. При объявлении переменные типа AnsiString инициализируются пустыми строками. Для AnsiString определены операции отношения ==, !=, >, <, >=, <=. Сравнение производится с учетом регистра.
Для AnsiString определены операции присваивания =, += и операция склеивания строк (конкатенации) +. Определена также операция индексации []. Индексы начинаются с 1 (в строках первый символ имеет индекс 1, массивы начинаются с 0 для первого элемента).
Одним из отличий AnsiString от char то, что не надо изначально задавать количество символов, память для них выделяется динамически. Также есть различия во внутреннем хранении самих строк. Преобразование строки AnsiString в строку (char *) осуществляется функцией c_str() без параметров, возвращающей строку с нулевым символом в конце, содержащую текст той строки AnsiString, к которой она применена.
Например:
…
AnsiString st;
…
fprintf(f, “%s”, st.c_str()); // функции для работы с файлами применимы и в C++
//Builder, но аргументы должны иметь тип char.
Возможно и обратное преобразование строки (char *) в строку AnsiString. Для этого используется функция:
AnsiString(char *S),
которая возвращает строку типа AnsiString, содержащую текст, записанной в строке S, являющейся аргументом функции.
Дата: 2019-04-23, просмотров: 252.