Здравствуйте, Павел Швецов!
Таким образом можно программно создавать страницы на TPageControl и на новой закладке уже Stringgrid. [code h=200]procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
Tab: TTabSheet;
begin
i:= PageControl1.PageCount;
// Создаем страницу
Tab:= TTabSheet.Create(PageControl1);
with Tab do
begin
Visible:= True;
Caption:= 'Новая страница ' + IntToStr(i + 1);
PageControl:= PageControl1; // Назначаем Tab в Page Control
end;
// Создаем Stringgrid на новой странице
with TStringGrid.Create(Application) do
begin
Parent:= PageControl1.Pages[i]; // Указываем Stringgrid родительскую страницу
Name:= 'StringGrid' + IntToStr(i + 1);
Left:= 0;
Top:= 0;
ColCount:= 2; // Нужное количество столбцов
RowCount:= 2; // Нужное количество строк
Cells[0, 0]:= 'Нов таб' + IntToStr(i + 1); // Заполняем нужные ячейки данными
end;
PageControl1.ActivePage:= PageControl1.Pages[i]; // Переключаемся на новую страницу
end;[/code] А вот исправленный Ваш код с автоматическим созданием закладок [code h=300]procedure TForm1.N7Click(Sender: TObject);
var j, i: integer;
Tab: TTabSheet;
begin
i2:=0; t:=0; u:=0; y:=0; i1:=0;
// отчищаем PageControl1
while PageControl1.PageCount <> 0 do
PageControl1.Pages[0].Destroy;
//запоминаем сколько <=,>= и где что стоит
for i:=1 to m do
begin
if (stringgrid2.cells[n,i]='>=') then
begin
u:=u+1;
l[i]:=-2;
end;
if (stringgrid2.cells[n,i]='<=') then
begin
u:=u+1;
l[i]:=-1;
end;
if (stringgrid2.cells[n,i]='=') then
l[i]:=i;
end;
//заполняю массив а и b
w:=0;
y:=0;
for j:=1 to m do
b[j]:=strtofloat(StringGrid2.Cells[n+1,j]);
for i:=1 to m do
begin
t:=0;
w:=w+1;
for j:=0 to n+u-1 do
begin
t:=t+1;
if (0<=j) and (j<n) then
a[i,t]:=strtofloat(StringGrid2.Cells[j,i]);
if (l[w]=-2)and(j>=n) then
begin
a[i,n+i]:=-1;
end;
if (l[w]=-1)and(j>=n)then
begin
a[i,n+i]:=1;
end;
if (l[w]=0)and(j>=n)then
a[i,n+i]:=0;
end;
end;
//строим первую симплек таблицу
stringgrid1.colcount:=n+m+2;
stringgrid1.rowcount:=m+2;
stringgrid1.fixedcols:=1;
stringgrid1.fixedrows:=1;
form2.stringgrid1.colcount:=n+m+2;
form2.stringgrid1.rowcount:=m+2;
form2.stringgrid1.fixedcols:=1;
form2.stringgrid1.fixedrows:=1;
t:=0; y:=1;
//1-ятаблица
stringgrid1.cells[0,0]:='Базис';
stringgrid1.cells[1,0]:='Свободные члены';
stringgrid1.cells[0,u+1]:='F';
//последняя таблица
form2.stringgrid1.cells[0,0]:='Базис';
form2.stringgrid1.cells[1,0]:='Свободные члены';
form2.stringgrid1.cells[0,u+1]:='F';
//1-я таблица
f[1]:=0;
for i:=2 to n+u+1 do
begin
if (i<=n+1) then
begin
f[i]:=strtofloat(stringgrid3.cells[t,1]);
if f[i]<0 then f[i]:=abs(f[i]);
if f[i]>=0 then f[i]:=-f[i];
t:=t+1;
end
else
f[i]:=0;
end;
for i:=1 to n+u+1 do
begin
y:=y+1;
stringgrid1.cells[y,0]:='X'+inttostr(i);
for j:=1 to m+1 do
begin
if(n+i<=n+u) then stringgrid1.cells[0,y-1]:='X'+inttostr(n+i);
if(n+i<=n+u) then form2.stringgrid1.cells[0,y-1]:='X'+inttostr(n+i);
if (j=m+1)then stringgrid1.cells[i,j]:=floattostr(f[i]);
if (i=1)and(j<=m) then
stringgrid1.cells[i,j]:=floattostr(b[j]);
if (i>=1)and(j<=m) then
stringgrid1.cells[i+1,j]:=floattostr(a[j,i]);
end;
end;
min:=f[1];
for i:=1 to n+u+1 do
begin
if (min>f[i]) then
begin
min:=f[i];
k:=i;
end;
end;
k:=k-1;
for i:=1 to m do
begin
if ((b[i]>0)and (a[i,k]>0)or(b[i]<0)and (a[i,k]<0)) then c[i]:=b[i]/a[i,k];
if ((b[i]=0) and (a[i,k]>0)) then c[i]:=0;
if (a[i,k]=0) then c[i]:=9999;
if ((b[i]=0) and (a[i,k]<0)) then c[i]:=9999;
if ((b[i]>0)and (a[i,k]<0)or(b[i]<0)and (a[i,k]>0)) then c[i]:=9999
end;
v:=0;
for i:=1 to m do
if(c[i]=0)or(c[i]=9999) then v:=v+1;
//цикл по построению новой симплекс таблици
r:=0;
while (min<0)and(r<=10)and(v<m) do
begin
r:=r+1;; i1:=i1+1;
// Создаем страницу
Tab:= TTabSheet.Create(PageControl1);
with Tab do
begin
Visible:= True;
Caption:= 'Таблица ' + IntToStr(i1);
PageControl:= PageControl1; // Назначаем Tab в Page Control
end;
//строим массив оценочных отношений(с)
for i:=1 to m do
begin
if ((b[i]>0)and (a[i,k]>0)or(b[i]<0)and (a[i,k]<0)) then c[i]:=b[i]/a[i,k];
if ((b[i]=0) and (a[i,k]>0)) then c[i]:=0;
if (a[i,k]=0) then c[i]:=9999;
if ((b[i]=0) and (a[i,k]<0)) then c[i]:=9999;
if ((b[i]>0)and (a[i,k]<0)or(b[i]<0)and (a[i,k]>0)) then c[i]:=9999
end;
min:=c[1];
for i:=1 to m do
if (min>=c[i]) then
begin
min:=c[i];
p:=i;
end;
for i:=1 to m do
b1[i]:=b[i];
for i:=1 to m do
for j:=1 to n+u do
a1[i,j]:=a[i,j];
for i:=1 to n+u+1 do
f1[i]:=f[i];
//пересчитываем столбец свободных членов(массив b)
for i:=1 to m do
if (i=p) then
b[i]:=b1[i]/a[p,k]
else
b[i]:=b1[i]-b1[p]*a1[i,k]/a1[p,k];
//пересчитываем целевую функцию(массив F)
f[1]:=f1[1]-b1[p]*f1[k+1]/a1[p,k];
o:=2;
for i:=1 to n+u+1 do
begin
if(i<>k) then
f[o]:=f1[o]-a1[p,i]*f1[k+1]/a1[p,k]
else f[o]:=0;
o:=o+1;
end;
o:=0;
//Пересчитываем матрицу переменных (а)
for i:=1 to m do
for j:=1 to n+u do
begin
if ((i<>p)or(j<>k)) then
a[i,j]:=a1[i,j]-a1[p,j]*a1[i,k]/a1[p,k];
if (i=p) then
a[i,j]:=a1[i,j]/a1[p,k];
if (j=k)and(i<>p) then
a[i,j]:=0;
end;
//Формируем новую таблицу в стрингрид
y:=1;
with TStringGrid.Create(Application) do
begin
Parent:= PageControl1.Pages[i1 - 1]; // Указываем Stringgrid родительскую страницу
Name:= 'StringGrid' + IntToStr(i1);
Left:= 0; Top:= 0;
ColCount:= n+m+2; // Нужное количество столбцов
RowCount:= m+2; // Нужное количество строк
for i:=1 to n+u+1 do
begin
y:=y+1;
form2.stringgrid1.cells[y,0]:='X'+inttostr(i);
for j:=1 to m+1 do
begin
if(j=p) then
cells[0,j]:='X'+inttostr(k);
if (j=m+1)then cells[i,j]:=floattostr(f[i]);
if (i=1)and(j<=m) then
cells[i,j]:=floattostr(b[j]);
if (i>=1)and(j<=m) then
cells[i+1,j]:=floattostr(a[j,i]);
end;
end;
end;
PageControl1.ActivePage:= PageControl1.Pages[0]; // Переключаемся на новую страницу
//ищем min среди целевой функции
min:=f[1];
k:=0;
for i:=1 to n+u+1 do
begin
if (min>=f[i]) then
begin
min:=f[i];
k:=i;
end;
end;
k:=k-1; v:=0;
for i:=1 to m do
if(c[i]=0)or(c[i]=9999) then v:=v+1;
end;
s:='';
z:=0;
if (r<=10)and(v<m) then
for i:=1 to u do
begin
z:=1;
s:=s+floattostr(b[i]);
if i<u then s:=s+',';
end
else
if ((r=0)or(r=11))or(v=m)or(min<0) then
s1:='Функция не имеет оптимального значения';
if (z=1) then label1.caption:='{'+s+'}'
else
label1.caption:=s1;
end;[/code] Правильней делать локальные переменные для циклов, а не как у Вас было, Вы использовали глобальные переменные. Вот весь Ваш
проект.