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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2010, 14:21   #1
Vampire_2008
 
Регистрация: 23.04.2010
Сообщений: 8
По умолчанию Переменные не хотят переприсаиваться (Delphi)

Здравствуйте. У меня в конкретном месте кода переменные отазываются переприсваиваться.
Вот это место:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
 iter: integer;
 quake:boolean;
label
 starcraft;
begin
time[1]:=combobox1.ItemIndex;
time[2]:=combobox2.ItemIndex;
time[3]:=combobox3.ItemIndex;
time[4]:=combobox4.ItemIndex;
time[5]:=combobox5.ItemIndex;
Переменная time отвечает за состояния триггеров, она оъявлена в разделе interface. При помощи combobox я задаю нужное мне состояние триггеров. (ItemIndex совпадают с нужным значением) Но переменная time отказывается присвоить эти значения и использует значения "00000".
Потом в коде этой процедуры time присваивает новые значения триггеров. И с этим проблем не возникает. И при повторном запуске этой процедуры он опять отказывается присвоить значения из combobox и использует последние значения.

Не понимаю в чём дело. Похожий код я использовал в другой работе, но там всё работало.
Работаю в Delphi 2010

Последний раз редактировалось Vampire_2008; 16.05.2010 в 14:29.
Vampire_2008 вне форума Ответить с цитированием
Старый 16.05.2010, 14:24   #2
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

А какой тип имеет Time?
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 16.05.2010, 14:27   #3
Vampire_2008
 
Регистрация: 23.04.2010
Сообщений: 8
По умолчанию

Код:
time: array [1..6] of integer;
Vampire_2008 вне форума Ответить с цитированием
Старый 16.05.2010, 14:45   #4
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

В комбобоксах точно выбраны Item'ы?

И почему присвоение идет со второго элемента массива?
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab

Последний раз редактировалось ex.cluz; 16.05.2010 в 14:50.
ex.cluz вне форума Ответить с цитированием
Старый 16.05.2010, 15:09   #5
Vampire_2008
 
Регистрация: 23.04.2010
Сообщений: 8
По умолчанию

Точно выбраны. 11000 начально состояние.
С 1-ого идёт присвоение. У меня счёт идёт с 1, а не с 0.

Если надо я могу скинуть написанную программу.

Последний раз редактировалось Stilet; 17.05.2010 в 09:15.
Vampire_2008 вне форума Ответить с цитированием
Старый 16.05.2010, 22:46   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Если надо я могу скинуть написанную программу.
Исходники проекта запакуйте и выложите архив сюда, на форум. Тогда легче будет понять, где Вы ошиблись...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.05.2010, 04:25   #7
Vampire_2008
 
Регистрация: 23.04.2010
Сообщений: 8
По умолчанию

Вот.
Счётчик.rar
Vampire_2008 вне форума Ответить с цитированием
Старый 17.05.2010, 11:03   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

чуть ниже приведённого Вами кода, в той же
procedure TForm1.Button1Click(Sender: TObject)

есть такой код:
Код:
for I := 1 to 5 do
 time[i]:=tplus[i];
ещё вопросы есть?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.05.2010, 13:31   #9
Vampire_2008
 
Регистрация: 23.04.2010
Сообщений: 8
По умолчанию

Эта часть кода работает как надо. Но та часть кода, которая отвечает за считывание переменных из ComboBox не работает. Начальное состояние триггеров 3 ("11000"), после него должно идти состояние 2 ("01000"), а не 0 ("00000"). Можете попробовать установить своё начальное состояние, программа в любом случае выдаст следующее состояние 0 ("00000") (при условии, что вы перезапустили программу, а если просто нажали "Очистка", то он продолжит работать с последнего состояния, а не с установленного вами).
Vampire_2008 вне форума Ответить с цитированием
Старый 17.05.2010, 15:51   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да у Вас в логике чёрт ногу сломит..

запускаем программу. ничего не меняя,
нажимаем на кнопку "Активация" (button1 - кстати, на будущее - имена компонентам лучше давать осмысленные!),
массив time после после блока присвоений значений из combobox станет:
time (1, 1, 0, 0, 0, 0)
проходим пошагово:
if time[1]=0 then - ЛОЖЬ, попадаем на else
...
tplus[1]:=0;
quake:=false;

дальше, везде проверка на if quake=true then
поэтому внутрь остальных веток не заходит.
в результате, в момент выполнения кода:
for I := 1 to 5 do
time[i]:=tplus[i];
массив tplus имеет значение (0, 0, 0, 0, 0)
что и переносится в массив time
получаем "00000"

ещё вопросы?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ХАРДЫ ВМЕСТЕ НЕ ХОТЯТ РАБОТАТЬ ПРАВИЛЬНО... suncity Компьютерное железо 6 30.07.2009 13:05
Divы не хотят себя вести по фэн-шую naeki HTML и CSS 2 30.12.2008 12:28