Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


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

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


Ответ
 
Опции темы
Старый 10.02.2010, 15:52   #1
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
Смущение Непонятная ошибка (код срабатывает только один раз)

Всем доброго времени суток.

Я сегодня уже пол дня ломаю голову над одной проблемой. Вообщем у меня есть код, компилируется без ошибок и предупреждений. Но во время выполнения кода в одной и той же процедуре на второй и следующие разы вылазит ошибка. Т.е. первый раз код работает как нада, на второй - ошибка.

Вот кусок кода:

Код:
procedure TfrmCalories.WriteTable(Sender: TObject);
var
  iIndex: integer;
  Portion: extended;
begin
  iIndex := 0;
  try
    iIndex := (FindComponent('cbProduct' + IntToStr((Sender as TEdit).Tag)) as TComboBox).ItemIndex;
  except
  end;
  Calories := StrToFloat(frmCalEdit.sgCalTable.Cells[1, iIndex + 1]); // Данные берутся из таблицы
  begin
    Portion:= (StrToIntDef((FindComponent('edtPortion' + IntToStr((Sender as TEdit).Tag)) as TEdit).Text, 0 ) / 100);

    (FindComponent('edtCalories' + IntToStr((Sender as TEdit).Tag)) as TEdit).Text := ' ' + FloatToStr(Portion * Calories);
  end;
end;
Интерфейс программы выглядит так:

cbProduct1 edtPortion1 edtCalories1
cbProduct2 edtPortion2 edtCalories2
cbProduct3 edtPortion3 edtCalories3

Когда в комбобоксе (cbProduct1 ) я выбираю какой то пункт, в определённый эдит (edtCalories1) записываются данные, которые зависят от содержимого другого эдита (edtPortion1). И если в первом эдите пусто, то и результат во втором эдите будет нулевой. Поэтому я сделал процедуру, выше представленную, которая перещитывает если ввести данные в первый эдит и нажать на энтр. (Вообщем эта процедура на OnKeyPress помещена).

Ошибка именно в выделенной красным строке, бду очень благодарен если кто нибудь поможет мне эту ошибку исправить.
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 10.02.2010, 15:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Код:
 
var c:TComboBox;
begin
 c:=(FindComponent('cbProduct' + IntToStr((Sender as TEdit).Tag)) as TComboBox);
if c<>nil then iIndex := c.ItemIndex;
А вдруг FindComponent не нашел ничего?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.02.2010, 16:25   #3
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Stilet, нет не помогло, и ещё поправочка, оказывается код работает только для первой строчки (cbProduct1 edtPortion1 edtCalories1), а для остальных строк - ошибка.
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 10.02.2010, 16:34   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

А текст ошибки привести не судьба?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.02.2010, 16:37   #5
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

acsess violontation of adress ... read adress 00000 Что-то в этом роде.

С ошибкой только что разобрался, оказывается я, дурья башка, указал Tag только для первого комбобокса, а для остальных нет.
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать лист, где каждая улица будет повторяться только один раз Blackwind Microsoft Office Excel 12 19.09.2009 22:27
Как выполнить действие только один раз? dolphin705 Общие вопросы Delphi 5 25.08.2009 08:33
timer срабатывает только один раз! KWN, lnc Общие вопросы Delphi 1 05.03.2009 12:58
Как высчитывать ячейку только один раз? Человек Microsoft Office Excel 2 20.12.2006 20:57
Как сделать что-бы Таймер срабатывал только один раз? Greg Компоненты Delphi 11 16.12.2006 01:25


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS