delphi(долгая процедура на нажатии кнопки, два нажатия)

Компьютеры программирование программы windows Delphi

Допустим, есть процедура на кнопке, которая выполняется несколько минут. Мы на жали на эту кнопку, через 10 секунд нажали еще раз. Что произойдет? Она выполнится полностью 2 раза или выполнится только вторая? А, может, есть другие варианты?

Примечание:
Конечно, события windows в процедуре обрабатываю периодически. Т.е. вся процедура выполнится полностью(т.е. начнется и завершится(а это несколько минут)) во время вызова Application.ProcessMessage? Про потоки знаю, спасибо. Не задумывался о помещении долгих процедур в поток. Надо будет задуматься)) И за Java рано или поздно возьмусь, когда начну разрабатывать приложения для мобильных платформ.

Примечание:
Мдаа... Засунул все, что делалось в обработчике нажатия кнопки в поток, появилось куча проблем. Постоянно выскакивает Access violation. Вначале при присваивании переменной типа OleVariant переменной Webbrowser1.OleObject.Document.Links, потом при выполнении метода click у IHTMLElement(с этим я так и не справился). Обратно, наверное, придется переделывать. Хотя, не хотелось бы...
Ответы:
Если ты нажмёшь на кнопку, то у тебя весь интерфейс зависнет, пока процедура не завершится.
При этом ты можешь временно передавать управление из долгой процедуры на восстановление формы с помощью метода Application.processMessages, в таком случае повторный клик будет обработан в момент отработки Application.processMessages. Если же ты во время работы обработчика клика ни разу не вызовешь Application.processMessages, то повторный клик будет обработан только тогда, когда первый вызов обработчика клика завершится и форма выйдет из зависшего состояния.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.