Delphi XE2中的“ uses”错误

用户名

嗨,我对以下代码有疑问,问题是我似乎在使用“ use”时忘记了一个组件,因为它始终会给我错误“ tagBITMAP”,代码如下:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,Vcl.Graphics,Vcl.Imaging.jpeg,Windows;



procedure capturar_pantalla(nombre: string);

// Function capturar() based in :
// http://forum.codecall.net/topic/60613-how-to-capture-screen-with-delphi-code/
// http://delphi.about.com/cs/adptips2001/a/bltip0501_4.htm
// http://stackoverflow.com/questions/21971605/show-mouse-cursor-in-screenshot-with-delphi
// Thanks to Zarko Gajic , Luthfi and Ken White

var
  aca: HDC;
  tan: TRect;
  posnow: TPoint;
  imagen1: TBitmap;
  imagen2: TJpegImage;
  curnow: THandle;

begin

  aca := GetWindowDC(GetDesktopWindow);
  imagen1 := TBitmap.Create;

  GetWindowRect(GetDesktopWindow, tan);
  imagen1.Width := tan.Right - tan.Left;
  imagen1.Height := tan.Bottom - tan.Top;
  BitBlt(imagen1.Canvas.Handle, 0, 0, imagen1.Width, imagen1.Height, aca, 0,
    0, SRCCOPY);

  GetCursorPos(posnow);

  curnow := GetCursor;
  DrawIconEx(imagen1.Canvas.Handle, posnow.X, posnow.Y, curnow, 32, 32, 0, 0,
    DI_NORMAL);

  imagen2 := TJpegImage.Create;
  imagen2.Assign(imagen1);
  imagen2.CompressionQuality := 60;
  imagen2.SaveToFile(nombre);

  imagen1.Free;
  imagen2.Free;

end;

//



begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

有人可以帮我吗?

大卫·赫弗南(David Heffernan)

这里的问题是范围之一。两个Windows单元和所述Graphics单元限定一个命名的类型TBitmap编译器可以看到两种类型,作用域规则是最后定义的是编译器使用的类型。

由于此Windows单元是在之后引入的Graphics,因此您的代码正在查找单元中TBitmap定义Windows但是您想要在Graphics单位中定义的那个

通过在uses子句中Windows出现在前面来解决该问题Graphics

现在,或者,您可以不使用uses子句,并完全指定类型:Vcl.Graphics.TBitmap我想您会同意重新安排uses子句是更可取的。

顺便说一句,我不太喜欢这段代码。它完全忽略了检查Win32 API返回值是否有错误。我建议一旦可以编译,就添加错误检查。Win32Check来自的功能SysUtils是您的朋友。并且还需要尝试/最终保护位图的生命周期。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章