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

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.

      1. Управление окнами в 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