Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 06.02.2015, 16:47   #1
limon77
Новичок
Джуниор
 
Регистрация: 15.12.2014
Сообщений: 1
По умолчанию StringGrid вставка строк со сдвигом

Как в StringGrid вставить скопированные строки, между двух других, заполненных, так,чтобы содержание нижних строк сдвинулось?

Вот код вставки:

Код:
procedure TFormRedaktor.SgPasteBuf(var Sg: TStringGrid);
var
  St,Ss,S: String;                     //Строки буфера, строки и поля
  Sel: TGridRect;                      //Выделяемая область
  L,R,C: word;                         //Row-строка, Col-колонка
begin
 
  St:=ClipBoard.AsText;                //Буфер обмена в строку
  Sel:=Sg.Selection;                   //Получили выделенную область
  L:=Sel.Left;                         //Крайний слева
  R:=Sel.Top;                          //Крайний сверху
  R:=R-1;                              //Приподнялись выше
 
  while Pos(#13,St)>0 do               //Пока не достигли конца строки
  begin
    R:=R+1;                            //Спустились ниже
    C:=L-1;                            //Сдвинулись левее
    Ss:=Copy(St,1,Pos(#13,St));        //Скопировали строку
    Delete(Ss,Pos(#13,Ss),1);          //Удалили символ конца строки
 
    while Pos(#9,Ss)>0 do              //Пока не дошли до разделителя
    begin
      C:=C+1;                          //Сдвинуться вправо
      S:=Copy(Ss,1,Pos(#9,Ss)-1);      //Скопировали значение поля
      //Если мы в пределах таблицы, то вставлять в ячейки
      if (C<=Sg.ColCount-1) and (R<=Sg.RowCount-1) then Sg.Cells[C,R]:=S;
      Delete(Ss,1,Pos(#9,Ss));         //Удалил из общей строки
    end;                               //Дописали последнюю ячейку
    if (C<=Sg.ColCount-1) and (R<=Sg.RowCount-1) then
      begin
      Sg.Cells[C+1,R]:=Ss;
      StringGrid1.RowCount:=StringGrid1.RowCount+1;
      end;
 
    Delete(St,1,Pos(#13,St));                 //Удалили строку из буфера
    if Copy(St,1,1)=#10 then Delete(St,1,1);  //Удалили последний символ
    if St < StringGrid1.RowCount then StringGrid1.RowCount+1;
 
 
  end;
end;
limon77 вне форума   Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid и Вставка в БД incoming Общие вопросы Delphi 6 28.07.2013 14:24
Удаление строк со сдвигом вверх Lyrical Microsoft Office Excel 10 04.09.2012 15:02
StringGrid: вставка картинок Grass-snake Общие вопросы Delphi 2 25.10.2011 15:00
Вставка столбца в StringGrid artemavd Общие вопросы Delphi 8 29.07.2008 17:48
Вставка в stringgrid combobox-а. Иван1 Компоненты Delphi 3 25.05.2007 09:12