Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перестановка строки в TStringGrid в другую позицию

Delphi , Компоненты и Классы , TStringGrid и TDrawGrid



Автор: MBo
WEB-сайт: http://delphibase.endimus.com

{ **** 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;
begin
  with SG do
    if (FromRow in [0..RowCount - 1]) and (ToRow in [0..RowCount - 1]) then
    begin
      TempList := TStringList.Create;
      TempList.Assign(Rows[FromRow]);
      if FromRow > ToRow then
        for i := FromRow downto ToRow + 1 do
          Rows[i].Assign(Rows[i - 1])
      else
        for i := FromRow to ToRow - 1 do
          Rows[i].Assign(Rows[i + 1]);
      Rows[ToRow].Assign(TempList);
      TempList.Free;
    end;
end;

Программный процесс SGMoveRow, который перемещает строку в компоненте TStringGrid из одной позиции в другую, смещая другие строки соответственно.

Вот разбивка кода:

  1. Процедура принимает три параметра:
    • SG: компонент TStringGrid, владеющий строками.
    • FromRow: исходная позиция строки, которую нужно переместить (индекс 0-основанный).
    • ToRow: целевая позиция для строки (индекс 0-основанный).
  2. Процедура проверяет, являются ли оба параметра FromRow и ToRow в пределах допустимого диапазона количества строк в grid.
  3. Если условия выполнены, она создает объект TStringList, чтобы временно хранить содержимое строки, которую нужно переместить (Rows[FromRow]).
  4. Затем процедура смещает строки в grid с помощью цикла:
    • Если FromRow больше ToRow, она итерирует от FromRow до ToRow + 1, присваивая содержимое каждой строки предыдущей строке.
    • Иначе, она итерирует от FromRow до ToRow - 1, присваивая содержимое каждой строки следующей строке.
  5. Наконец, она присваивает содержимое временного объекта TStringList целевой строке (Rows[ToRow]) и освобождает память, выделенную для списка.

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
begin
  SGMoveRow(Grid1, 2, 0); // Переместить строку 2 на верхнюю позицию (позиция 0)
end;

Это код перемещает содержимое строки 2 в Grid1 на верхнюю позицию (0), смещая все другие строки вниз на один шаг.

В качестве альтернативных решений можно использовать простой цикл для обмена содержимого строк без использования временного списка:

procedure SGMoveRow(SG: TStringGrid; FromRow, ToRow: Integer);
var
  i: Integer;
begin
  if (FromRow in [0..RowCount - 1]) and (ToRow in [0..RowCount - 1]) then
  begin
    for i := FromRow to ToRow do
      Rows[i].Assign(Rows[ToRow]);
    Rows[ToRow].Clear;
  end;
end;

Этот код использует цикл для присваивания содержимого каждой строки от FromRow до ToRow (включительно) целевой строке (Rows[ToRow]). Затем он очищает оригинальное содержимое целевой строки. Однако это подход может быть менее эффективным для больших grid или при перемещении строк с большим количеством ячеек.

Процедура SGMoveRow перемещает строку TStringGrid из указанной позиции FromRow в позицию ToRow, сдвигая остальные строки.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TStringGrid и TDrawGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-12 12:48:32/0.0057871341705322/0