Chce usunac 10 wiersz i 10 kolumne lub 9 wiersz i 9 kolumne z macierzy 10x10 i utworzyc nowa macierz bez usuwanych wierszy i kolumn ale program zwraca błąd.
Natomiast gdy chce usunac 5 wiersz i 2 kolumne to wykonuje to poprawnie. Możecie sprawdzic gdzie jest jakis bład.
//kasowanie danego wiersza kolumna
end;
procedure GridDeleteRow(RowNumber: Integer; StringGrid1,Grid: TstringGrid);
var
i: Integer;
begin
Grid.Row := RowNumber-1;
if (Grid.Row = StringGrid1.RowCount - 1) then
{ Jeżeli ostatni wiersz}
Grid.RowCount := StringGrid1.RowCount - 1 //zostaja wszytkie bez ostatniej
else
begin
{ inny niż ostatni wiersz}
for i := RowNumber-1 to StringGrid1.RowCount - 1 do
Grid.Rows[i] := Grid.Rows[i + 1]; //zastapienie usuwanego wiersza innym
Grid.RowCount := StringGrid1.RowCount - 1;
end;
end;
procedure GridDeleteCol(ColNumber: Integer; StringGrid1,Grid: TstringGrid); //grid nowa tablica
var
i: Integer;
begin
Grid.Col := ColNumber-1;
if (Grid.Col = StringGrid1.ColCount - 1) then
{ Jeżeli ostatni wiersz}
Grid.ColCount := StringGrid1.ColCount - 1 //zostaja wszytkie bez ostatniej
else
begin
{ inny niż ostatni wiersz}
for i := ColNumber-1 to StringGrid1.RowCount - 1 do
Grid.Cols[i] := Grid.Cols[i + 1]; //zastapienie usuwanej kolumny inna itd
Grid.ColCount := StringGrid1.ColCount - 1;
end;
end;
// druga macierz bez danej kolumny i wiersza
procedure TForm1.Button7Click(Sender: TObject);
var i,j :Byte;
w,k,w1,k1:Integer;
begin
w1:=StrToInt(LabeledEdit3.Text); //usuwany wiersz
k1:=StrToInt(LabeledEdit4.Text);
w:=StrToInt(LabeledEdit6.Text); //usuwany wiersz
k:=StrToInt(LabeledEdit7.Text); //usuwana kolumna
for i:=1 to w do
for j:=1 to k do
begin
StringGrid2.Cells[j-1,i-1]:=StringGrid1.Cells[j-1,i-1]; //wartosci 2 sa takie jak 1
end;
begin
GridDeleteRow(w1, stringGrid1,stringGrid2); //wywolanie procedury usuniecia wiersza
GridDeleteCol(k1, stringgrid1,stringGrid2); //wywolanie procedury usuniecia kolumny
end;
end;