Registriert seit: 29. Mai 2002
37.621 Beiträge
Delphi 2006 Professional
|
Bildschirm wird neugezeichnet
6. Mär 2006, 00:05
Ich habe gerade verscuht diesen Tipp von Raymond Chen umzusetzen:
http://blogs.msdn.com/oldnewthing/ar.../29/54728.aspx
Delphi-Quellcode:
var
TimeRect : TRect;
procedure TimerCallback(hWnd: THandle; uMsg: UINT; IDTimer: UINT; dwTime: DWORD);
begin
KillTimer(hWnd, IDTimer);
InvalidateRect(hWnd, @TimeRect, False);
end;
function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam): lresult; stdcall;
var
ps : TPaintStruct;
st : SYSTEMTIME;
dwTimeToNextTick : DWORD;
szTime : PChar;
lenTime : Cardinal;
clrBk : COLORREF;
begin
Result := 0;
case uMsg of
WM_CREATE:
begin
TimeRect.Left := 10;
TimeRect.Top := 25;
TimeRect.Right := TimeRect.Left + 75;
TimeRect.Bottom := TimeRect.Top + 16;
end;
WM_PAINT:
begin
BeginPaint(hWnd, ps);
if RectVisible(ps.hdc, TimeRect) then
begin
GetSystemTime(st);
dwTimeToNextTick := 1000 - st.wMilliseconds;
SetTimer(hWnd, 1, dwTimeToNextTick, @TimerCallback);
end;
lenTime := GetTimeFormat(LOCALE_USER_DEFAULT, 0, nil, nil, nil, 0);
if lenTime > 0 then
begin
GetMem(szTime, lenTime);
try
GetTimeFormat(LOCALE_USER_DEFAULT, 0, nil, nil, szTime, lenTime);
SetWindowText(hWnd, szTime);
clrBk := SetBkColor(ps.hdc, GetSysColor(COLOR_BTNFACE) + 1);
ExtTextOut(ps.hdc, TimeRect.Left, TimeRect.Top, ETO_CLIPPED or ETO_OPAQUE, @TimeRect, szTime, lenTime - 1,
nil);
SetBkColor(ps.hdc, clrBk);
finally
FreeMem(szTime);
end;
end;
EndPaint(hWnd, ps);
end;
WM_DESTROY:
PostQuitMessage(0);
else
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
end;
end;
Aber bei mir flackert der ganze Bildschirm. Und das sogar, wenn das Fenster minimiert ist. aber wenn es minimiert ist, sollte es doch gar keine Paint Nachrichten bekommen Wo hab eich da den entscheidenden Fehler gemacht?
Michael Ein Teil meines Codes würde euch verunsichern.
|
|
Zitat
|