- •Введение
- •Интегрированная среда 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
I:byte;
begin
StringGrid1.ColCount:=mm1+1;
{Определим количество столбцов в исходном массиве }
StringGrid1.RowCount:=nn1+1;
{Определим количество строк в исходном массиве }
for i:=1 to nn1 do
StringGrid1.Cells[0,i]:=IntToStr(i);
{Вставим номера строк и столбцов }
for i:=1 to mm1 do
Stringgrid1.Cells[i,0]:=IntToStr(i);
end;
Внимание:1. При работе с объектомStringGrid не забудьте изменить его свойствоOptions – goEditing: по умолчанию false, что означает использование массива только для вывода.
При завершении ввода элементов массива и нажатии кнопки Cancel выполняется процедура (без сохранения введенных значений):
procedure TForm3.Button2Click(Sender: TObject);
begin
{Освободим пункт меню для создания новых форм}
Form1.N2.Enabled:=True;
close;
end;
При завершении ввода элементов массива и нажатии кнопки OK выполняется процедура (с сохранением введенных значений в массиве модуля Form1):
procedure TForm3.Button1Click(Sender: TObject);
Var
I,j :byte;
begin
for i:=1 to nn1 do
for j:=1 to mm1 do
if StringGrid1.Cells[j,i]='' then
mas1[i,j]:=0
else
mas1[i,j]:=StrToInt(StringGrid1.Cells[j,i]);
Form1.N2.Enabled:=True;
close;
end;
procedure Tform3.FormClose(Sender: TObject; var Action: TCloseAction);
{Выполняется при закрытии окна; уничтожает ресурс “окно”}
begin
Action:=caFree;
end;
Приведем реализацию модуля вывода результатов Form2. При выборе пункта меню “Найти сумму” выполняется процедура:
procedure TForm2.N1Click(Sender: TObject);
var
I,j :byte;
sum :integer;
begin
if (nn1=1)or(mm1=1) then
ShowMessage ('Массив не задан')
else
begin
Label1.Visible:=True;
Edit1.Visible:=True;
Label2.Visible:=False;
Edit2.Visible:=False;
sum:=0;
for i:=1 to nn1 do
for j:=1 to mm1 do
sum:=sum+mas1[i,j];
edit1.text:=IntToStr(sum);
end;
end;
При выборе пункта меню “Найти произведение” выполняется процедура:
procedure Tform2.N2Click(Sender: TObject);
Var
I,j :byte;
s6 :string;
pr :integer;
begin
if (nn1=1)or(mm1=1) then
ShowMessage('Массив не задан')
else
begin
Label1.Visible:=false;
Edit1.Visible:=false;
Label2.Visible:=true;
Edit2.Visible:=true;
pr:=1;
for i:=1 to nn1 do
for j:=1 to mm1 do
pr:=pr*mas1[i,j];
s6:=IntToStr(pr);
Edit2.Text:=s6;
end;
end;
Примечания:
1. В SDI–приложениях во всех формах значение свойства FormStyleравно fsNormal, это соответствует значению по умолчанию.
2. Не забудьте указать взаимосвязи между модулями разных форм. Если модули разных форм ссылаются на переменные друг друга, то во избежание круговых ссылок (Запрещенных!) один оператор Uses Unit2 включите в разделInterface, а другойUses Unit1 в раздел Implementation.
Управление окнами в sdi–приложениях
В SDI–приложениях, как и в MDI–приложениях, можно динамически создавать много окон как одного, так и разных типов. В MDI–приложениях управление этими окнами (минимизация, расположение и т.д.) выполняется стандартными средствами, вызываемыми из меню в главном окне. При разработке SDI–приложений аналогичные средства придется реализовать самому и включить в меню того окна, из которого выполняется создание окон.
Проиллюстрируем сказанное на простом примере. На рис. 2.7. показаны:
окно, из которого выполняется создание нового окна,
два экземпляра создаваемых окон.
Рис. 2.7. Управление окнами в SDI–приложении
Естественно, что второе окно должно быть исключено из числа автоматически создаваемых при запуске приложения окон.
Меню в центральном окне (будем так называть окно, из которого выполняется управление всей программой) имеет следующий вид:
Создать окно Управление окнами Выход
Каскад
Закрыть все
Минимизировать все
Реализация пунктов меню приведена ниже. В разделе объявлений необходимы следующие дополнения:
Const
Kolwin:Integer=0; {Типизированная константа – количество окон }
Var
Aknad : TList;
TList – это класс самого Delphi, он содержит указатели (адреса) на другие объекты. (понятия “класс” и “объект” рассмотрим подробно в следующей главе). Как и любой другой класс, он содержит ряд свойств и методов, позволяющих включить объекты в список, удалить их и выполнить некоторые другие операции с ними. В нашем случае объект Aknad класса TList будет содержать указатели на динамически создаваемые окна.
При запуске приложения выполняется процедура:
procedure TForm1.FormCreate(Sender: TObject);
begin
Aknad:=TList.Create; {Создается объект класса }
Aknad.Capacity:=10; {Задается объем созданного списка }
end;
Реализация пунктов меню.
Создать окно
procedure TForm1.N1Click(Sender: TObject);
Var
fn : TForm2; {Указатель на создаваемую форму}
begin
if Aknad.Count<Aknad.Capacity then
{Проверим, не превышено ли допустимое количество окон }
begin
fn:=TForm2.Create(Application); {Создаем окно }
Aknad.Add(fn);
{Добавим указатель на созданное окно в список}
fn.Top:=17+kolwin*25;
fn.Left:=310+kolWin*8;
{Определим координаты созданного окна}
fn.Caption:='Форма № '+IntToStr(kolwin);
{Формируем заголовок окна }
kolwin:=kolwin+1; {Увеличим количество окон }
fn.Show; {Покажем окно }
end
else
ShowMessage('Слишком много окон');
end;
Управление окнами – Каскад
procedure TForm1.N4Click(Sender: TObject);
Var