Мегаобучалка Главная | О нас | Обратная связь


Лабораторная работа 6. Окна сообщений и диалоговые окна



2020-02-04 309 Обсуждений (0)
Лабораторная работа 6. Окна сообщений и диалоговые окна 0.00 из 5.00 0 оценок




Цель: изучить возможности формирования сообщений и использования диалоговых компонентов.

До сих пор нами рассматривались те компоненты, которые не только могут располагаться на форме, но и при выполнении остаются там же. Однако часто возникает необходимость в выдаче каких-либо сообщений или получении определенной информации от пользователя. Для этой цели в языке программирования Delphi имеются некоторые функции, процедуры и компоненты.

Процедура ShowMessage ( Msg : String ) формирует и выдает на экран окно с сообщением Msg. Помимо сообщения это окно имеет кнопку Ok, при нажатии на которую закрывается данное окно. Заголовок окна совпадает с названием приложения. При необходимости выдаваемая информация разбивается на строки. Окно, сформированное данной процедурой, так же, как и все окна, работает в модальном режиме, когда блокируется выполнение приложения до закрытия данного окна.

Процедура ShowMessagePos ( Msg : String , X : Integer ; Y : Integer ) выдает окно так, чтобы его левый верхний угол находился в точке с абсолютными координатами (X, Y).

Пример использования данной процедуры может иметь следующий вид:

ShowMessage (‘Текст содержит‘ +IntToStr (RichEdit1.Lines.Count ));

Данные процедуры позволяют выдавать на экран сообщение, но
не осуществлять выбор дальнейшего выполнения программы. Для этого служит функция MessageDlg, которая выдает окно с сообщением и набором кнопок.

Общий вид данной функции: MessageDlg(Msg:String; aType:TmsgDlg Type; aButton:TmsgDlgButton; HelpCtx: LongInt): Word;

В переменной Msg задается текст выдаваемого сообщения, в переменной aType тип окна. Всего имеется пять предопределенных окон сообщения, следовательно, параметр aType может иметь пять различных значений, которые перечислены в таблице 2.

Таблица 2. Значения параметра aType

Свойство Описание
mtWarning Окно-предупреждение
mtError Окно-сообщение об ошибке
mtInformation Информационное окно
mtConfirmation Окно-подтверждение
mtCustom Окно-сообщение

Параметр aButton определяет, какие кнопки будет содержать окно сообщения. Это параметр имеет тип множество, и его значение должно быть заключено в квадратные скобки. Для данного параметра могут задаваться значения, перечисленные в таблице 3.


Таблица 3. Значения параметра aButton

Значение Описание
mbYes Кнопка Yes (Да)
MbNo Кнопка No (Нет)
MbOk Кнопка Ok
mbCancel Кнопка Cancel (Отмена)
mbHelp Кнопка Help (Помощь)
mbAbort Кнопка Abort (Прекратить)
mbIgnore Кнопка Ignore (Игнорировать)
mbAll Кнопка All (Все)
mbRetry Кнопка Retry (Продолжить)

Параметр HelpCtx определяет текст справки, которая должна выводиться, если пользователь нажмет клавишу [F1].

Оператор вывода на экран окна может работать и как процедура (т. е. не иметь выходных параметров), и как функция. В этом случае результатом является значение, определяющее, какая кнопка была нажата: либо mbNone (т. е. ни одна кнопка не была нажата), либо значение соответствующей клавиши, префиксом mr.

Примеры использование функции MessageDlg.

Пример 1

При нажатии на кнопку формы появляется диалоговое окно. При нажатии на кнопку Yes содержимое компонента RichEdit 1 сохраняется
в файле D:\Temp\Пример.dat. Код процедуры будет иметь вид:

procedure TForm1.Button1Click(Sender: TObject);

begin

if MessageDlg('Изменения сохранить ',mtWarning, [mbYes, mbNo, mbCancel],0)=mrYes

then RichEdit1.Lines.SaveToFile('D:\Temp\Пример.dat');

end;

В данном примере вызывается диалоговое окно предупреждения.
В том случае, если оно закрывается нажатием кнопки Yes, содержимое компонента записывается в файл.

Пример 2

Вычислить значение f(x) = ln(x)×x c проверкой области значения данной функции. Значение переменной x определяется в компоненте Edit 1.
В том случае, если данная функция существует для исходного аргумента, происходят вычисления, в противном случае выдается окно с сообщением об ошибке.

procedure TForm1.Button1Click(Sender: TObject);

Var x,y:Real;

begin

 x:=StrToFloat(Edit1.Text);

 if x<=0 then MessageDlg('Логарифм данного аргумента не существует', mtError, [mbOk],0)

 else

 begin

 y:=ln(x)*x;

 Edit2.Text:=FloatToStr(y);

 end;

end;

