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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2012, 00:06   #1
Gover
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 20
По умолчанию Пересчет значений при вводе в StringGrid

День добрый.
Нужен совет, никак не соображу что можно придумать.
Есть StringGrid. Первый столбец заполняется при изменении комбобокса, во второй столбец пользователь вводит данные, третий столбец должен автоматом просчитываться при вводе данных, как произведение 1 и 2 столбца.
Gover вне форума Ответить с цитированием
Старый 26.06.2012, 00:47   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

У TStringGrid есть событие OnSetEditText.
Событие это работает так же как OnChange в TEdit.
В процедуру, обрабатывающую это событие передается изменяемое значение ячейки и ее координаты.
По этим параметрам можно определить в каком столбце и строке меняется значение и сделать пересчет. Правда, придется проверять корректность ввода ( чтобы в ячейке было число) и преобразовывать строковые представления чисел в само число, затем, после пересчета, обратно, что поместить в ячейку третьего столбца.
Прик вне форума Ответить с цитированием
Старый 26.06.2012, 08:36   #3
Gover
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 20
По умолчанию

Я так пробовал, но мне дает ошибку при изменении данных в ячейке.
Gover вне форума Ответить с цитированием
Старый 26.06.2012, 08:40   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Какие числа в ячейках: только целые или могут быть вещественные?
Как "так пробовал"?
Какая ошибка?

Для целых чисел:
Код:
procedure TForm1.SGSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String);
var
  F1, F2 : Integer;
begin
  if ACol = 1 then begin
    if not TryStrToInt(Value, F1) or not TryStrToInt(SG.Cells[0, ARow], F2) then Exit;
    SG.Cells[2, ARow] := IntToStr(F1 * F2);
  end;
end;
Где SG - TStringGrid
Расчет работает и нет никаких ошибок

Последний раз редактировалось Прик; 26.06.2012 в 20:56.
Прик вне форума Ответить с цитированием
Старый 26.06.2012, 20:18   #5
Gover
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 20
По умолчанию

Спасибо, цифры будут целыми.
А как можно по нажатию Enter зафиксировать ввод и перейти на ячейку ниже?
Gover вне форума Ответить с цитированием
Старый 26.06.2012, 20:51   #6
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Например, так:
Код:
procedure TForm1.SGKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_RETURN) and (SG.Row < SG.RowCount-1) then
    SG.Row := SG.Row + 1
end;
В процедуре обработки события от клавиатуры (OnKeyDown).
Прик вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пробелы при вводе KingWaR56 БД в Delphi 6 11.12.2011 09:58
Условие для диапазона ячеек, при вводе числовых значений. segail Microsoft Office Excel 3 20.06.2010 00:14
Автоматическое вычитание при вводе определенных значений DIMONRUS Microsoft Office Excel 11 17.06.2010 20:06
Ошибка при вводе даты tools SQL, базы данных 6 05.11.2009 21:12
Проблемка при вводе чисел at10 Microsoft Office Excel 4 02.12.2007 22:22