1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98
1

StringGrid вставка строк со сдвигом

04.02.2015, 11:45. Показов 3237. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как в StringGrid вставить скопированные строки, между двух других, заполненных, так,чтобы содержание нижних строк сдвинулось?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2015, 11:45
Ответы с готовыми решениями:

StringGrid вставка строк из буфера
Добрый день) Есть с таблица StringGrid нужно скопированные строки из одного места таблицы, вставить...

Вставка в матрицу заданного одномерного массива на k-ю строку, со сдвигом следующих строк вниз
вставка в массив заданного одномерного массива на k-ю строку со сдвигом k-й, (k+1)-й,(k+2)-й т.д....

Вставка в массив со сдвигом
Вставить в массив два заданных числа: первое после любого из максимальных элементов, второе —...

Вставка строки со сдвигом
Добрый вечер! Подскажите как сделать так чтобы вставляешь строку, а строга "итого" сдвигается вниз...

4
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
04.02.2015, 12:13 2
1. Увеличить количество строк в гриде на количество скопированных строк
2. Сдвинуть "нижние строки вниз на нужную величину, начиная с самой нижней. Используя свойство Rows
3/ Скопировать в нужное место новые строки
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
04.02.2015, 12:46 3
Кстати, в TStringGrid есть методы для перемещения строк и столбцов, но они объявлены в разделе Protected. Эти методы можно перенести в раздел Public и тогда они станут доступными для использования.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
type
  {В классе TStringGrid есть методы для перемещения строк и столбцов:
  RowMoved() и ColumnMoved(). Но эти методы объявлены в разделе Protected, поэтому
  они доступны для использования только в методах этого класса и его потомков.
  Чтобы сделать эти методы доступными для "внешнего" кода, создадим класс потомок
  и переопределим эти методы в разделе Public.}
 
  TStringGridM = class(TStringGrid)
  public
    procedure RowMoved(FromIndex, ToIndex: Longint); override;
    procedure ColumnMoved(FromIndex, ToIndex: Longint); override;
  end;
 
{ TStringGridM }
 
//Перемещение строк.
procedure TStringGridM.RowMoved(FromIndex, ToIndex: Integer);
begin
  inherited RowMoved(FromIndex, ToIndex); //Вызов унаследованного метода предка.
end;
 
//Перемещение столбцов.
procedure TStringGridM.ColumnMoved(FromIndex, ToIndex: Integer);
begin
  inherited ColumnMoved(FromIndex, ToIndex); //Вызов унаследованного метода предка.
end;
 
{ TForm1 }
 
//Пример вставки новых строк.
procedure TForm1.Button1Click(Sender: TObject);
var
  Sgm : TStringGridM;
begin
  //Предположим, надо вставить 2 новые строки в позицию с индексом 2 (индексация идёт от нуля).
 
  //1. Приводим тип таблицы к типу TStringGridM.
  Sgm := TStringGridM(StringGrid1);
  //2. Добавляем в таблицу 2 новых строки - они появятся в самом низу таблицы.
  Sgm.RowCount := Sgm.RowCount + 2;
  //3. Переносим 2 новые строки в позицию с индексом = 2.
  Sgm.RowMoved(Sgm.RowCount - 1, 2);
  Sgm.RowMoved(Sgm.RowCount - 1, 2);
end;
2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,428
Записей в блоге: 8
04.02.2015, 12:48 4
Mawrat, чтобы "открыть" эти методы - не надо делать подобные "заглушки". Достаточно
Delphi
1
2
type
  TStringGrid = class({Vcl.}Grids.TStringGrid);
перед классом формы, и все защищенные методы будут доступны...
3
1 / 1 / 0
Регистрация: 19.01.2013
Сообщений: 98
04.02.2015, 13:04  [ТС] 5
northener, А как бы это сделать в этом коде

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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;
0
04.02.2015, 13:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2015, 13:04
Помогаю со студенческими работами здесь

Вставка строки со сдвигом вниз
Next i Dim v As Integer Dim pro As Range For i...

Вставка столбца в двумерный массив сдвигом
Помогите написать код... Сколько не пытался, ничего толкового не получилось П.5.18.Правил ...

Вставка элементов в динамический массив со сдвигом
Здравствуйте! Несколько месяцев назад дали задания по динамическим массивам: Дана матрица А и...

Вставка символов в строку со сдвигом последующих
Известно, что в начале строки s находится не более 40 латинских букв, за которыми следуют пробелы....

Вставка символа в массив со сдвигом элемента
Здравствуйте! Как можно вставить елекмент в массив со свдивгом следущего?

Вставка в массив заданного числа на k-е место со сдвигом
2.Вставка в массив заданного числа на k-е место со сдвигом k-го, (k + 1)-го, (k + 2)-го и т. д....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru