![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как заставить работать таймер? [D7, WinXP]
Nikfel © (2009-11-21 22:34:00)Почему-то не работает таймер хотя все верно создано. Просто когда уберешь из кода обработку 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 23:24:00) [1]
> nikfel (21.11.09 23:03) [3]
result := 0 еще не забудь
nikfel (2009-11-21 23:03:00) [2]Нашел что добавить надо:
var ps:TPaintStruct;
...
wm_paint:begin
BeginPaint(wnd,ps);
EndPaint(wnd,ps);
end;
nikfel (2009-11-21 22:45:00) [3]А что именно должно там быть чтобы таймер работал. Просто в любом случае, если есть wm_paint, таймер не работает.
DVM (2009-11-21 22:37:00) [4]
> Просто когда уберешь из кода обработку wm_paint, то работает,
> а мне надо чтобы с wm_paint работало.
Почти все сообщения Windows нуждаются в возвращении некого результата, у тебя же в том же wm_paint пусто.