Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 249

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты! Я-новичок.
Проблема:
Непрерывно выполняется процедура, в которой происходит запись в файл ,а в компоненту Memo заносится информация (Memo1.lines.add(...).
При нажатии на мышь в любом месте Form1 информация в Memo перестает двигаться,появляется надпись: (не отвечает) в верхнем поле Form1, появляются "песочные часы", при этом процедура продолжает правильно выполняться(запись в файл продолжается). В режиме отладки этого эффекта нет. Как избежать этот эффект?

eis Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: eis (статус: Посетитель)
Вопрос отправлен: 21 августа 2012, 17:24
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 26 сентября 2012, 19:34; участников в обсуждении: 4.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 21 августа 2012, 20:51 [#1]:

поищите про application.processmessage. Или загоните процедуру в отдельный thread - только без обновления memo (кстати, зачем эти тормоза?), иначе нет смысла...
eis

eis (статус: Посетитель), 22 августа 2012, 15:51 [#2]:

Мережников Андрей:Ув.Андрей.Если не обновлять memo, то и проблемы не существует. Я не понял фразу " иначе нет смысла..."

31 августа 2012, 18:50: Вопрос перемещён из тематического раздела Delphi » Взаимодействие с Windows в раздел Delphi » Общие вопросы по программированию модератором Ерёмин А.А.

Amidamaru

Amidamaru (статус: 4-ый класс), 31 августа 2012, 20:58 [#3]:

Зачем вы пытаетесь сделать чтото сложное, когда не знаете самых элементарных вещей:
У вас какойто участок кода (цикл или рекурсия - не важно) выполняется постоянно; но ведь чтобы программе среагировать на ваше нажатие мышью нужно выполнить код обработчиков соответствующих сообщений; если информация в окне вашей программы изменилась, обычно компонент не рисует себя сразу, а лишь отправляет сообщение на перерисовку самому себе, и чтобы отрисовать область "измененного" компонента тоже нужно выполнить определенный код. Естественно изза вашего "постоянного выполнения" программа никак не будет реагировать на внешние действия или чтото перерисовывать.
Есть 2 решения: использовать многопоточность или переодически вызывать Application.Processmessages, которая "отвечает" на внешние воздействия. Всё это и многое другое вы могли бы найти, поискав информацию по указанной выше функции, как вам советовал Эксперт Мережников Андрей.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
eclipse

eclipse (статус: Посетитель), 26 сентября 2012, 19:34 [#4]:

eis, в процедуре, после момента добавления в Memo и после сохранения в файл или после чтения с файла напишите Application.ProcessMessages.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.02 сек.