Skocz do zawartości

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


Recommended Posts

Napisano

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.

Napisano

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

Napisano

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 :)

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...