delphi我看不出代码错误,请高手帮忙

来源:百度知道 编辑:UC知道 时间:2024/06/14 11:47:08
麻烦各位大侠看下下面的代码有错么?程序运行到最后一行有错误
var
scrn,cvs:TCanvas;
i,j,x,y: integer;
kkp:TPoint;
begin
scrn:=TCanvas.Create;
scrn.Handle:=GetDC(0);
cvs:=TCanvas.Create;
GetCursorPos(kkp);
x:=kkp.X;
y:=kkp.Y;
cvs.CopyRect(Rect(0,0,280,280),scrn,Rect(x-140,y-140,x+140,y+140));
错误提示是:programe raised exception class EInvalidOperation with message 'canvas does not allow drawing'.Process stopped.Use Step or to continue.
紧接着的后续代码是:
for i := 0 to 279 do
for j := 0 to 279 do
if cvs.Pixels[i,j]=TColor(RGB(152,248,88)) then showmessage('hello!');

没有找到lz采用方法的具体错误原因,不过貌似都说Tcanvas不推荐直接这么用,会引起没有not allocated而导致抛的这种错误,可以用下面方法来实现.

procedure TForm1.Button2Click(Sender: TObject);
var
my1:tbitmap;
scrn,cvs:TCanvas;
i,j,x,y: integer;
kkp:TPoint;
DC:HDC;
begin
my1:=TBitmap.Create;
scrn:=TCanvas.Create;
//DC:=GetDesktopWindow;
scrn.Handle:=GetDC(0);
cvs:=TCanvas.Create;
GetCursorPos(kkp);
x:=kkp.X;
y:=kkp.Y;

my1.Canvas.CopyRect(Rect(0,0,280,280),scrn,Rect(x-140,y-140,x+140,y+140));
for i := 0 to 279 do
for j := 0 to 279 do
if my1.Canvas.Pixels[i,j]=TColor(RGB(152,248,88)) then showmessage('hello!');
my1.Destroy;
end;