Пример 3

Использовать окна можно и во время создания формы. Например, можно сделать так, чтобы до появления основной формы появлялось диалоговое окно с приглашением.

procedure TForm1.FormCreate(Sender: TObject);

begin

 MessageDlg('Добро пожаловать', mtCustom,[mbYes],0);

end;

Диалоговое окно MessageDlg позволяет определить нажатую кнопку, но не имеет возможности для передачи информации от пользователя
в приложение. Для данной цели существуют еще две функции.

InputBox(Caption,Msg,Default:String):String — функция, которая выводит диалоговое окно с заголовком Caption, сообщением Msg и поле для ввода информации, в котором вначале находится текст, заданный строкой Default, а также двумя кнопками Ok и Cancel. Если диалоговое окно закрывается нажатием кнопки Ok, то функция возвращает набранную строку, в противном случае возвращается строка по умолчанию Default.

InputQuery(Caption,Msg:String, Var Value: String):Boolean — функция, которая выводит подобное диалоговое окно, однако строка ввода по умолчанию пустая. Если диалоговое окно закрывается нажатием кнопки Ok, то функция возвращает значение True и в параметре Value передается введенная строка, в противном случае возвращается значение False.

Пример 4

При нажатии кнопки появляется диалоговое окно, которое будет закрыто только в том случае, если введен пароль и нажата клавиша Ok.

procedure TForm1.Button1Click(Sender: TObject);

const pasword:string=’1111’; {Пароль }

var Value: string;

begin

value:='';

 Repeat

 Until (InputQuery(‘Мое приложение ‘,’Введите пароль’,value)) and (value=pasword);

end;

Изменим условие таким образом, что пароль можно вводить только определенное количество раз. Если пароль был введен неправильно, то все приложение закрывается. В этом случае можно рассмотреть событие on Create для самого компонента Form, в процедуре обработки которого
и будет происходить проверка пароля. В этом случае имеем следующую процедуру:

procedure TForm1.FormCreate(Sender: TObject);

const pasword:string='1111';       {Пароль }

 n=3;      {Количество попыток}

var Value: string;

 i:integer;

begin

value:='';

 i:=0;

 Repeat

 i:=i+1

 Until ((InputQuery('Мое приложение ','Введите пароль',value))

 and (value=pasword)) or (i=n);

 if i=n then form1.Close;

end;

В языке программирования Delphi реализовано несколько компонентов, позволяющие осуществить диалог между пользователем и программой. Эти компоненты находятся на странице Dialogs. Рассмотрим некоторые из них:

OpenDialog позволяют просматривать содержимое внешних запоминающих устройств и выбирать имя файла, который затем можно открыть для работы;

SaveDialog позволяют выбрать имена файлов для сохранения;

OpenPictureDialog SavePictureDialog предназначены для аналогичной работы с файлами, содержащими графическое изображение;

FontDialog предназначен для определения параметров шрифта.

Существуют также диалоговые окна, выбирающие текущий цвет, параметры печати, осуществляющие поиск файлов и т. д. Все компоненты, которые позволяют отображать диалоговые окна, представлены на рисунке 20.

Рассмотрим более подробно компоненты OpenDialog и SaveDialog. Свойство FileName, которое доступно как во время проектирования, так
и во время выполнения содержит имя искомого файла.

Свойство Filter имеет текст фильтров файлов. Он представляет собой любое количество пар последовательных символов. В каждой паре первая часть задает текст фильтра, выдаваемый в диалоговом окне, а вторая часть содержит сам фильтр. При выборе данного свойства в инспекторе объектов появляется диалоговое окно Filter Edit (рис. 21), которое состоит из двух частей: первая имеет имя Filter Name и предназначена для ввода текста фильтра, вторая имеет имя Filter и задает сам фильтр.

Рисунок 20

 

Рисунок 21

 

Для вывода диалогового окна на экран предназначен метод-функция Execute, которое возвращает значение True, если диалоговое окно было закрыто кнопкой Ok, и False — в противном случае.

В диалоговом окне FontDialog с помощью свойства Font можно установить начальное значение шрифта и затем посредством того же свойства определить выбранный в диалоговом окне шрифт.

Пример 5

Создать программу, которая позволяет читать, создавать текстовые файлы в формате RTF, а также менять шрифт.

Для решения данной задачи поместим на форму компонента RichEdit, в котором будем обрабатывать содержимое текстового файла, OpenDialog и SaveDialog для выбора имени файла, компонент FontDialog для выбора шрифта и несколько компонентов Button. Первый из них будет отвечать за чтение файла, второй — за запись файла, третий — за выбор шрифта, следовательно, свойству Name первой кнопки можно придать значение « Open», второй «Save», а третьей « Font». Тогда процедуры обработки нажатий на эти кнопки будут иметь следующий вид:

