|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Win32 API | Delphi | Странности с Winapi Timer |
|
Delphi - Win32 API | Delphi | Странности с Winapi Timer
|
Пользователь Сообщения: 74 |
Еще возник такой вопрос. В модуле mmsystem есть функция TimeSetEvent
Я пишу процедуру типа таймера. Вот, что получается procedure FnTimerCallBack(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall; begin showmessage(''); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin timeSetEvent(5000, 0, @FnTimerCallBack, 0, TIME_PERIODIC); end; Т.е после нажатия на кнопку, через 5 сек появляется сообщение. У меня два вопроса 1) Почему форма появляется не сразу, а с задержкой(~2сек)?. В то время как, если закоментировать строчку в обработчике кнопки (//TimeSetEvent(5000, 0, @FnTimerCallBack, 0, TIME_PERIODIC); ) Форма появится сразу. 2) Как только средствами сделать, чтобы сначала появлялась заставка, а потом(через N секунд) окно? Заставкой может быть картинка. Окно создал так: CreateWindowEx... (короче зарегестрировал класс и дальше как обычно...) |
|
------- Отправлено: 00:19, 08-11-2005 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Попробуй вместо TIME_PERIODIC использовать TIME_ONESHOT. И ещё, убей событие таймера в FnTimerCallBack. Для этого надо сохранить значение, возвращаемое функцией timeSetEvent - идентификатор таймера, а затем в FnTimerCallback после обработки вызови timeKillEvent для этого идентификатора (timeKillEvent(TimerID)).
|
Отправлено: 20:11, 12-11-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 74
|
Профиль | Сайт | Отправить PM | Цитировать LeonidPr, напиши кусок кода. мне не очень понятно
|
------- Отправлено: 03:05, 13-11-2005 | #3 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать У меня нормально работает следующий код.
var Form1: TForm1; TimerID:MMRESULT; implementation {$R *.DFM} procedure TimeProc(uID,uMsg:UINT;dwUser,dw1,dw2:DWORD);stdcall; begin ShowMessage('Hello'); timeKillEvent(TimerID); end; procedure TForm1.Button1Click(Sender: TObject); begin TimerID:=timeSetEvent(5000,5000,TimeProc,0,TIME_ONESHOT); end; |
Отправлено: 13:57, 13-11-2005 | #4 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать 1. Вообще-то, если не нужно большой точности таймера, то функциями TimeXXX пльзоваться не рекомендуется. Они достаточно тяжёлые.
Отличие от SetTimer и GetTickCount в том, что в windows 9x они имеют разрешение ~18 мс. В windows NT и далее разрешение всех таймеров (кроме счётчика квантов, который 10 нс.) 1 мс. Поэтому, воспользуйтесь лучше классом TTimer (он использует SetTimer). 2. Чтобы окно появлялось сразу, сделайте UpdateWindow (сразу после Show) |
|
Отправлено: 10:10, 14-11-2005 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Win32 API | Нужна помошь по API функциям! | vasika_hk | Программирование и базы данных | 2 | 23-05-2006 09:51 | |
Win32 API | Дозвон | XCodeR | Программирование и базы данных | 5 | 08-04-2006 12:26 | |
Delphi - Win32 API | Delphi | ФОКУС-раствориться в воздухе. | Mavlyudov | Программирование и базы данных | 9 | 18-11-2005 08:59 | |
WinAPI|Wininet API & Threads | MadGod | Программирование и базы данных | 2 | 03-10-2005 12:40 | |
Win32 API | Неизвестные функции | Savant | Программирование и базы данных | 9 | 02-03-2005 10:18 |
|