加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读