gpt4 book ai didi

delphi - Canvas 不允许绘图

转载 作者:行者123 更新时间:2023-12-03 15:11:20 25 4
gpt4 key购买 nike

我想将整个屏幕的屏幕截图绘制到 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, 0, 200, 200);
form1.Canvas.CopyRect(r, c, r);

finally
ReleaseDC(0, c.Handle);
c.Free;
end;

现在我想先将屏幕截图复制到另一个 Canvas 上。有没有办法在不出现此错误的情况下执行此操作?

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, 0, 200, 200);

scr.CopyRect(r,c,r); <-- Error, canvas does not allow drawing
form1.Canvas.CopyRect(r, scr, r); <-- Error, canvas does not allow drawing

finally
ReleaseDC(0, c.Handle);
c.Free;
end;

最佳答案

如果您需要使用额外的 Canvas ,则必须分配 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),
GetDeviceCaps(ScreenDC, VERTRES));
SelectObject(BufferDC, BufferBitmap);

try
r := Rect(0, 0, 200, 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;

关于delphi - Canvas 不允许绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15811404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com