![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 27.03.2010
Сообщений: 4
|
![]()
Подскажите начинающему. Вот фрагмент:
for I:=1 to 9999 do begin Edit1.Text := IntToStr(I); end Почему я не вижу мелькающих циферок (от 1 до 9999) в окне формы, а вижу только конечное число 9999, когда цикл закончился ? Такая же картина и с компонентами Label, Memo, StaticText ... Читаю Фленова, Архангельского, но видимо что-то глобальное упустил в самом начале. Подскажите. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 17.09.2008
Сообщений: 349
|
![]()
В самом цикле попробуйте написать:
Код:
если чем помог, поставьте отзыв на весы
![]() Последний раз редактировалось Xatr; 28.03.2010 в 03:31. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 19.02.2009
Сообщений: 622
|
![]()
потому что цикл проходит очень быстро.
попробуй вот так Код:
Жми на весы!!!
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 17.09.2008
Сообщений: 349
|
![]()
Это только затормозит цикл. Каждое число будет выводиться через 1 секунду после предыдущего. И выводить результат в Edit-е вряд-ли будет.
При выполнении цикла "вешается" вся программа, потому-что всё выполняется последовательно. И чтобы программа обновляла окно, требуется каждый раз выполнять функцию в посте 2.
если чем помог, поставьте отзыв на весы
![]() Последний раз редактировалось Xatr; 28.03.2010 в 03:19. |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 27.03.2010
Сообщений: 4
|
![]()
Благодарю за помощь.
Рекомендация (пост 2) - решение проблемы. Рекомендация (пост 3) - не работает. Происходит точно, что описал Xatr (пост 4). Хотелось бы глубже разобраться в проблеме-почему так происходит. Приведенный в посте 1 фрагмент - это лишь иллюстрация проблемы. Понимаю, что форум - это не интерактивный курс обучения, поэтому подскажите где и что почитать. У Фленова и Архангельского не нашел, м.б. плохо искал ? |
![]() |
![]() |
![]() |
#6 | ||
Форумчанин
Регистрация: 17.09.2008
Сообщений: 349
|
![]() Цитата:
почему "виснет" прога при выполнении цикла? ![]() Потому, что, как я писал выше, все команды программы выполняются последовательно одна за другой. Нну есть ветвление и повторение, но это тоже какая-то последовательность кода программы и при окончании кода, программа завершает свою работу и закрывается. В оконных программах нужно чтобы окно было постоянно видно, для этого непрерывно выполняются в цикле функции обновления окна. Пример WinAPI: Код:
Цитата:
![]()
если чем помог, поставьте отзыв на весы
![]() Последний раз редактировалось Xatr; 28.03.2010 в 03:30. |
||
![]() |
![]() |
![]() |
#7 | ||
Новичок
Джуниор
Регистрация: 27.03.2010
Сообщений: 4
|
![]() Цитата:
Цитата:
Edit1.Text := IntToStr(I); находится в теле цикла, но не выполняется на каждом шаге, а для того, чтобы он выполнялся его надо предварить командой: Application.ProcessMessages; Ну, а цикл, в свою очередь является телом процедуры обработки нажатия на Button в окне главной формы. Вот и хотелось бы разобраться: Когда программа выполняется строго (гарантированно) последовательно, а когда для этого надо предпринимать специальные меры (как в случае с функцией Application.ProcessMessages; для вывода в форму на каждом шаге цикла. |
||
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
ваш цикл прекрасно выполняется и без всякого ProcessMessages!!! Это оператор нужен для совсем другого! Поймите, что Вы видите на форме не то, что находится в Edit1.Text, а то, что на форме отображается! Edit1 прекрасно изменяется (доказать легко. например, в цикле пишите значения в файл. потом посмотрите, что там записалось!) А вот как раз, чтобы ОТОБРАЗИТЬ изменения и нужно обработать оконные сообщения (любой контрол (управляемый объект) в Windows управляется как раз получаемыми сообщениями), а ProcessMessages позволяет обработать очередь сообщений (таким образом, форма "оживает")! |
|
![]() |
![]() |
![]() |
#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 |