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

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

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

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

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

Ответ
 
Опции темы
Старый 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,097
По умолчанию

Код:
 
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,097
По умолчанию

А текст ошибки привести не судьба?
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 вне форума Ответить с цитированием
Ответ


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

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать лист, где каждая улица будет повторяться только один раз Blackwind Microsoft Office Excel 12 19.09.2009 23:27
Как выполнить действие только один раз? dolphin705 Общие вопросы Delphi 5 25.08.2009 09: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