Nie usuwa zadanych kolumn i wierszw w stringrid1- błąd

0

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;
0

znalazełem błąd przy inny niż ostatni wiersz i tam gdzie usuwam kolumnem mam row a powinno byc ale mimo ze to poprawilem to nadal wyskakuje blad

0

Ale jaki jest ten błąd? Może wychodzi poza zakres liczby wierszy lub kolumn? Jeśli kolejność wierszy lub kolumn nie ma znaczenia, to nie musisz ich wszystkich przesuwać. Wystarczy przesunąć ostatni wiersz na miejsce kasowanego i zmniejszyć liczbę wierszy o jeden.

0

na pierwszy rzut oka widze tylko to:

    for i := RowNumber-1 to StringGrid1.RowCount - 1 do

powinno byc RowCount-2 bo potem probujesz sie owolac do [i+1]:
podobnie dla kolumn.

1 użytkowników online, w tym zalogowanych: 0, gości: 1