
-
Функции MessageDlg и ShowMessage
Сначала обсудим функцию MessageDlg (как более содержательную). Она используется для вывода на экран messagebox'а с неким сообщением и несколькими кнопками (Yes, No, OK и т. д.), которое выглядит приблизительно так:
Параметры у этой функции следующие. Первый задает строку, которая будет показываться в нашем сообщении (как и все строки в Delphi, заключаем ее в одинарные кавычки). Второй параметр определяет иконку на нашем messagebox'е и сообщение в его заголовке. Возможные значения для этого параметра
-
mtConfirmation (Подтверждение),
-
mtInformation (Сообщение),
-
mtWarning (Предупреждение),
-
mtError (Ошибка).
Обратите внимание, что при записи любого из перечисленных значений messagebox получит и соответствующий заголовок. Для этого параметра есть еще одно значение - mtCustom. Если использовать его, то никакой иконки в нашем messagebox'е не будет, а заголовок будет совпадать с именем exe-файла.
Третий параметр определяет кнопки, которые будут присутствовать на combobox'е. Вот некоторые из возможных значений:
-
mbYes (кнопка Yes),
-
mbNo (кнопка No),
-
mbCancel (кнопка Cancel),
-
mbOK (кнопка OK).
Если кнопок несколько, то они объединяются посредством квадратных скобок (например, если мы хотим, чтобы присутствовало две кнопки Yes и No, то пишем [mbYes, mbNo]).
Последний, четвертый параметр - это идентификатор контекстной справки.
В качестве результата функции MessageDlg возвращает значение, информирующее о том, что за кнопку пользователь нажал в messagebox'е. Вот несколько возможных значений: mrYes, mrCancel, mrOK. А вот и пример использования функции MessageDlg:
if MessageDlg('Выходим из программы?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then close;
В этом фрагменте у пользователя спрашивается, надо ли выходить из программы, и при положительном ответе программа закрывается.
Теперь обсудим функцию ShowMessage. У неё только один параметр - текст сообщения. Вот пример:
ShowMessage('Сообщение');
Ничего тут особо интересного нет. Отметим, что эта функция используется для вывода простых сообщений, которые не требуют ответа от пользователя (типа Yes, No и т. д.).
-
Первая программа
Теперь начинаем создавать свою первую программу. Она будет складывать два числа, которые пользователь введет в два поля для ввода текстовых значений (компонента TEdit). Ответ будет выводиться в виде диалога сообщений messagebox.
Двойным щелчком левой кнопки мыши на компоненте Edit на вкладке Standard Палитры компонент выбранный элемент поместится на форме с именем Edit1:
Точно также расположите на форме и второй компонент Edit2. Аналогично разместите на форме два компонента Label:
Осталось расположить пятый, последний элемент - Button:
Расположите эти компоненты на форме как показано ниже:
Теперь напишем код программы. Для этого переходим в окно кода, сделав двойной щелчок на кнопке Button1, которую мы только что расположили на форме. В окне кода появится заготовка следующего вида:
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
Теперь осталось записать между операторными скобками Begin..End исполняемые инструкции, которые будут выполняться при каждом щелчке (Click) на кнопку Button1:
MessageDlg(IntToStr(StrToInt(Edit1.Text)+StrToInt(Edit2.Text)),
mtConfirmation,[mbOK],0);
Здесь применены следующая функция:
-
IntToStr() – преобразует целое число в строку;
После этого компилируем и запускаем программу. Для этого нажимаем на F9 или на следующую кнопку:
StrToInt() – преобразует строку в число;
MessageDlg() – выводит диалоговое окно сообщения.
Наша программа запустится. Можете ввести в текстовые окна числа (мы ввели 2 и 11), нажать (кликнуть) на кнопку и получить сообщение MessageBox с результатом сложения:
Теперь предусмотрим тот случай, когда случайно ввели текст, а не число. Для этого воспользуемся окном Events в Инспекторе объектов, где представлены все события выбранной компоненты. Найдем для компоненты Edit1 событие OnKeyPress (нажата клавиша) и дважды щелкнем по пустому окну. Откроется код программы с заголовком процедуры, которая выполняется при наступлении данного события:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
end;
В списке формальных параметров присутствует параметр-переменный Key типа Char. Это как раз и есть та самая нажатая клавиша, возвращаемая по ссылке в эту процедуру. Запишем обработку ситуации нажатия не числового символа:
if not (Key in ['0'..'9']) then begin
beep;
key:=#0;
end;
Здесь используется процедура Beep – подача звукового сигнала, если введен нечисловой символ, и этот символ в переменной Key обнуляется (код символа #0). Теперь выберем в Инспекторе объектов другое поле Edit2 и для события OnKeyPress выберем из списка уже созданную процедуру. Теперь наша программа будет вводить только числа, игнорируя другие символы, даже знак минус.