Итак, в этой статье хотел бы поговорить как поменять строки местами в TStringGrid. Задача очень простая, но может кому-то для «лабораторок» пригодится, так многим эта задача не будет совсем тяжелой. Давайте посмотрим так, TStringGrid - этот та же самая матрица, следовательно этот метод можно применять и для нашей матрицы. Сейчас мы это все пройдем просто визуально. Смысл всего это — то, что мы работаем с определенной строкой, то есть мы знаем какие строки мы будем между собой менять. Сейчас я просто поменяю строки 1 со 2-й местами, ну а в следующей статье расскажу как поменять строку с максимальным элементом матрицы со строкой с минимальным элементом матрицы (что также не сложно). У меня на форме следующие компоненты
- TStringGrid
- TButton
Можете установить на форму еще TEdit - для изменения размера массива, но думаю не стоит, не в этом сейчас смысл.
Также не забудьте в свойстве TStringGrid - Options-goEditing - поставить в значение True, иначе Вы не сможете заполнить TStringGrid.
Давайте вернемся к нашей задачи, у нас есть две строки — 1 и 2 строка, которые необходимо поменять между собой. Если мы начнем менять, то значения одной строки будут заменяться, то есть стираться, удаляться говорите как думаете, а если они удаляются, то мы не сможем поставить эти значения в другую строку, следовательно замена не произойдет, просто получиться 2-е одинаковые у нас строки. Для этого нам нужен «посредник«, то есть дополнительный массив, одномерный массив. В него мы запишем все значения первой строки, затем первой строке присвоим значения второй строки, а уже второй строке мы присвоим значения нашего «посредника«, то есть нашего дополнительного массива (а у него записаны значения первой строки, следовательно замена сработает). На Delphi это будет выглядеть примерно так
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k:integer;
a:array[1..100] of integer;
begin
try
k:=1;
for i:=0 to StringGrid1.ColCount-1 do
begin
a[k]:=StrToInt(StringGrid1.Cells[i,0]);
inc(k);
end;
for i:=0 to StringGrid1.ColCount-1 do
begin
StringGrid1.Cells[i,0]:=StringGrid1.Cells[i,1];
StringGrid1.Cells[i,1]:=IntToStr(a[i+1]);
end;
except
on e:Exception do
end;
end;
Как видите все, что я описал выше словами реализовал здесь, как видите ничего сложного, жду Вас в следующей статье по данному вопросу.