![](/user_photo/2706_HbeT2.jpg)
- •Введение
- •Интегрированная среда Delphi. Принципы работы
- •Интегрированная среда Delphi
- •Принципы визуального программирования
- •Val(Edit1.Text,k1,sign);
- •Val(Edit2.Text,k2,sign);
- •Val(MaskEdit1.Text,r1,sig);
- •Val(МaskEdit2.Text,r2,sig);
- •Событийно-управляемые программы
- •Составление программ обработки массивов
- •I :integer;
- •I, j :integer;
- •Вывод на печать
- •Многодокументный и однодокументный интерфейсы (mdi и sdi)
- •Mdi и sdi: сравнение
- •Разработка mdi—приложений
- •Разработка главного и информационного окон
- •Использование стандартных диалоговых окон
- •If OpenDialog1.Execute then
- •Разработка диалогового окна
- •X1,x2,x3:String;
- •If b1 or b2 then
- •Управление окнами
- •I:integer;
- •I:integer;
- •Работа с меню
- •Var tf5:tForm2;
- •Разработка sdi–приложения
- •Простое sdi–приложение
- •I:byte;
- •I,j :byte;
- •I,j :byte;
- •I,j :byte;
- •Управление окнами в sdi–приложениях
- •I :byte;
- •I :byte;
- •I :byte;
- •Реализация алгоритмов решаемых задач на Delphi
- •Традиционный подход реализации алгоритмов на Delphi
Работа с меню
В MDI–приложениях меню имеется только в главном окне, однако оно может видоизменяться в зависимости от того, какое дочернее окно активно. Если Вы внимательно читали предыдущий материал, то заметили, что горизонтальное меню нашего приложения имеет следующую структуру:
File Windows Help
Создадим еще одно подчиненное окно, приведенное на рис. 2.4. Обратите внимание на меню! Построим это окно, исходя из пустой формы, т.е. выберем из меню Delphi пункт New Form и не будем пользоваться галереей форм. Свойство FormStyle должно иметь значение fsMDIChild. В саму форму можно включить все имеющиеся в палитрах компонент элементы, кроме меню, использование которого рассмотрим позже. Естественно, в главном окне должен быть пункт меню для открытия этого окна. Пусть этим пунктом будет New Form в меню File. Его реализация:
procedure TForm1.NewForm1Click(Sender: TObject);
Var tf5:tForm2;
begin
TF5:=TForm2.Create(Self);
TF5.Show;
end;
Рис. 2.4. Взаимодействие окон
В новой форме будут две строки для текста, пункт меню для переноса текста из одной строки в другую и кнопка для закрытия окна. Для обеспечения преобразования меню необходимо:
Активизируем в главной форме Designer Menu (двойным щелчком на его обозначении), выделим пункт меню File и в инспекторе объектов обратим внимание на свойство GroupIndex. По умолчанию оно равно нулю. Это свойство и управляет слиянием меню главного и дочернего окон при открытии последнего. Передвигаемся по пунктам горизонтального меню (только!) и присвоим свойству Group Index следующие значения для пунктов меню:
File 10
Window 20
Help 30
Если предполагается видоизменение меню в зависимости от того, какое дочернее окно открыто, то целесообразно уже на стадии создания меню главного окна присвоить этому свойству его пунктов значения с шагом, например 10.
После этого вернемся к новой форме (Form2). Перенесем на нее компоненту Main Menu и создадим единственный пункт меню Control Text со значением свойства Group Index, равным 25. Реализация приведена ниже:
procedure TForm2.ControlText1Click(Sender: TObject);
begin
Edit2.Text:=Edit1.Text;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action:=caFree;
end;
Назначение остальных двух процедур ясно из предыдущего изложения. Обращаем внимание на то, что свойство GroupIndex влияет только на взаимодействие пунктов горизонтального меню. При необходимости менять выпадающее меню, оно должно создаваться в подчиненном окне заново, включая и неизменяемые пункты.
Разработка sdi–приложения
Простое sdi–приложение
SDI–приложение состоит из нескольких независимых окон. Эти окна могут открываться сразу при запуске приложения или создаваться и уничтожаться динамически в ходе его выполнения. Каждое окно может иметь свое меню. Из-за отсутствия главного окна невозможно управлять расположением и/или поведением окон так просто, как это делалось в MDI–приложениях. Управление окнами придется программировать самому автору приложения. Вид экрана при запуске нашего приложения приведен на рис. 2.5.
Рис. 2.5. SDI–приложение
В приложении будут следующие формы:
Form1 – для ввода размерности массива и управления приложением в целом (форма создается автоматически).
Form2 – для вывода результатов (создается автоматически).
Form3 – для ввода элементов массива (форма создается и уничтожается динамически).
Окно About (создается автоматически).
Примечание. Для Form2 в группе свойств BorderIcons свойство biSystemMenu имеет значение False для предотвращения случайного закрытия этой формы.
Вид экрана при открытой Form3 приведен на рис. 2.6.
Рис. 2.6. Открытие формы Form3
В модуле первой формы необходимы следующие дополнительные объявления:
Const
N=10;
M=10;
var
nn1,mm1 :integer;
mas1 :array[1..N,1..M] of integer;
Автоматически открывается только одна форма – первая по порядку. Для открытия второй формы придется в состав ее модуля включить процедуру:
procedure Tform2.FormCreate(Sender: TObject);
begin
form2.Show;
end;
Для открытия окна “О программе” имеется процедура:
procedure TForm1.N3Click(Sender: TObject);
{Реализуется при выборе “О программе”}
begin
AboutBox.ShowModal;
end;
Примечания:1. При использовании названий пунктов меню на русском языкеDelphi присваивает им именаN1,N2,…которые при желании могут быть изменены (свойство Name).
2. Модальными называют окна, до закрытия которых все действия заблокируются.
Для присвоения начальных значений переменным при запуске приложения служит процедура:
procedure TForm1.FormCreate(Sender: TObject);
begin
nn1:=1; {Количество строк }
mm1:=1; {Количество столбцов}
end;
Реализация пункта меню “Ввод массива”:
procedure TForm1.N1Click(Sender: TObject);
Var
F3:Tform3;
begin
if (Edit1.Text='')or(Edit2.Text='') then
ShowMessage('Необходимо задать размерность массива')
else
begin
nn1:=StrToInt(Edit1.Text);
mm1:=StrToInt(Edit2.Text);
if (nn1<2)or(nn1>10)or(mm1<2)or(mm1>10) then
ShowMessage('Размерность массива должна быть в интервале от 2 до 10')
else
begin
N1.Enabled:=false; {До закрятия этой формы невозможно }
{создать другой ее экземпляр; соответствующий }
{ пункт меню будет «серым» }
f3:=Tform3.Create(Application);
f3.Show;
end
end;
end;
Рассмотрим реализацию модуля третьей формы. При создании формы:
procedure Tform3.FormCreate(Sender: TObject);
{Эта процедура запускается каждый раз при создании формы}
Var