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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2012, 15:18   #1
Zalord
Новичок
Джуниор
 
Регистрация: 21.05.2012
Сообщений: 1
По умолчанию почему зависает программа на Delphi с таймером

подскажите почему зависает программа в конце исполнения?
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
text: string;
i2:integer;
begin
 text:=edit1.Text;
 i2:= Length(text) ;


  While i2=i do
  timer1.Interval:=0;

  i:=i+1;
    if text[i]='d' then
    edit2.Text:=edit2.Text+'8'
    else
      edit2.Text:=edit2.Text+'4';
end;

Последний раз редактировалось Stilet; 22.05.2012 в 07:56. Причина: ошибка в тексте
Zalord вне форума Ответить с цитированием
Старый 21.05.2012, 17:28   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Код:
While i2=i do
begin
  timer1.Interval:=0;
  i:=i+1;
  if text[i]='d' then
  edit2.Text:=edit2.Text+'8'
  else
  edit2.Text:=edit2.Text+'4';
end;
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 21.05.2012, 23:13   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Прастите конечно мне не понятен смысл вынесение данного кода в Таймер, да и потом условие выполнение цикла какоето не правдоподобное
мб вот так надо было?
Код:
While i<=Length(text) do
Да и впринципе он тут не нужен этот цикл таймер сам по себе цикл, а зависает он потому что вы не выключаете таймер по завершению какогото действия допустим
когда счётчик равен длине строке

if i=Length(text) then Timer1.Active:=false;

в красивом виде будит выглядить примерно так

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
text: string;
begin
timer1.Interval:=0;
text:=edit1.Text;
i:=i+1;
if text[i]='d' then
edit2.Text:=edit2.Text+'8'
else
edit2.Text:=edit2.Text+'4';
if i=Length(text) then Timer1.Active:=false;
end;
Но опять же тут лишние присвоение и установка интервала в ноль, присвоение делается один раз перед запуском таймер и установка интервала также, а вообше советую вынести этот небольшой код цикл в другое собыитие, если же вам конечно не нужно постояно следить за тем чтобы в едит не был введён какойто символ, тогда действие таймера нужно выносить в другой поток...

Последний раз редактировалось Dozent; 21.05.2012 в 23:20.
Dozent вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависает программа Symba Общие вопросы Delphi 10 24.06.2011 11:48
Программа зависает Anubys Помощь студентам 0 20.05.2011 23:40
Почему не запускается программа на Delphi!? mineralkaaa Помощь студентам 4 19.11.2010 09:24
Зависает программа DimOn4Ik Общие вопросы Delphi 4 29.05.2010 21:05
Тестовая программа с таймером Barrr Помощь студентам 11 21.10.2007 19:42