Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2010, 12:02   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Изменение записей в StringGrid

Доброе утро! Возникла следующая задача: имееется StrinGrid с некоторыми записями. Необходимо по нажатию на кнопку выполнить некоторые манипуляции над ними, чтобы получилось как в таблице слева, т.е. к каждому значению в таблице должно в конце приписаться "_1", "_2", "_3". При этом переставляться сами записи не должны, порядок должен сохраниться. Если приписать только "_1", то с этим у меня проблем нет. Это я могу сделать так:
Код:
procedure TMainForm.Button2Click(Sender: TObject);
var
 row,col: integer;
begin
 for row:=0 to MainForm.RzStringGrid1.RowCount - 1 do
 begin
  MainForm.RzStringGrid1.Cells[0,row]:=MainForm.RzStringGrid1.Cells[0,row] + '_1';
 end;
end;
Но, а вот как быть с "_2" и "_3"? Подскажите пожалуйста. То, что должно получиться во вложении.
http://i012.radikal.ru/1011/39/9ab0f75dece4.png
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.11.2010, 12:12   #2
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

делаем так:


Код:
procedure TMainForm.Button2Click(Sender: TObject);
var
 row,col: integer;
begin 
 for row:=0 to MainForm.RzStringGrid1.RowCount  - 1 do
 begin
  MainForm.RzStringGrid1.Cells[0,row]:=MainForm.RzStringGrid1.Cells[0,row] + '_' + inttostr(row+1);
 end;
end;
ссори, не посмотрел вложение =)
тогда вот так:

Код:
procedure TMainForm.Button2Click(Sender: TObject);
var
 row,col,n: integer;
begin 
 n:=1;
 for row:=0 to MainForm.RzStringGrid1.RowCount  - 1 do
 begin
  MainForm.RzStringGrid1.Cells[0,row]:=MainForm.RzStringGrid1.Cells[0,row] + '_' + inttostr(n);
  n:=n+1;
  if n>3 then n:=1;
 end;
end;

Последний раз редактировалось xrob; 15.11.2010 в 12:15.
xrob вне форума Ответить с цитированием
Старый 15.11.2010, 13:04   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Не, немного не так . Обратите внимание таблицу, которая у меня должна получиться в первом вложении которая). Ваш код сейча делает так:
Изображения
Тип файла: png Безымянный2.png (3.3 Кб, 69 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.11.2010, 13:16   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TMainForm.Button2Click(Sender: TObject);
var
 sl:TStringList;
 row,col: integer;
begin
 sl:=TStringList.Create;
 with MainForm.RzStringGrid1 do begin
  for row:=0 to RowCount - 1 do 
   for col:=0 to Чему-там do
    sl.add(Cells[0,row] + '_'+IntToStr(col));
 end;
...
А вот теперь из sl переноси в грид.
Смысл понятен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2010, 14:02   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
for col:=0 to Чему-там do
- вот это строчка не понятна . Что она дает?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.11.2010, 15:18   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Это количество индексов. Можно ещё так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j, st, fin, counts: integer;
begin
  st := 2;    //номер первой строки над которой издеваемся
  fin := 4;   //номер последней строки
  counts := 3;//количество добавляемых индексов
  for i := st to fin do for j := 1 to counts do
    stringgrid1.Cells[2, st + (i - st) * counts + j - 1] :=
      stringgrid1.Cells[1, i] + '_' + inttostr(j);
end;
красным выделены столбцы с которыми работаем
eoln вне форума Ответить с цитированием
Старый 15.11.2010, 16:14   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

eoln, ваш код как-то загадочно работает, не так). После "_" должно быть только одно число и все. Вот так отработал Ваш код:
Изображения
Тип файла: png Безымянный3.png (5.1 Кб, 61 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.11.2010, 17:10   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
artemavd
Попробуй мой пример. Я просто не знаю до какого у тебя цикл должен работать вот и написал слово "Чет-там" )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2010, 17:27   #9
Prisioner
Google user
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 27
По умолчанию

Попробуй вот такое
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j, n, rcount: integer;
  s: string;
  sl: TStringList;
begin
n:=3; //Количество +'_n' строк
sl:=TStringList.Create;

//Формируем список
//Проходим по ячейкам
for i:=0 to StringGrid1.RowCount-1 do
  //Проходим по +'_n' строкам
  for j:=1 to n do Sl.Add(StringGrid1.Cells[0,i] + '_' + IntToStr(j));

//Запоминаем число строк для последующей сортровки первого столбца
rcount:=StringGrid1.RowCount;

//Записываем полученные значения в StringGrid
StringGrid1.RowCount:=Sl.Count;
for i:=0 to Sl.Count-1 do StringGrid1.Cells[1,i]:=Sl[i];

//Сортируем первый столбец
for i:=rcount-1 downto 1 do begin
                            StringGrid1.Cells[0,i*n]:=StringGrid1.Cells[0,i];
                            StringGrid1.Cells[0,i]:='';
                            end;
end;
Pascal/Delphi
ICQ: 2881228
Prisioner вне форума Ответить с цитированием
Старый 15.11.2010, 17:51   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Stilet, попробовал я твой код. Выдал ошибку при компиляции:
Код:
procedure TMainForm.Button2Click(Sender: TObject);
var
 sl:TStringList;
 row,col: integer;
begin
 sl:=TStringList.Create;
 with MainForm.RzStringGrid1 do begin
  for row:=0 to RowCount - 1 do
   for col:=0 to 3 do
    sl.add(Cells[0,row] + '_'+IntToStr(col));
 end;
говорит, что "[Error] MAIN.PAS(1549): For loop control variable must be simple local variable"
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение текста в ячейке stringgrid!!! GREENpes Помощь студентам 4 04.05.2010 16:33
Компонент StringGrid --> изменение размера шрифта Dr.Ern Компоненты Delphi 1 06.03.2010 00:38
добавление записей в StringGrid в Delphi TaYgA Помощь студентам 0 23.01.2010 20:33
stringgrid изменение ширины столбца с заголовками keeper69 Общие вопросы Delphi 6 22.01.2010 16:33
Вопрос по C++ Builder (изменение размера StringGrid) Sad_SmiliK Помощь студентам 2 11.03.2009 18:20