Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2011, 14:43   #1
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию Как обрабатывать сообщение отсутствия действий в окне?

Как обрабатывать сообщение отсутствия действий в окне? Вообще, есть ли такое сообщение у Винды? Application.OnIdle - это не то. Он работает только когда есть какие-нибудь события, например, движение мыши. А как в Дельфе раелизовать полноценный OnIdle?
anyx вне форума Ответить с цитированием
Старый 25.02.2011, 15:10   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,003
По умолчанию

Цитата:
Он работает только когда есть какие-нибудь события, например, движение мыши.
вообще то наоборот, когда нет сообщений(следовательно событий) оно и вызывается.

ну при отказе от vcl это легко делается(если OnIdle делает не тоже самое)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.02.2011, 21:15   #3
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ну при отказе от vcl это легко делается
=) Понимаю. Это будет, но потом. Пока я к такому не готов (и мой движок). Нужна рабочая обработка события, пока на VCL.
anyx вне форума Ответить с цитированием
Старый 27.02.2011, 05:40   #4
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от anyx Посмотреть сообщение
Как обрабатывать сообщение отсутствия действий в окне? Вообще, есть ли такое сообщение у Винды? Application.OnIdle - это не то. Он работает только когда есть какие-нибудь события, например, движение мыши. А как в Дельфе раелизовать полноценный OnIdle?
Проверка BOOL WINAPI PeekMessage - false возвращает, если нету сообщений. http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Просто цикл сделай "бесконечный". Только Application.ProcessMessages();
вызывай временами, чтобы сообщения обрабатывались. А в остальном твой код "крутиться" будет.
An1ka вне форума Ответить с цитированием
Старый 27.02.2011, 12:07   #5
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Просто цикл сделай "бесконечный". Только Application.ProcessMessages();вызыв ай временами, чтобы сообщения обрабатывались. А в остальном твой код "крутиться" будет.
Бесконечный цикл уже реализован в объекте TApplication. Т.е. мне нужно реализовать проверку поверх VCL.
anyx вне форума Ответить с цитированием
Старый 27.02.2011, 17:04   #6
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Как выполнить какой-то процесс тогда, когда пользователь не работает с моим приложением?

Пример на DELPHI
Создайте процедуру, которая будет вызываться при событии Application.OnIdle.

Обьявим процедуру:
Код:
{Private declarations}
procedure IdleEventHandler(Sender: TObject; var Done: Boolean);
В разделе implementation опишем процедуру:

Код:
procedure TForm1.IdleEventHandler(Sender: TObject; var Done: Boolean);
begin
{Do a small bit of work here}
Done := false;
end;
В методе Form'ы OnCreate - укажем что наша процедура вызывается на событии Application.OnIdle.

Код:
Application.OnIdle := IdleEventHandler;
Событие OnIdle возникает один раз - когда приложение переходит в режим "безделья" (idle). Если в обработчике переменной Done присвоить False событие будет вызываться вновь и вновь, до тех пор пока приложение "бездельничает" и переменной Done не присвоено значение True.

http://articles.org.ru/cn/showdetail.php?cid=7253
An1ka вне форума Ответить с цитированием
Старый 27.02.2011, 17:54   #7
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Done := false;
Спасибо! Я так и делал, только не присваивал переменной Done значение False, поэтому, видимо, и не работало.
anyx вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция действий мыши в свернутом окне senia Win Api 12 18.11.2010 16:38
Как обрабатывать данную ситуацию? Arkuz БД в Delphi 2 08.12.2008 02:51
Как заставить компонент TTrackBar обрабатывать события мыши? Никки Общие вопросы Delphi 5 29.08.2008 14:17
Как обрабатывать нажатие на кнопке? AidarBik Win Api 13 05.02.2008 19:58
как обрабатывать события с клавы? proglamer Паскаль, Turbo Pascal, PascalABC.NET 13 25.10.2007 11:41