Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algus0309.DOC
Скачиваний:
15
Добавлен:
31.03.2015
Размер:
629.76 Кб
Скачать

X1,x2,x3:String;

begin

str(RInd:2,x1);

ShowMessage (Rida1);

ShowMessage('Выбранная радиокнопка-'+x1);

if b1 then x2:=' 1 ' else x2:='';

if b2 then x3:=' 2 ' else x3:='';

If b1 or b2 then

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

else

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

end;

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

В предыдущем примере мы создали одно собственное окно для ввода информации. Если выбирать пункт меню 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.Arrange1Click(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;