Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Странности WinApi


Автор: welt 10.11.2005, 00:26
возник такой вопрос. В модуле 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... (короче зарегестрировал класс и дальше как обычно...)

Автор: Romikgy 10.11.2005, 09:21
А чем обычный таймер не подошел?

Автор: ~FoX~ 10.11.2005, 09:37
Во первых замени TIME_PERIODIC на TIME_ONESHOT а то замучаешься мессаги закрывать smile Ну это так к слову.


Код

var
  Form1: TForm1;
  f: real;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  f:=GetTickCount;
  timeSetEvent(5000, 0, @FnTimerCallBack, 0, TIME_PERIODIC);
end;

procedure FnTimerCallBack(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;
var
  c, r: real;
begin
  c:=GetTickCount;
  r := c - f;
  showmessage(FloatToStr(r));
end;


Возвращает по чесному 5000 мсек. Так, что вероятно просто на глаз кажеться что чуть больше. В конце концов поставь не 5000, а 4 или 3 как больше нравиться

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)