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