Chcę, aby jakaś część kodu była wykonywana co 5 sekund, bez mocnego obciążania procesora. Ma tak samo działać jak zwykły komponent TTimer w Delphi. Jak zrobić Timer w WinAPI?
0
0
Ech - wiem, że to jest dział Newbie, bo Delphi teraz i tak nie działa.
Ale przecież tak łatwe rzeczy i wszystko inne, można wygooglować.
program najpierw_zawsze_googluj_i_kombinuj_samodzielnie;
{$APPTYPE GUI}
uses
WIndows, Messages;
const
App_Class = 'Ucz_Sie_Podstaw';
App_Title = 'Ucz się podstaw :)';
var
AppHandle : HWND;
function IntToStr(I : Longint) : string;
var
S : string[11];
begin
Str(I, S);
IntToStr := S;
end;
procedure Timer_Proc;
var
R : integer;
begin
R := Random(99999);
SetWindowText(AppHandle, PChar(IntToStr(R)));
end;
function WndProc(Wnd : HWND; uMsg : UINT; wPar : WPARAM; lPar : LPARAM) : LRESULT; stdcall;
begin
Result := 0;
AppHandle := Wnd;
case uMsg of
WM_CREATE :
begin
Randomize;
SetTimer(AppHandle, 0, 5000, @Timer_Proc);
end;
WM_DESTROY : PostQuitMessage(0);
else Result := DefWindowProc(Wnd, uMsg, wPar, lPar);
end;
end;
var
Msg : TMsg;
Wnd : TWndClass;
WindowHandle : HWND;
begin
with Wnd do
begin
lpfnWndProc := @WndProc;
hInstance := hInstance;
lpszClassName := App_Class;
hbrBackground := COLOR_WINDOW;
end;
Windows.RegisterClass(Wnd);
WindowHandle := CreateWindow(App_Class, App_Title,
WS_VISIBLE or WS_TILEDWINDOW,
300, 300, 500, 300, 0, 0, hInstance, nil);
ShowWindow(WindowHandle, SW_SHOW);
while GetMessage(Msg, 0, 0, 0) do
begin
DispatchMessage(Msg);
end;
end.
0
Ogromne dzięki.
0
Proszę bardzo. Dodam tylko, że Timer zatrzymujesz funkcją KillTimer.
Gdzie drugim parametrem jest cyfra oznaczająca zdarzenie, a ktora to
jako drugi parametr podałeś przy tworzeniu Timera. Wiecej w msdnie.
KillTimer(AppHandle, 0);