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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2009, 14:06   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Как сложить непустые ячейки в StringGrid-e?

Как сделать прогонку на проверку непустых значений по столбцу в StringGrid-e, и, например, если в столбце есть из 25 клеток 2 непустых, то сложить количество (!) этих ячеек, т.е. должно быть в ответе "2".?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.03.2009, 14:12   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

В цикле:
Код:
if StringGrid.Cells[i,j]>' ' then
counter:=counter+1;
Я не понял - это вопрос-издевка? Как можно такое не понимать?
mihali4 вне форума Ответить с цитированием
Старый 20.03.2009, 14:23   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

mihalic4, ну конечно не издевка. если бы я знал, то не спрашивал. Стыдно не спросить (с) .

Хм, что-то видимо я не так делаю. Код:
Код:
 
for x1:=0 to 25 do //25 ячеек в столбце
   begin
    if SG10.Cells[0,x1] > ' ' then
      begin
       counter:=counter + 1;
       SG10.Cells[0,27]:=IntToStr(counter);
      end;
   end;
Если заполнены две строчки, то выводит в ответ "0", а должно быть "2". В чем ошибка?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось Stilet; 20.03.2009 в 15:04.
artemavd вне форума Ответить с цитированием
Старый 20.03.2009, 14:42   #4
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Я вот, честно говоря не понимаю как твой код работает. У тебя же 25 ячеек, то цикл должен быть от 0 до 24.
Код:
for x1:=0 to 24 do
begin
   if SG10.Cells[0,x1] <> ' ' then
      inc(counter);
end;
SG10.Cells[0,27]:=IntToStr(counter);
Так всё должно работать.
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Старый 20.03.2009, 14:54   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

XuTpbIu, попробовал ваш код, но ответ все равно неправильный. Если две заполенные строчки, то в ответе должно быть, когда я нажимаю на кнопку, "2", а показывается "1", потом нажимаю еще раз и в ответе уже "3". Где неправильно то?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.03.2009, 15:03   #6
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Всё понял у тебя просто не проинизиализированна переменная
Напиши сверху моего кода ещё:
counter := 0;
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Старый 20.03.2009, 15:13   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Код:
Код:
  
for x1:=0 to 24 do
  counter:=0;
   begin
    if SG10.Cells[0,x1] <> '' then
       inc(counter);
       SG10.Cells[0,27]:=IntToStr(counter);
    end;
Так?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.03.2009, 15:23   #8
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Код:
counter:=0;
for x1:=0 to 24 do
   begin
    if SG10.Cells[0,x1] <> '' then
       inc(counter);
       SG10.Cells[0,27]:=IntToStr(counter);
    end;
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Старый 20.03.2009, 16:03   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

XuTpbIu, вроде правильно теперь показывает) но есть маленькое "но" . При первом нажатии на кнопку показывается сначала "0", а когда второй раз на кнопку нажимаешь, то потом показывается правильно, а надо, чтобы сразу показывалось правильно и не приходилось нажимать второй раз на кнопку. Может инициализировать переменную надо в другом месте и где то выше?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.03.2009, 16:19   #10
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Код:
counter:=0;
for x1:=0 to 24 do
  if SG10.Cells[0,x1] <> '' then
    Inc(counter);
SG10.Cells[0,27]:=IntToStr(counter);
У меня именно ЭТОТ код пашет. Проверь ещё раз. Ну всё. У меня рабочий день кончился - пора домой.
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Координаты ячейки в StringGrid??? aslanbek Общие вопросы Delphi 13 01.08.2014 16:53
Как узнать какие ячейки у StringGrid-а видимы? Sergey2 Компоненты Delphi 2 04.06.2008 13:57
можно ли в stringgrid задавать размер конкретной ячейки SeЯgey Помощь студентам 3 26.04.2008 18:47
Delphi: Сортировка строк в StringGrid, критерий - элемент ячейки Andris Помощь студентам 9 09.03.2008 23:04
скрыть ячейки в таблице StringGrid РИЯ Компоненты Delphi 4 22.10.2007 08:15