У меня включен TTimer
, и предполагается, что он будет работать без остановок до тех пор, пока пользователь не остановит его.Тем не менее, это не работает таким образом.В событии OnTimer
он снова и снова обрабатывает сообщения окна в миллисекундах.
Например, вот фрагмент моего кода.
procedure TDXCommDlg.Timer2Timer(Sender: TObject);
begin
inherited;
if Scanning then
begin
Timer1.Enabled := false;
Timer2.Enabled := false;
while not PostMessage(Handle,WM_USER + 10,1234,5678) do;
Timer1.Enabled := true;
end;
end;
Что происходит, вот что.Пока TTimer включен и работает, вы перетаскиваете любые окна приложения или щелкаете по раскрывающемуся меню, и событие TTimer полностью перестает работать, хотя я предпринял меры предосторожности в другой части кода, чтобы этого не произошло.Однако, похоже, это не помогает.
Единственный способ перезапустить событие OnTimer
- это остановить и перезапустить таймер пользователем через событие TButton.
Тот же кодили программа работает нормально под Windows XP, скомпилированной с Delphi 7. В настоящее время я использую Windows 7 и Delphi 2010 для восстановления своей системы.
Я постараюсь дать вам больше информации.Я работаю над защищенным авторским правом программным обеспечением.
Существует определенная пользователем процедура, называемая HandleMsg.Это фактически обрабатывает сообщения последовательного порта.Для HandleMsg установлено событие Application onMessage;
Application.onMessage: = HandleMsg ();
PostMessage связано с событием onMessage приложения.
При каждом вызове PostMessage, он запускает событие onMessage, которое установлено в HandleMsg ().
Вот еще мой код:
procedure TDXCommDlg.HandleMsg(var
Msg: TMsg; var Handled: Boolean);
begin
Handled := false;
case Msg.message of
WM_USER + 10:
begin
if (Msg.wParam = 1111) and (Msg.lParam = 2222) then
begin
SendLanMessage;
Handled := true;
end
else if (Msg.wParam = 1234) and (Msg.lParam = 5678) then
begin
SendMessage;
Handled := true;
end
else
begin
if (Msg.wParam = 4321) then
begin
MainFrm.CloseWindow(TViewFrm(Msg.lParam).WinCap);
end;
end;
end;
end; { case } end;
HandleMsg () отвечает на PostMessage.Поправь меня, если я ошибаюсь.