![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Умоляю помогите((((
![]() |
#2
|
|||
|
|||
![]() Ну, доступ к данным производится через StringGrid.Cells[I,J]. Соответсвенно, нужны вложенные циклы. Ну и не забыть, что в ячейке может не быть данных (ячейки имеют тип String, соответсвенно, надотданные конвертировать).
Вот пример подсчета суммы ячеек. Мин и Макс по образу сам сделаешь. (предполагаем, что в ячейках целые числа) Код:
var I, J : Integer; S : Integer; begin S := 0; For I := 0 To StringGrid1.RowCount-1 Do For J := 0 To StringGrid1.ColCount-1 Do Try S := S + StrToInt(StringGrid1.Cells[I,J]); Except // do nothing End; ShowMessage('Сумма = ' + IntToStr(S)); end; PS. Под отладчиком могут возникать ошибки, если не удастся конвертировать данные ячейки в число. Просто пускай дальше. Если запускать не из под отладчика, то ошибок видно не будет. PPS. Не помню точно какая координата (колонки или столбца) должна идти первой при обращении к ячейке - проверь по справке. |
#3
|
|||
|
|||
![]() Я никак не понимаю, почему не запускается именно с того места, где объявляются переменные I,J.
Я может быть вообще что-то не так сделала: Код:
procedure TForm1.StringGrid1Click(Sender: TObject); begin StringGrid1.Cols[0].Text:='Январь' ; StringGrid1.Cols[1].Text:='Февраль' ; StringGrid1.Cols[2].Text:='Март' ; StringGrid1.Cols[3].Text:='Апрель'; StringGrid1.Cols[4].Text:='Май' ; StringGrid1.Cols[5].Text:='Июнь'; StringGrid1.Cols[6].Text:='Июль' ; StringGrid1.Cols[7].Text:='Август'; StringGrid1.Cols[8].Text:='Сентябрь' ; StringGrid1.Cols[9].Text:='Октябрь'; StringGrid1.Cols[10].Text:='Ноябрь'; StringGrid1.Cols[11].Text:='Декабрь' ; StringGrid1.Cells[0,1]:='12000'; StringGrid1.Cells[1,1]:='14500'; StringGrid1.Cells[2,1]:='15800'; StringGrid1.Cells[3,1]:='13700'; StringGrid1.Cells[4,1]:='19900'; StringGrid1.Cells[5,1]:='17400'; StringGrid1.Cells[6,1]:='16200'; StringGrid1.Cells[7,1]:='11700'; StringGrid1.Cells[8,1]:='18700'; StringGrid1.Cells[9,1]:='14200'; StringGrid1.Cells[10,1]:='12800'; StringGrid1.Cells[11,1]:='17600'; end; procedure TForm1.Button1Click(Sender: TObject); begin var I, J : Integer; S : Integer; begin S := 0; For j := 0 To StringGrid1.RowCount-1 Do For I := 0 To StringGrid1.ColCount-1 Do Try S := S + StrToInt(StringGrid1.Cells[I,J]); Except // do nothing End; ShowMessage('Сумма = ' + IntToStr(S)); end; Edit1.Text:=s; end; Что нужно изменить? (Я уже на грани нервного срыва) Последний раз редактировалось Admin, 12.12.2010 в 13:13. |
#4
|
||||
|
||||
![]() Ну для твоего случая достаточно такого:
Код:
procedure TForm1.Button1Click(Sender: TObject); var i, n: integer; begin n := 0; for i := 0 to StringGrid1.ColCount - 1 do begin try n := n + StrToInt(StringGrid1.Cells[i, 1]); except end; end; ShowMessage('Сумма = ' + IntToStr(n)); end; |
#5
|
|||
|
|||
![]() Спасибо огромное!!!
А как тогда сделать, чтобы ответ выводился в Edit1? |
#6
|
||||
|
||||
![]() Вместо ShowMessage напиши:
Код:
Edit1.Text := 'Сумма = ' + n; |
#7
|
|||
|
|||
![]() Еще раз благодарю за помощь!!!
|