procedure TForm1.SaveClick(Sender: TObject);

begin

 If SaveDialog1.Execute

 Then RichEdit1.Lines.SaveToFile(SaveDialog1.FileName);

end;

procedure TForm1.OpenClick(Sender: TObject);

begin

 If OpenDialog1.Execute

 Then

 begin

 RichEdit1.Lines.Clear;

 RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);

 end;

end;

procedure TForm1.FontClick(Sender: TObject);

begin

 If FontDialog1.Execute

 Then RichEdit1.Font:=FontDialog1.Font;

end;

Если всех имеющихся возможностей ввода на экран сообщений и ведения диалога не хватает, то в проект может быть добавлена дополнительная форма с помощью пункта меню File New , Form. В этом случае
в проект автоматически добавляется еще одна форма и в редакторе кода появляется третья закладка, которая указывает на модуль данной формы. По умолчанию первая созданная форма является активной и при загрузке приложения именно она появляется на экране. Вторая форма может быть выдана как в модальном виде, используя метод ShowModal, так и не модальном — метод Show. Если форма выдается как модальная, то она блокирует выполнения приложения до своего закрытия.

При работе в Delphi имеется возможность пользоваться ранее созданными модулями и формами, для этого они должны быть помещены в специальное хранилище — репозиторий. Открыть репозиторий можно при помощи команды меню File, New, Other .. . При этом появляется диалоговое окно New Items (новый элемент), в котором можно выбрать необходимый в новом приложении элемент. Все элементы, находящиеся в репозитории, располагаются на различных страницах.

Добавить форму в репозиторий можно с помощью пункта меню Project, Add to Repository … В этом случае необходимо выбрать названия для элемента, страницу, на которой он будет располагаться и пиктограмму.

Пример 6

Создать проект, имеющий дополнительную форму, на которой находится дополнительная информация об авторских правах и которая
вводится при нажатии кнопки на главной форме. Воспользуемся формой, созданной в примере 2.

Теперь необходимо в проект добавить эту форму. Можно воспользоваться командой New Form пункта меню File для добавления чистой формы или выбрать заготовленную форму, имеющуюся в репозитории. Для этого выберем команду New пункта File и на закладке Form выберем компонент с именем About Box. После этого в проекте добавится новая форма с именем AboutBox из класса TAboutBox и модуль с именем Unit 2. Форма AboutBox содержит несколько меток (компонент Label), одно изображение (компонент Image) и кнопку (компонент Button). Воспользовавшись свойством Caption компонента Label, можно изменить выводимую информацию, и свойством Picture компонента Image — выводимую картинку. При нажатии на кнопку форма должна закрываться, следовательно, процедура обработки этого события будет содержать команду Close или AboutBox . Close. В этом случае весь модуль Unit 2 будет иметь вид:

unit Unit2;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

 Buttons, ExtCtrls;

type

 TAboutBox = class(TForm)

 Panel1: TPanel;

 ProgramIcon: TImage;

 ProductName: TLabel;

 Version: TLabel;

 Copyright: TLabel;

 Comments: TLabel;

 OKButton: TButton;

 procedure OKButtonClick(Sender: TObject);

 private

 public

end;

var AboutBox: TAboutBox;

implementation

{$R *.DFM}

procedure TAboutBox.OKButtonClick(Sender: TObject);

begin

 AboutBox.Close; {или просто Close}

end;

end.

Остановимся более подробно на имени процедуры: TAboutBox — это имя класса, в котором происходит событие, OKButton — это имя кнопки, а OKButtonClick — это событие, возникающее при нажатии кнопки.

Для того чтобы из модуля первой формы была доступна вторая форма, необходимо подключить этот модуль, тогда весь список подключаемых модулей будет иметь вид:

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls, Unit2 ;

На главной форме разместим дополнительную кнопку с именем About (свойство Name). Именно при нажатии на эту кнопку выводится дополнительная форма, тогда процедура обработки события будет иметь вид:

procedure TForm1.AboutClick(Sender: TObject);

begin

 AboutBox.Show;

end;

Задания:

1. Проверьте все примеры из лабораторной работы.

2. В примере 3 выведите дополнительную форму в модальном виде.

3. Сделайте так, чтобы при закрытии окна текстового редактора, если данные не были сохранены, выводилось сообщение.

4. Сделайте так, чтобы при нажатии на кнопку сообщение появлялось в левом верхнем углу, при втором нажатии — в правом верхнем и т. д. (сообщения разные: каждое соответствует своему углу).



2020-02-04 309 Обсуждений (0)
Лабораторная работа 6. Окна сообщений и диалоговые окна 0.00 из 5.00 0 оценок









Обсуждение в статье: Лабораторная работа 6. Окна сообщений и диалоговые окна

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (309)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)