Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методическое пособие для самостоятельных работ.doc
Скачиваний:
21
Добавлен:
16.11.2019
Размер:
2.89 Mб
Скачать

If b1 or b2 then

Showmessage ('Выбраны кнопка(и) '+x2+x3)

else

ShowMessage ('Кнопки не выбирались');

end;

4.2.4. Управление окнами

В предыдущем примере мы создали одно собственное окно для ввода информации. Если выбирать пункт меню New Dialog многократно, то будет создано несколько копий данного диалогового окна и каждое из них может содержать свои значения переменных. Кроме того, можно иметь у одного главного окна много разных подчиненных окон и для каждого окна можно открыть несколько копий. Поэтому возникает вопрос: как организовать из главного окна управление подчиненными окнами. Для этого имеются следующие системные переменные:

  • MDIChildCount – количество открытых дочерних окон, если их нет, то 0;

  • ActiveMDIChild – имя активного дочернего окна, его можно использовать при ссылке на него (в качестве имени используется адрес), если активных окон нет, то эта переменная имеет значение nil;

  • MDIChildren – массив, содержащий имена (адреса) всех открытых окон в порядке их открывания, минимальное значение индекса равно нулю.

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

Добавим в горизонтальное меню пункт Window с подпунктами Minimize all (Минимизировать все дочерние окна до пиктограмм), Arrange icons (Упорядочить пиктограммы), Close activ, Close all (закрыть активное или все окна), Cascade (Каскадирование окон), Previous, Next (Переход к предыдущему – следующему окну). Реализация соответствующих команд меню приведенa ниже:

procedure TForm1.Minimizeall1Click(Sender: TObject);

var

I:integer;

begin

{ Минимизация всех окон до пиктограмм}

for i:=MDIChildCount-1 downto 0 do

MDIChildren[i].WindowState:=wsMinimized;

end;

procedure TForm1.Arrange1icons1 Click(Sender: TObject);

begin

{ Упорядочение пиктограмм}

ArrangeIcons;

end;

procedure TForm1.Closeactiv1Click(Sender: TObject);

begin

{Закрытие активного окна}

if ActiveMDIChild<>nil then ActiveMDIChild.Close;

end;

procedure TForm1.Closeall1Click(Sender: TObject);

var

I:integer;

begin

{ Закрытие всех окон }

for i:=MDIChildCount-1 downto 0 do

MDIChildren[i].Close;

end;

procedure TForm1.Cascade1Click(Sender: TObject);

begin

{ Расположение окон “Каскадом” }

Cascade;

end;

procedure TForm1.Previous1Click(Sender: TObject);

begin { Переход к предыдущему окну }

Previous;

end;

procedure TForm1.Next1Click(Sender: TObject);

begin

{ Переход к следующему окну }

Next;

end;

4.2.5. Работа с меню

В MDI–приложениях меню имеется только в главном окне, однако оно может видоизменяться в зависимости от того, какое дочернее окно активно. Если Вы внимательно читали предыдущий материал, то заметили, что горизонтальное меню нашего приложения имеет следующую структуру:

File Windows Help

Создадим еще одно подчиненное окно, приведенное на рис. 4.5. Построим это окно, исходя из пустой формы, т.е. выберем из меню Delphi пункт New Form и не будем пользоваться галереей форм. Свойство FormStyle должно иметь значение fsMDIChild. В саму форму можно включить все имеющиеся в палитрах компонент элементы, кроме меню, использование которого рассмотрим позже. Естественно, в главном окне должен быть пункт меню для открытия этого окна. Пусть этим пунктом будет New Form в меню File. Его реализация:

procedure TForm1.NewForm1Click(Sender: TObject);