![]() |
|
|
|
|
#1
|
|||
|
|||
|
Здравствуйте. В связи со своими скудными знаниями в программировании, у меня не получается решить одну задачу.
Будьте добры помогите советом или наведите на путь истинный. Попытаюсь обрисовать что есть и что нужно получить в итоге. Есть Memo в нём в каждой строке есть числа от 1 до 10 Есть глобальная переменная X, зависящая от t, стоит задача пройти по строкам в мемо поле и выполнить код в зависимости от переменной X, X не может быть равно 2, если X не равно 2 то продолжить выполнение программы, если X =2, то подождать 1 секунду, если результат X будет равен 2 то подождать ещё 1 сек и так до тех пор по X примет значение, отличное от 2, после чего продолжить выполнение цикла мемо. Известно, при начале обработки цикла мемо, X не равен 2. Ниже приведён код, который я смог родить. Поправьте чтоли меня. Код:
for i:=0 to mmo1.Lines.Count - 1 do begin
s:=mmo1.Lines[i];
mmo1.Lines[i]:=s;
if X <> 2 then
begin
t:=2;
1 * t: = X
end
else
begin
if X = 2 then
begin
repeat
begin
Sleep(1000);
end;
until X <> 2;
end;
end;
end;При таком раскладе программа выполняется 1 раз, хотя по идее должная была повторять 1 секундное ожидание пока X не примет значение отличное от 2 и продолжить выполнение цикла. Заранее спасибо за Ваши отзывы, очень надеюсь на ваши наставления! Последний раз редактировалось gebs, 18.08.2012 в 03:26. |
|
#2
|
||||
|
||||
|
Цитата:
|
|
#3
|
|||
|
|||
|
Цитата:
|
|
#4
|
||||
|
||||
|
Цитата:
А компилятор в этом месте разве не ругается?Цитата:
Даже компилируется и запускается? А какая версия Delphi? |
|
#5
|
|||
|
|||
|
Цитата:
|
|
#6
|
||||
|
||||
|
Цитата:
Если в цикле проверять не стало ли X равным 2, но при этом нигде в коде не устанавливать значение этой переменной в 2, то так бесконечно можно ждать... |
|
#7
|
|||
|
|||
|
Вы не понимаете сути. X не изменится, потому что программа ждет, а не выполняется дальше. Если в коде встречается sleep, то он sleep для всей программы.
|
|
#8
|
|||
|
|||
|
Цитата:
Хорошо, а какой вариант можете предложить? |
|
#9
|
||||
|
||||
|
Можно просто ввести рассчет Х в цикл. Если расчет Х ведется в таймере, то использовать
Код:
Application.ProcessMessages; |