{ **** UBPFD *********** by delphibase.endimus.com ****
>> Перестановка строки в StringGrid в другую позицию
Передвигает строку StringGrid из позиции FromRow в позицию ToRow, сдвигая остальные
Зависимости: Grids
Автор: Борис Новгородов (MBo), mbo@mail.ru, Новосибирск
Copyright: MBo
Дата: 28 апреля 2002 г.
***************************************************** }procedure SGMoveRow(SG: TStringGrid; FromRow, ToRow: Integer);
var
TempList: TStringList;
i: Integer;
beginwith SG doif (FromRow in [0..RowCount - 1]) and (ToRow in [0..RowCount - 1]) thenbegin
TempList := TStringList.Create;
TempList.Assign(Rows[FromRow]);
if FromRow > ToRow thenfor i := FromRow downto ToRow + 1 do
Rows[i].Assign(Rows[i - 1])
elsefor i := FromRow to ToRow - 1 do
Rows[i].Assign(Rows[i + 1]);
Rows[ToRow].Assign(TempList);
TempList.Free;
end;
end;
Программный процесс SGMoveRow, который перемещает строку в компоненте TStringGrid из одной позиции в другую, смещая другие строки соответственно.
Вот разбивка кода:
Процедура принимает три параметра:
SG: компонент TStringGrid, владеющий строками.
FromRow: исходная позиция строки, которую нужно переместить (индекс 0-основанный).
ToRow: целевая позиция для строки (индекс 0-основанный).
Процедура проверяет, являются ли оба параметра FromRow и ToRow в пределах допустимого диапазона количества строк в grid.
Если условия выполнены, она создает объект TStringList, чтобы временно хранить содержимое строки, которую нужно переместить (Rows[FromRow]).
Затем процедура смещает строки в grid с помощью цикла:
Если FromRow больше ToRow, она итерирует от FromRow до ToRow + 1, присваивая содержимое каждой строки предыдущей строке.
Иначе, она итерирует от FromRow до ToRow - 1, присваивая содержимое каждой строки следующей строке.
Наконец, она присваивает содержимое временного объекта TStringList целевой строке (Rows[ToRow]) и освобождает память, выделенную для списка.
Пример использования:
procedureTForm1.Button1Click(Sender:TObject);beginSGMoveRow(Grid1,2,0);// Переместить строку 2 на верхнюю позицию (позиция 0)end;
Это код перемещает содержимое строки 2 в Grid1 на верхнюю позицию (0), смещая все другие строки вниз на один шаг.
В качестве альтернативных решений можно использовать простой цикл для обмена содержимого строк без использования временного списка:
Этот код использует цикл для присваивания содержимого каждой строки от FromRow до ToRow (включительно) целевой строке (Rows[ToRow]). Затем он очищает оригинальное содержимое целевой строки. Однако это подход может быть менее эффективным для больших grid или при перемещении строк с большим количеством ячеек.
Процедура SGMoveRow перемещает строку TStringGrid из указанной позиции FromRow в позицию ToRow, сдвигая остальные строки.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS