Win32 API | Delphi | Странности с Winapi Timer
Еще возник такой вопрос. В модуле 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... (короче зарегестрировал класс и дальше как обычно...) |
Попробуй вместо TIME_PERIODIC использовать TIME_ONESHOT. И ещё, убей событие таймера в FnTimerCallBack. Для этого надо сохранить значение, возвращаемое функцией timeSetEvent - идентификатор таймера, а затем в FnTimerCallback после обработки вызови timeKillEvent для этого идентификатора (timeKillEvent(TimerID)).
|
LeonidPr, напиши кусок кода. мне не очень понятно
|
У меня нормально работает следующий код.
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; |
1. Вообще-то, если не нужно большой точности таймера, то функциями TimeXXX пльзоваться не рекомендуется. Они достаточно тяжёлые.
Отличие от SetTimer и GetTickCount в том, что в windows 9x они имеют разрешение ~18 мс. В windows NT и далее разрешение всех таймеров (кроме счётчика квантов, который 10 нс.) 1 мс. Поэтому, воспользуйтесь лучше классом TTimer (он использует SetTimer). 2. Чтобы окно появлялось сразу, сделайте UpdateWindow (сразу после Show) |
Время: 07:05. |
Время: 07:05.
© OSzone.net 2001-