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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2012, 03:53   #1
Dimati87
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 44
По умолчанию StringGrid

Доброе время суток, подскажите пожалуйста. Есть StringGrid в каждой строке вводиться по 4 значения, а в пятой ячейки должно выводиться сумма четырех этих значений, вопрос в том, как записать сумму в ячейку пятую и как сделать что бы он считал во всех вводимых строках. т.е. в каждой строке вводимой он выдавал сумму. Вот мой код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
  var
    a:array[1..5] of integer;
    i,k,summ: integer;
  begin
    for i:=1 to 5 do
      if Length(StringGrid1.Cells[i-1,1]) <>0 then
        a[i]:= StrToInt(StringGrid1.Cells[i-1,0])
      else a[i] := 0;
     summ := 0;
     for i :=1 to 5 do
     summ := summ + a[i];
     Label1.Caption:=IntToStr(summ);
  end;

end.
Dimati87 вне форума Ответить с цитированием
Старый 25.04.2012, 06:00   #2
Dimati87
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 44
По умолчанию

смысл таков допустим в первой строке stringgrid есть значения 1,2,3,4 в пятую ячейку этой же строки нужно сумму вывести 1+2+3+4 = 10, во второй строке 4,3,2,1 сумма в пятой ячейки будет 4+3+2+1 = 10. и так далее строки не фиксированные.
Dimati87 вне форума Ответить с цитированием
Старый 25.04.2012, 08:52   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

если вам в дальнейшем ненужно обрабатывать данные, то можно обойтись и без массива
Код:
procedure TForm1.Button1Click(Sender: TObject);
  var
    i,j,summ: integer;
  begin
    for i:=1 to StringGrid1.RowCount do
        begin
        sum:=0;
        For j:=1 to StringGrid1.ColCount do
          begin
          if StringGrid1.Cells[i,j] <> '' then  summ:=summ+StrToInt(StringGrid1.Cells[i,j]);
          end;
         StringGrid1.Cells[i,StringGrid1.ColCount]:=IntToStr(summ);
        end;
  end;
Токо там поиграйтесь с обращениями к ячейкам, в стринггриде там вроде наоброт идёт обрашение сначало стобец потом строка... чото такое вроде
Dozent вне форума Ответить с цитированием
Старый 25.04.2012, 09:23   #4
Dimati87
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 44
По умолчанию

не получается, summ всегда равно 0, и почему то не выводит он в пятую ячейку, понял что summ = 0 поставив label в него и выгружал сумму.
Dimati87 вне форума Ответить с цитированием
Старый 25.04.2012, 09:28   #5
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

не может бытьчт овсегда равно 0. Код пожайлуста
Dozent вне форума Ответить с цитированием
Старый 25.04.2012, 09:30   #6
Dimati87
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 44
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
  var
    i,j,summ: integer;
  begin
    for i:=1 to StringGrid1.RowCount do
        begin
          summ:=0;
        For j:=1 to StringGrid1.ColCount   do
          begin
          if StringGrid1.Cells[i,j] <> '' then  summ:=summ+StrToInt(StringGrid1.Cells[i,j]);
          end;
         StringGrid1.Cells[i,5]:=IntToStr(summ);
         Label1.Caption:=IntToStr(summ);
        end;
  end;
Dimati87 вне форума Ответить с цитированием
Старый 25.04.2012, 09:41   #7
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

вот вам рабочий код

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.ColCount:=5;
StringGrid1.RowCount:=2;
StringGrid1.FixedCols:=0;
StringGrid1.FixedRows:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
  var
    i,j,summ: integer;
  begin
    for i:=0 to StringGrid1.RowCount-1 do
        begin
        summ:=0;
        For j:=0 to StringGrid1.ColCount-2 do
          begin
          if StringGrid1.Cells[j,i] <> '' then  summ:=summ+StrToInt(StringGrid1.Cells[j,i]);
          end;
         StringGrid1.Cells[StringGrid1.ColCount-1,i]:=IntToStr(summ);
        end;
end;

end.
Dozent вне форума Ответить с цитированием
Старый 25.04.2012, 10:08   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, лучше вместо StrToInt использовать StrToIntDef - и тогда проверку ячейки на неравенство пустой строки можно выкинуть. и позволит избежать Runtime ошибок, если в ячейку вобьют НЕ ЧИСЛО!

во-вторых, а зачем код вычисления суммы вешать на кнопку.
Для небольших гридов (а я уверен, что именно такой в данном случае и есть) вполне можно вычислять динамически, по мере внесения данных и смены фокуса...


а в целом, код Dozent выглядит вполне рабочим!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2012, 10:57   #9
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Цитата:
StrToInt использовать StrToIntDef
ну мб, но мне вот допустим больше нравится когда идёт запрет на ввод букв, черзе кейпрес)

Ну обработка через кейпрес думаю будит сложна для автора... хотя советую попробовать будит полезно!
Dozent вне форума Ответить с цитированием
Старый 25.04.2012, 11:16   #10
Dimati87
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 44
По умолчанию

не подскажете как использовать StrToIntDef?
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
    i,j,s,summ: integer;
  begin
    for i:=0 to StringGrid1.RowCount-1 do
        begin
        summ:=0;
        s:=4;
        For j:=0 to StringGrid1.ColCount-2 do
          begin
          if StringGrid1.Cells[j,i] <> '' then  summ:=(summ+StrToIntDef(StringGrid1.Cells[j,i]));
          end;
         StringGrid1.Cells[StringGrid1.ColCount-1,i]:=StrToIntDef(summ);
        end;
end;
не хотит работать, я буду использовать в таблице еще и текст
Dimati87 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid Миха-47 Общие вопросы Delphi 2 20.12.2011 00:03
stringgrid lblondy Компоненты Delphi 0 08.06.2011 22:32
stringgrid+колесо мыши=>stringgrid.onclick aalleexxaa Общие вопросы Delphi 5 16.02.2011 16:58
stringgrid Vitaliy3009 Общие вопросы Delphi 3 14.10.2009 16:59
StringGrid MAcK Общие вопросы .NET 2 31.03.2008 11:40