Лабораторная работа 6. Окна сообщений и диалоговые окна
Цель: изучить возможности формирования сообщений и использования диалоговых компонентов. До сих пор нами рассматривались те компоненты, которые не только могут располагаться на форме, но и при выполнении остаются там же. Однако часто возникает необходимость в выдаче каких-либо сообщений или получении определенной информации от пользователя. Для этой цели в языке программирования Delphi имеются некоторые функции, процедуры и компоненты. Процедура ShowMessage ( Msg : String ) формирует и выдает на экран окно с сообщением Msg. Помимо сообщения это окно имеет кнопку Ok, при нажатии на которую закрывается данное окно. Заголовок окна совпадает с названием приложения. При необходимости выдаваемая информация разбивается на строки. Окно, сформированное данной процедурой, так же, как и все окна, работает в модальном режиме, когда блокируется выполнение приложения до закрытия данного окна. Процедура ShowMessagePos ( Msg : String , X : Integer ; Y : Integer ) выдает окно так, чтобы его левый верхний угол находился в точке с абсолютными координатами (X, Y). Пример использования данной процедуры может иметь следующий вид: ShowMessage (‘Текст содержит‘ +IntToStr (RichEdit1.Lines.Count )); Данные процедуры позволяют выдавать на экран сообщение, но Общий вид данной функции: MessageDlg(Msg:String; aType:TmsgDlg Type; aButton:TmsgDlgButton; HelpCtx: LongInt): Word; В переменной Msg задается текст выдаваемого сообщения, в переменной aType тип окна. Всего имеется пять предопределенных окон сообщения, следовательно, параметр aType может иметь пять различных значений, которые перечислены в таблице 2. Таблица 2. Значения параметра aType
Параметр aButton определяет, какие кнопки будет содержать окно сообщения. Это параметр имеет тип множество, и его значение должно быть заключено в квадратные скобки. Для данного параметра могут задаваться значения, перечисленные в таблице 3. Таблица 3. Значения параметра aButton
Параметр HelpCtx определяет текст справки, которая должна выводиться, если пользователь нажмет клавишу [F1]. Оператор вывода на экран окна может работать и как процедура (т. е. не иметь выходных параметров), и как функция. В этом случае результатом является значение, определяющее, какая кнопка была нажата: либо mbNone (т. е. ни одна кнопка не была нажата), либо значение соответствующей клавиши, префиксом mr. Примеры использование функции MessageDlg. Пример 1 При нажатии на кнопку формы появляется диалоговое окно. При нажатии на кнопку Yes содержимое компонента RichEdit 1 сохраняется procedure TForm1.Button1Click(Sender: TObject); begin if MessageDlg('Изменения сохранить ',mtWarning, [mbYes, mbNo, mbCancel],0)=mrYes then RichEdit1.Lines.SaveToFile('D:\Temp\Пример.dat'); end; В данном примере вызывается диалоговое окно предупреждения. Пример 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. В этом случае При работе в Delphi имеется возможность пользоваться ранее созданными модулями и формами, для этого они должны быть помещены в специальное хранилище — репозиторий. Открыть репозиторий можно при помощи команды меню File, New, Other .. . При этом появляется диалоговое окно New Items (новый элемент), в котором можно выбрать необходимый в новом приложении элемент. Все элементы, находящиеся в репозитории, располагаются на различных страницах. Добавить форму в репозиторий можно с помощью пункта меню Project, Add to Repository … В этом случае необходимо выбрать названия для элемента, страницу, на которой он будет располагаться и пиктограмму. Пример 6 Создать проект, имеющий дополнительную форму, на которой находится дополнительная информация об авторских правах и которая Теперь необходимо в проект добавить эту форму. Можно воспользоваться командой 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. Сделайте так, чтобы при нажатии на кнопку сообщение появлялось в левом верхнем углу, при втором нажатии — в правом верхнем и т. д. (сообщения разные: каждое соответствует своему углу).
Популярное: Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (309)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |