| 
| 
 | Вопрос # 6 249/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты! Я-новичок. Проблема:
 Непрерывно выполняется процедура, в которой происходит запись в файл ,а в компоненту Memo заносится информация (Memo1.lines.add(...).
 При нажатии на мышь в любом месте Form1  информация в Memo перестает двигаться,появляется надпись: (не отвечает) в верхнем поле Form1, появляются "песочные часы", при этом процедура продолжает правильно выполняться(запись в файл продолжается). В режиме отладки этого эффекта нет.  Как избежать этот эффект?
 
|  |   Вопрос задал: eis (статус: Посетитель)Вопрос отправлен: 21 августа 2012, 17:24
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 26 сентября 2012, 19:34; участников в обсуждении: 4. 
|   | Мережников Андрей (статус: Абитуриент), 21 августа 2012, 20:51 [#1]:поищите про application.processmessage. Или загоните процедуру в отдельный thread - только без обновления memo (кстати, зачем эти тормоза?), иначе нет смысла... |  
|   | eis (статус: Посетитель), 22 августа 2012, 15:51 [#2]:Мережников Андрей:Ув.Андрей.Если не обновлять  memo, то и проблемы не существует. Я не понял фразу  " иначе нет смысла..." |  31 августа 2012, 18:50: Вопрос перемещён из тематического раздела Delphi » Взаимодействие с Windows в раздел Delphi » Общие вопросы по программированию модератором Ерёмин А.А. 
|   | Amidamaru (статус: 4-ый класс), 31 августа 2012, 20:58 [#3]:Зачем вы пытаетесь сделать чтото сложное, когда не знаете самых элементарных вещей: У вас какойто участок кода (цикл или рекурсия - не важно) выполняется постоянно; но ведь чтобы программе среагировать на ваше нажатие мышью нужно выполнить код обработчиков соответствующих сообщений; если информация в окне вашей программы изменилась, обычно компонент не рисует себя сразу, а лишь отправляет сообщение на перерисовку самому себе, и чтобы отрисовать область "измененного" компонента тоже нужно выполнить определенный код. Естественно изза вашего "постоянного выполнения" программа никак не будет реагировать на внешние действия или чтото перерисовывать.
 Есть 2 решения: использовать многопоточность или переодически вызывать Application.Processmessages, которая "отвечает" на внешние воздействия. Всё это и многое другое вы могли бы найти, поискав информацию по указанной выше функции, как вам советовал Эксперт Мережников Андрей.
 |  
|   | eclipse (статус: Посетитель), 26 сентября 2012, 19:34 [#4]:eis, в процедуре, после момента добавления в Memo и после сохранения в файл или после чтения с файла напишите Application.ProcessMessages. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |