|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.03.2010, 01:16 | #1 |
Новичок
Джуниор
Регистрация: 27.03.2010
Сообщений: 4
|
Delphi7 - Почему Edit1.Text не выводит в цикле ?
Подскажите начинающему. Вот фрагмент:
for I:=1 to 9999 do begin Edit1.Text := IntToStr(I); end Почему я не вижу мелькающих циферок (от 1 до 9999) в окне формы, а вижу только конечное число 9999, когда цикл закончился ? Такая же картина и с компонентами Label, Memo, StaticText ... Читаю Фленова, Архангельского, но видимо что-то глобальное упустил в самом начале. Подскажите. |
28.03.2010, 01:21 | #2 |
Форумчанин
Регистрация: 17.09.2008
Сообщений: 349
|
В самом цикле попробуйте написать:
Код:
если чем помог, поставьте отзыв на весы
Последний раз редактировалось Xatr; 28.03.2010 в 03:31. |
28.03.2010, 01:23 | #3 |
Форумчанин
Регистрация: 19.02.2009
Сообщений: 622
|
потому что цикл проходит очень быстро.
попробуй вот так Код:
Жми на весы!!!
|
28.03.2010, 01:29 | #4 |
Форумчанин
Регистрация: 17.09.2008
Сообщений: 349
|
Это только затормозит цикл. Каждое число будет выводиться через 1 секунду после предыдущего. И выводить результат в Edit-е вряд-ли будет.
При выполнении цикла "вешается" вся программа, потому-что всё выполняется последовательно. И чтобы программа обновляла окно, требуется каждый раз выполнять функцию в посте 2.
если чем помог, поставьте отзыв на весы
Последний раз редактировалось Xatr; 28.03.2010 в 03:19. |
28.03.2010, 03:05 | #5 |
Новичок
Джуниор
Регистрация: 27.03.2010
Сообщений: 4
|
Благодарю за помощь.
Рекомендация (пост 2) - решение проблемы. Рекомендация (пост 3) - не работает. Происходит точно, что описал Xatr (пост 4). Хотелось бы глубже разобраться в проблеме-почему так происходит. Приведенный в посте 1 фрагмент - это лишь иллюстрация проблемы. Понимаю, что форум - это не интерактивный курс обучения, поэтому подскажите где и что почитать. У Фленова и Архангельского не нашел, м.б. плохо искал ? |
28.03.2010, 03:15 | #6 | ||
Форумчанин
Регистрация: 17.09.2008
Сообщений: 349
|
Цитата:
почему "виснет" прога при выполнении цикла? Потому, что, как я писал выше, все команды программы выполняются последовательно одна за другой. Нну есть ветвление и повторение, но это тоже какая-то последовательность кода программы и при окончании кода, программа завершает свою работу и закрывается. В оконных программах нужно чтобы окно было постоянно видно, для этого непрерывно выполняются в цикле функции обновления окна. Пример WinAPI: Код:
Цитата:
если чем помог, поставьте отзыв на весы
Последний раз редактировалось Xatr; 28.03.2010 в 03:30. |
||
28.03.2010, 04:23 | #7 | ||
Новичок
Джуниор
Регистрация: 27.03.2010
Сообщений: 4
|
Цитата:
Цитата:
Edit1.Text := IntToStr(I); находится в теле цикла, но не выполняется на каждом шаге, а для того, чтобы он выполнялся его надо предварить командой: Application.ProcessMessages; Ну, а цикл, в свою очередь является телом процедуры обработки нажатия на Button в окне главной формы. Вот и хотелось бы разобраться: Когда программа выполняется строго (гарантированно) последовательно, а когда для этого надо предпринимать специальные меры (как в случае с функцией Application.ProcessMessages; для вывода в форму на каждом шаге цикла. |
||
28.03.2010, 04:35 | #8 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
ваш цикл прекрасно выполняется и без всякого ProcessMessages!!! Это оператор нужен для совсем другого! Поймите, что Вы видите на форме не то, что находится в Edit1.Text, а то, что на форме отображается! Edit1 прекрасно изменяется (доказать легко. например, в цикле пишите значения в файл. потом посмотрите, что там записалось!) А вот как раз, чтобы ОТОБРАЗИТЬ изменения и нужно обработать оконные сообщения (любой контрол (управляемый объект) в Windows управляется как раз получаемыми сообщениями), а ProcessMessages позволяет обработать очередь сообщений (таким образом, форма "оживает")! |
|
28.03.2010, 05:02 | #9 |
Новичок
Джуниор
Регистрация: 27.03.2010
Сообщений: 4
|
А-а-а-а ... Начинаю понимать.
Спасибо Xatr. Спасибо Serge_Bliznykov. А если ещё ткнёте носом, где об этом стройно и подробно изложено, будет вообще здорово. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
AnsiUpperCase(Edit1.Text); | Шура | Помощь студентам | 3 | 01.12.2008 20:04 |
y=Edit1->Text ??? | m.a.x.i.m | Помощь студентам | 8 | 31.03.2008 11:29 |
if edit1.text:='123'then | ben95 | Помощь студентам | 5 | 28.01.2008 16:29 |
из edit1.text в stringgrid. | fluer | Общие вопросы Delphi | 8 | 25.04.2007 11:23 |
Поиск символа в Edit1.text | Alar | Компоненты Delphi | 0 | 29.10.2006 19:02 |