Смекни!
smekni.com

Учебно-методическое пособие для студентов физико-математических специальностей вузов Балашов (стр. 9 из 18)

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

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

Пример 1

При нажатии на кнопку формы появляется диалоговое окно. При нажатии на кнопку Yes содержимое компонента RichEdit1 сохраняется
в файле 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 определяется в компоненте Edit1.
В том случае, если данная функция существует для исходного аргумента, происходят вычисления, в противном случае выдается окно с сообщением об ошибке.

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;

Изменим условие таким образом, что пароль можно вводить только определенное количество раз. Если пароль был введен неправильно, то все приложение закрывается. В этом случае можно рассмотреть событие onCreate для самого компонента 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 и модуль с именем Unit2. Форма AboutBox содержит несколько меток (компонент Label), одно изображение (компонент Image) и кнопку (компонент Button). Воспользовавшись свойством Caption компонента Label, можно изменить выводимую информацию, и свойством Picture компонента Image — выводимую картинку. При нажатии на кнопку форма должна закрываться, следовательно, процедура обработки этого события будет содержать команду Close или AboutBox.Close. В этом случае весь модуль Unit2 будет иметь вид:

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);