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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2011, 22:58   #1
Farmokolog
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 16
По умолчанию StringGrid

Проблем такая... нужно сделать чтобы при введению в ячейку некорректных данных (букв или пустая ячейка )
вставлял в ячейку 0 и подсчитывал сумму, и высчитывал сумму всех чисел 3-его столбца.

Код:
  var
    a,b,y:array [1..7] of integer;
    j,summ: integer;
begin
for j:=1 to 7 do
A[j]:=StrToint(StringGrid1.Cells [1,j]);
for j:=1 to 7 do
B[j]:=StrToint(StringGrid1.Cells [2,j]);
for j:=1 to 7 do
begin
  summ:=A[j]*B[j];
  Y[j]:=summ;
  StringGrid1.Cells[3, j]:=intToStr(Y[j]);
end;
end;
________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 12.02.2011 в 08:39.
Farmokolog вне форума Ответить с цитированием
Старый 11.02.2011, 23:01   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

тоесть должны оставаца числа и нули?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 11.02.2011, 23:20   #3
Farmokolog
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 16
По умолчанию

Да и если можно чтобы буквы вообще не прописывались.
Farmokolog вне форума Ответить с цитированием
Старый 12.02.2011, 00:18   #4
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Первый вариант. Пример для A[j]:
Цитата:
for j:=1 to 7 do
A[j]:=StrToint(StringGrid1.Cells [1,j]);
заменяем на :
Код:
for j:=1 to 7 do
if not TryStrToint(StringGrid1.Cells [1,j],A[j]) then
A[j]:=0;
Или второй вариант - "чтобы буквы вообще не прописывались" -
Код:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then
key:=Chr(0);
end;
Либо-либо.

From Stilet: Попрошу правила форума соблюдать, и код выделять его тегом по кнопке #

Последний раз редактировалось Stilet; 12.02.2011 в 11:25.
asmodey1 вне форума Ответить с цитированием
Старый 12.02.2011, 09:42   #5
Farmokolog
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 16
По умолчанию

Спасибо большое за помощи, тока вот с вводом букв не помогло,
я имел в виду что бы как бы задать маску ввода данных в ячейку,
что бы нельзя было вводить некорректные данные на вроде
(44,44,44 или буквы) ну при этом понимал и перемножал (44,44 и 12е и т д ).

Подскажите пожалуйста в чем тут проблема не могу сделать чтобы в ячейках пересчитывал и дробные числа
если заменить integer на real и TryStrToFloat, StrToFloat то процедура не выполняется.
Код:
procedure TMainForm.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
  var
    a,b,y:array [1..7] of integer;
    j,summ: integer;

begin

for j:= 1 to 7 do
if not TryStrToint(StringGrid1.Cells [1,j],A[j]) then
A[j]:=0;

for j:=1 to 7 do
if not TryStrToint(StringGrid1.Cells [2,j],B[j]) then
B[j]:=0;
for j:=1 to 7 do
begin
  summ:=A[j]*B[j];
  Y[j]:=summ;
  StringGrid1.Cells[3, j]:=FloatToStr(Y[j]);
end;
end;

Последний раз редактировалось Stilet; 13.02.2011 в 11:39.
Farmokolog вне форума Ответить с цитированием
Старый 13.02.2011, 10:02   #6
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

После замены на real нужно заменить
TryStrToint на TryStrToFloat
intToStr на FloatToStr
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 13.02.2011, 10:17   #7
Farmokolog
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 16
По умолчанию

Проблема в том что после замены не могу понять почему появляется ошибка вот тут
Код:
for j:=1 to 7 do
if not TryStrToFloat(StringGrid1.Cells [2,j],A[j]) then
a[j]:=0;
Farmokolog вне форума Ответить с цитированием
Старый 13.02.2011, 11:41   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Какого рода ошибка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.02.2011, 13:12   #9
Farmokolog
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 16
По умолчанию

Вот такая
[Error] Main.pas(322): For loop control variable must have ordinal type
[Error] Main.pas(323): Incompatible types: 'Integer' and 'Real'
[Error] Main.pas(324): Incompatible types: 'Integer' and 'Real'
[Error] Main.pas(326): For loop control variable must have ordinal type
[Error] Main.pas(327): Incompatible types: 'Integer' and 'Real'
[Error] Main.pas(328): Incompatible types: 'Integer' and 'Real'
[Error] Main.pas(329): For loop control variable must have ordinal type
[Error] Main.pas(331): Incompatible types: 'Integer' and 'Real'
[Error] Main.pas(332): Incompatible types: 'Integer' and 'Real'
[Error] Main.pas(333): Incompatible types: 'Integer' and 'Real'
[Error] Main.pas(333): Incompatible types: 'Integer' and 'Real'
[Fatal Error] MainP.dpr(5): Could not compile used unit 'Main.pas'
и вот такая
[Error] Main.pas(323): There is no overloaded version of 'TryStrToFloat' that can be called with these arguments
[Error] Main.pas(327): Types of actual and formal var parameters must be identical
[Error] Main.pas(331): Incompatible types: 'Integer' and 'Extended'
Farmokolog вне форума Ответить с цитированием
Старый 13.02.2011, 13:58   #10
Farmokolog
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 16
По умолчанию Заработало

Всем спасибо за помощь!!!
Выкладываю готовый рабочий код вдруг у кого возникнет такая проблема.
Код:
procedure TMainForm.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  a, b, y: array [1..7] of Double;
  summ: Double;
  j: Integer;
begin

for j:= 1 to 7 do
if not TryStrToFloat(StringGrid1.Cells [1,j],A[j]) then
A[j]:=0;

for j:=1 to 7 do
if not TryStrToFloat(StringGrid1.Cells [2,j],B[j]) then
B[j]:=0;
for j:=1 to 7 do
begin
  summ:=A[j]*B[j];
  Y[j]:=summ;
  StringGrid1.Cells[3, j]:=FloatToStr(Y[j]);
end;
end;
Farmokolog вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid Don Karleone Общие вопросы Delphi 2 09.10.2010 20:17
StringGrid serj-07 Общие вопросы Delphi 12 25.05.2010 17:43
StringGrid stp56 Общие вопросы Delphi 4 27.07.2009 20:44
StringGrid Chudo4258 Помощь студентам 1 17.03.2009 09:24
StringGrid StartMis Общие вопросы Delphi 5 21.11.2008 15:11