Skocz do zawartości

Timer - niby banał, a jednak....


Charm

Recommended Posts

Witam
Niedawno zacząłem sobie pisać w API no i trafiłem na problem - wygląda na banalny ale jakos nie moge obczajć o co biega
Program nie chodzi tak jak powinien - wydaje mi sie że powinien narysować kółka pod katem 45 stopni zaczynając od lewego górnego rogu ale program rysuje tylko 1 kółko w rogu no i nie odpowiada wogule - musze resetowac uruchomiony program - powiedzcie mi co robię nie tak bo juz 2 dzień siedze nad tym i nie mogę nic wykminić :(

program progs;
uses
Windows,
Messages;
Const
nazwa : PCHAR ='blabla' ;

Var
i , j : integer ;

Function WinMain( hw:HWND ; un:UINT ; wP:WPARAM ; lP:LPARAM ):LRESULT; stdcall;

Var
dc : HDC ;
ps : PAINTSTRUCT;

begin
Result := 0;
case un of
WM_CREATE:
begin
SetTimer (hw, 1, 1000, Nil) ;
end;
WM_TIMER :
InvalidateRect(hw, Nil, FALSE) ;

WM_PAINT :
begin
i:=i+10;
j:=j+10;
dc := BeginPaint (hw, ps) ;
Ellipse(dc, i, j, i+20, j+20);
EndPaint (hw, ps) ;
end;
WM_DESTROY :
begin
KillTimer (hw, 1 ) ;
PostQuitMessage (0) ;
end;
else
Result := DefWindowProc(hw, un, wP, lP);
end;
end;

Procedure init;
Var
hw : HWND;
wndclass : TWNDCLASS;

begin
wndclass.style := CS_HREDRAW or CS_VREDRAW ;
wndclass.lpfnWndProc := @WinMain ;
wndclass.cbClsExtra := 0 ;
wndclass.cbWndExtra := 0 ;
wndclass.hInstance := hInstance ;
wndclass.hIcon := LoadIcon (0 , IDI_APPLICATION) ;
wndclass.hCursor := LoadCursor (0 , IDC_ARROW) ;
wndclass.hbrBackground := COLOR_WINDOW ;
wndclass.lpszMenuName := Nil ;
wndclass.lpszClassName := nazwa ;

if RegisterClass(wndclass)=0 then
MessageBox (0, 'Program wymaga windy NT',
nazwa, MB_ICONERROR) ;

hw:= CreateWindow (nazwa, 'blablabla',
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
0, 0, hInstance, 0) ;

ShowWindow (hw, SW_SHOW) ;
UpdateWindow (hw) ;
end;

Var
msg : TMsg;

BEGIN
i:=1;
j:=1;
init;
while (GetMessage (msg, 0, 0, 0)) do ;
begin
TranslateMessage (msg) ;
DispatchMessage (msg) ;
end;
Halt(msg.wParam);
END.

Link do komentarza
Udostępnij na innych stronach

kolko pod katem 45 stopni? znaczy zeby wygladalo jak przestrzennie obrocone o ten kat, czy tylko ma byc widoczny kawalek - 45 st.

Program sie blokuje bo nie obsluguje zdarzen w petli:

while (GetMessage (msg, 0, 0, 0)) do ;
begin
TranslateMessage (msg) ;
DispatchMessage (msg) ;
end;

Nie potrzebnie dodales srednik po do. Zrob pierwsza linie while tak:
while (GetMessage (msg, 0, 0, 0)) do

Link do komentarza
Udostępnij na innych stronach

Twardy - wielkie dzięki
No właśnie ten średnik hehe - teraz chodzi dobrze :D - jak nieraz się coś samemu napisze i sprawdza jak nie chodzi to kurde błędów nie widać.
Tyle razy przeglądałem ten programik i nie widziałem tego średnika.
Z tym kątem to moze zamieszałem bo chodziło mi tylko o odchylenie od osi X - tak jak jest w programiku
A już zaczynałem wątpić w swoje umiejętności :)

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...