Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как на WinAPI заменить компонент Timer?

26K
03 февраля 2008 года
APROMIX
11 / / 09.07.2007
Как на WinAPI заменить компонент Timer? Нужно чтобы определенное событие выполнялось 5 сек, но программа при этом не засыпала и не останавливалась, тобишь Sleep () не подходит. Спасибо.
1.9K
03 февраля 2008 года
andriano
474 / / 10.01.2008
Так и называется - timer.
см. ф-ю WinAPI SetTimer.
261
03 февраля 2008 года
ahilles
1.5K / / 03.11.2005
следует отметить, что если автор пишет консольное приложение, то чтобы таймер работал, то обязательно в программе должно быть что-то типа этого:
 
Код:
While GetMessage(Msg,0,0,0) do
 begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
 end;
26K
04 февраля 2008 года
APROMIX
11 / / 09.07.2007
Такой код есть:
Цитата:
begin
if not CreateE2DWindow then begin
MessageBox(0, 'Невозможно создать окно.', 'Ошибка', MB_ICONSTOP);
Exit;
end;

if not E2DCreate then begin
DestroyWindow(E2DWindow);
Exit;
end;

while True do
if PeekMessage(E2DMsg, 0, 0, 0, PM_NOREMOVE) then
if not GetMessage(E2DMsg, 0, 0, 0) then
Break
else begin
TranslateMessage(E2DMsg);
DispatchMessage(E2DMsg);
end
else
if flgActive then
begin
OnIdle
end else
WaitMessage;
end.

26K
04 февраля 2008 года
APROMIX
11 / / 09.07.2007
Спасибо всем. Но как в даном примере использовать таймер. Ну хоть скромненький примерчик.
1.9K
04 февраля 2008 года
andriano
474 / / 10.01.2008
Обычно портебность выдержать определенный темп или временные интервалы возникает в диалоговом (в широком смысле) окне.
Поэтому и использование таймера, естественно, осуществляется через оконную роцедуру, которая получает все внешние сообщения, в том числе от таймера.
Зачем это может понадобиться в консольном приложении, не совсем понятно. А у тебя стиль написания соответствует именно консольному приложению, хотя, вроде, и создаются какие-то окна.
Сформулируй исходную задачу, может, тебе нужно совсем не то, что ты думаешь, а может, ты пытаещься применить для решения задачи неадекватные средства.

И еще, попытки скрестить часть функциональности Delphi и часть функциональности WinAPI зачастую приводят к непредсказуемому поведению программ, т.к. функции Delphi, как правило, представляют собой обертку для функций WinAPI, снабженную дополнительными переменными, которые нужно правильно инициализировать. Пытаясь работать в обход функциональности Delphi ты не производишь нужной инициализации переменных, из-за чего другие компоненты начинают работать неправильно, не совсем правильно или иногда неправильно.
261
05 февраля 2008 года
ahilles
1.5K / / 03.11.2005
пример с использованием функции обратного вызова

Код:
var
   TID:DWORD;

procedure TimerProc(Handle:HWND;uMsg:DWORD;idEvent:DWORD;dwTime:DWORD);stdcall;
begin
   MessageBox(0,'1','2',0);
end;

...............................................

TID:=SetTimer(0,0,2000,@TimerProc);//2000 - время задержки в миллисекундах

While GetMessage(Mesg,0,0,0) do
 begin
  TranslateMessage(Mesg);
  DispatchMessage(Mesg);
 end;
26K
05 февраля 2008 года
APROMIX
11 / / 09.07.2007
Все работает! Спасибо ответившим. Особенно ahilles.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог