我在Desktop的画布上绘制了这段代码:
procedure Paint; {Pseudo code}
begin
repeat
DrawOnWindow();
sleep(100);
Application.ProcessMessages;
until;
end;
function DrawOnWindow(Handle: HWND; X, Y: Integer; BMP : TBitmap): Boolean;
{ actual code }
var
Canvas : TCanvas;
DC : HDC;
begin
Result:= FALSE;
Assert(Handle > 0); // if change is possible then
try
DC := GetDC(Handle); // the dc is freed after repainting
Canvas := TCanvas.Create;
Canvas.Handle := DC;
Canvas.Draw(x, y, bmp);
Canvas.Free;
Result := TRUE;
ReleaseDC(Handle,DC);
except
end;
end;
绘图工作正常。但它冻结了我的程序,我不得不使用Application.ProcessMessages来“解冻”它。但Application.ProcessMessages正在创建自己的问题。
所以我在一个帖子中移动了代码。现在它可以工作一段时间(< 1分钟),然后画布不再被绘制(但线程正在运行)。