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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2012, 22:11   #1
marwell.
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 63
Печаль StringGrid

доброго времени суток
есть StringGrid, в одной из ячеек которого сидит ComboBox (но это не суть). В общем надо чтобы при ручном изменении значения одной из двух ячеек, пересчитывалось по известной формуле значение третьей ячейки. Пытался сделать так:при начале редактирования ячейки запоминаю координаты и старое значение, потом при получении фокуса ввода другой ячейкой пересчитываю новое значение. Но этот способ почему то не работает вот кусок кода:

Код:
procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol,
ARow: Integer; var Value: String);
begin
EditCol:=ACol;
EditRow:=ARow;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var price, procent: real;
begin
if StringGrid1.Cells[EditCol, EditRow]<>'' then begin
price:=StrToFloat(StringGrid1.Cells[1, EditRow]);
procent:=StrToFloat(StringGrid1.Cells[2, EditRow]);
StringGrid1.Cells[3,EditRow]:=FloatToStr(price+price*procent/100);
end;
end;

procedure TForm1.StringGrid1Exit(Sender: TObject);
var price, procent: real;
begin
if StringGrid1.Cells[EditCol, EditRow]<>'' then begin
price:=StrToFloat(StringGrid1.Cells[1, EditRow]);
procent:=StrToFloat(StringGrid1.Cells[2, EditRow]);
StringGrid1.Cells[3,EditRow]:=FloatToStr(price+price*procent/100);
end;
end;
буду благодарен любому совету
marwell. вне форума Ответить с цитированием
Старый 06.12.2012, 01:05   #2
Willer55
Пользователь
 
Регистрация: 17.08.2011
Сообщений: 35
По умолчанию

Я такое как то раз делал, но я вешал процедуру обработки данных, на событие OnChange ComboBox'а, и получал номер ячейки на событии OnSelectCell у StringGrid'a.
Примера кода нету извини, давно это было.
Willer55 вне форума Ответить с цитированием
Старый 06.12.2012, 02:49   #3
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Цитата:
есть StringGrid, в одной из ячеек которого сидит ComboBox (но это не суть).
Это как раз и суть. У тебя на OnSelectCell было повешено выяснение, не надо ли отображать в выбраной ячейке ComboBox, откуда теперь взялся другой обработчик?

Проверяй, отрабатывает ли вообще OnSelectCell...
volvo877 вне форума Ответить с цитированием
Старый 06.12.2012, 11:14   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а почему бы не вычислять прямо на событии изменения текста ячейки?
вот так:

Код:
procedure TForm1.Calculate(EditCol, EditRow: Integer);
var price, procent: real;
begin
if StringGrid1.Cells[EditCol, EditRow]<>'' then begin
   try
     price:=StrToFloat(StringGrid1.Cells[1, EditRow]);
     procent:=StrToFloat(StringGrid1.Cells[2, EditRow]);
     StringGrid1.Cells[3,EditRow]:=FloatToStr(price+price*procent/100);
  except
     StringGrid1.Cells[3,EditRow] := '0.00';
  end; 
end;
end;

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
  const Value: string);
begin
  Calculate(ACol, ARow)
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid shananina-katya Помощь студентам 2 10.11.2011 19:22
StringGrid cashmail Общие вопросы Delphi 4 15.10.2011 01:54
stringgrid+колесо мыши=>stringgrid.onclick aalleexxaa Общие вопросы Delphi 5 16.02.2011 16:58
StringGrid SergGhost Помощь студентам 2 29.10.2008 08:48
StringGrid MAcK Общие вопросы .NET 2 31.03.2008 11:40