delphi – Canvas不允许绘图
发布时间:2020-12-15 09:14:56 所属栏目:大数据 来源:网络整理
导读:我想从整个屏幕绘制一个截图到TForm1 Canvas. 此代码在Delphi XE3中运行良好 procedure TForm1.Button1Click(Sender: TObject);var c,scr: TCanvas; r,r2: TRect;begin c := TCanvas.Create; scr := TCanvas.Create; c.Handle := GetWindowDC(GetDesktopWind
我想从整个屏幕绘制一个截图到TForm1 Canvas.
此代码在Delphi XE3中运行良好 procedure TForm1.Button1Click(Sender: TObject); var c,scr: TCanvas; r,r2: TRect; begin c := TCanvas.Create; scr := TCanvas.Create; c.Handle := GetWindowDC(GetDesktopWindow); try r := Rect(0,200,200); form1.Canvas.CopyRect(r,c,r); finally ReleaseDC(0,c.Handle); c.Free; end; 现在我想首先将屏幕截图复制到另一个画布. procedure TForm1.Button1Click(Sender: TObject); var c,200); scr.CopyRect(r,r); <-- Error,canvas does not allow drawing form1.Canvas.CopyRect(r,scr,canvas does not allow drawing finally ReleaseDC(0,c.Handle); c.Free; end; 解决方法
如果您需要使用其他画布,则必须分配HDC,例如
var WindowHandle:HWND; ScreenCanvas,BufferCanvas: TCanvas; r,r2: TRect; ScreenDC,BufferDC :HDC; BufferBitmap : HBITMAP; begin WindowHandle := 0; ScreenCanvas := TCanvas.Create; BufferCanvas := TCanvas.Create; ScreenDC:=GetWindowDC(WindowHandle); ScreenCanvas.Handle := ScreenDC; BufferDC := CreateCompatibleDC(ScreenDC); BufferCanvas.Handle := BufferDC; BufferBitmap := CreateCompatibleBitmap(ScreenDC,GetDeviceCaps(ScreenDC,HORZRES),VERTRES)); SelectObject(BufferDC,BufferBitmap); try r := Rect(0,200); BufferCanvas.CopyRect(r,ScreenCanvas,r); form1.Canvas.CopyRect(r,BufferCanvas,r); finally ReleaseDC(WindowHandle,ScreenCanvas.Handle); DeleteDC(BufferDC); DeleteObject(BufferBitmap); BufferCanvas.Free; ScreenCanvas.Free; end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |