Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Как заставить работать таймер?   Найти похожие ветки 

 
Nikfel   (2009-11-21 22:34) [0]

Почему-то не работает таймер хотя все верно создано. Просто когда уберешь из кода обработку wm_paint, то работает, а мне надо чтобы с wm_paint работало. Под скажите, пожалуйста, что не так? Заранее спасибо. Вот код для примера:
Program Api;

uses
 Windows, Messages;

var
window: TWndClassEx;
Mwindow: HWND;
Mmsg: MSG;

// Процедура обработки сообщений
function WindowProc(wnd: HWND; msg: integer;  wparam: WPARAM; lparam: LPARAM):LRESULT;STDCALL;
begin
case msg of
 wm_paint:;
 wm_create:settimer(wnd,7,1000,nil);
 wm_timer:begin
   case wparam of
     7:showwindow(wnd,sw_hide);
   end;
 end;
 WM_Destroy:
  begin
   killtimer(wnd,7);
   PostQuitMessage(0);
   Result:=0;
   Exit;
  end;
  else
   Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
end;

// Ристрация созданого класса
begin
window.cbSize     :=sizeof (window);
window.style      :=CS_HREDRAW or CS_VREDRAW;
window.lpfnWndProc:=@WindowProc;
window.cbClsExtra :=0;
window.cbWndExtra :=0;
window.hInstance  :=HInstance;
window.hIcon      :=LoadIcon (0,IDI_APPLICATION);
window.hCursor    :=LoadCursor (0,IDC_ARROW);
window.hbrBackground:=Color_BtnFace+12;
window.lpszMenuName :=nil;
window.lpszClassName:="Main_Window";
RegisterClassEx (window);
// Создание окна на основе созданного класса
Mwindow:=CreateWindowEx(0,"Main_Window","First_WinAPI_Program",WS_OVERLAPPEDWIND OW,100,100,300,300,0,0,Hinstance,nil);
// Показать созданное окно
SHOWWINDOW(Mwindow,SW_Show);
 // Цикл обработки сообщений
while GetMessage(Mmsg,0,0,0) do
 begin
  TranslateMessage(Mmsg);
  DispatchMessage(Mmsg);
 end;
end.


 
DVM ©   (2009-11-21 22:37) [1]


> Просто когда уберешь из кода обработку wm_paint, то работает,
>  а мне надо чтобы с wm_paint работало.

Почти все сообщения Windows нуждаются в возвращении некого результата, у тебя же в том же wm_paint пусто.


 
nikfel   (2009-11-21 22:45) [2]

А что именно должно там быть чтобы таймер работал. Просто в любом случае, если есть wm_paint, таймер не работает.


 
nikfel   (2009-11-21 23:03) [3]

Нашел что добавить надо:
var ps:TPaintStruct;
...
wm_paint:begin
 BeginPaint(wnd,ps);

 EndPaint(wnd,ps);
end;


 
DVM ©   (2009-11-21 23:24) [4]


> nikfel   (21.11.09 23:03) [3]

result := 0 еще не забудь



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.089 c
15-1338799914
Empleado
2012-06-04 12:51
2013.03.22
iOS - security guide


2-1332437524
sasha198407
2012-03-22 21:32
2013.03.22
ошибка Exception EAccessViolation in module Project1.exe


15-1353504827
Artem
2012-11-21 17:33
2013.03.22
Перевести проект с Builder C++ на Visual Studio


2-1337605535
TStas
2012-05-21 17:05
2013.03.22
Плохо ловится WM_DRAWCLIPBOARD ричедитом


2-1332606068
leklerk
2012-03-24 20:21
2013.03.22
Отслеживание изменений пользователя