Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Icons SHGetFileInfo生成黑色背景的图标_Icons_Transparency_Freepascal_Lazarus - Fatal编程技术网

Icons SHGetFileInfo生成黑色背景的图标

Icons SHGetFileInfo生成黑色背景的图标,icons,transparency,freepascal,lazarus,Icons,Transparency,Freepascal,Lazarus,我对SHGetFileInfo有问题。我在Lazarus 1.0.14中使用FPC 2.6.2,代码如下: procedure x; var FI: SHFILEINFO; icon: ticon; begin SHGetFileInfo('app.exe', 0, FI, SizeOf(FI), SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_LARGEICON); icon := TIcon.Create; icon.Handle :

我对SHGetFileInfo有问题。我在Lazarus 1.0.14中使用FPC 2.6.2,代码如下:

procedure x;
var
  FI: SHFILEINFO;
  icon: ticon;
begin
  SHGetFileInfo('app.exe', 0, FI, SizeOf(FI), SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_LARGEICON);

  icon := TIcon.Create;
  icon.Handle := FI.hIcon;
  icon.SaveToFile('extracted.ico');
end;
问题是它会生成黑色背景的图标文件,而不是透明的。下面是它的样子:

当我在Delphi中编译相同的代码时,它工作得非常好。图标有透明的背景


如果有人能帮我解决这个问题,我将不胜感激:-)

我以前也有同样的问题。LCL似乎不能完全支持TIcon的alpha,所以您必须使用另一个类似的组件。我试过TKIcon,效果很好。你可以在这里找到

我发布了一个提取图标的示例程序。这很简单

procedure ExtractIconAndSave(xpath: string);
var
  FileInfo: SHFILEINFO;
  Icon: KIcon.TIcon; //Don't confused with Graphics.TIcon
begin
  //Get icon handle
  SHGetFileInfo(PChar(xpath), 0, FileInfo, SizeOf(FileInfo), SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_LARGEICON);
  //Check if SHGetFileInfo get the icon handle
  if FileInfo.hIcon <> 0 then
  begin
    //Use kIcon's TIcon - It supports alpha 32bpp
    Icon := KIcon.TIcon.Create;
    try
      //Load icon handle in TKIcon and save it in a file
      Icon.LoadFromHandle(FileInfo.hIcon);
      Icon.SaveToFile('extracted.ico');
    finally
      DestroyIcon(FileInfo.hIcon);
      FreeAndNil(Icon);
    end;
  end;
end;  
过程ExtractIconAndSave(xpath:string);
变量
FileInfo:SHFILEINFO;
图标:KIcon.TIcon//不要与Graphics.TIcon混淆
开始
//获取图标句柄
SHGetFileInfo(PChar(xpath)、0、FileInfo、SizeOf(FileInfo)、SHGFI_SYSICONINDEX或SHGFI_图标或SHGFI_LARGEICON);
//检查SHGetFileInfo是否获得图标句柄
如果FileInfo.hIcon为0,则
开始
//使用kIcon的TIcon-它支持alpha 32bpp
图标:=KIcon.TIcon.Create;
尝试
//在TKIcon中加载图标句柄并将其保存在文件中
Icon.LoadFromHandle(FileInfo.hIcon);
Icon.SaveToFile('extracted.ico');
最后
销毁图标(FileInfo.hIcon);
FreeAndNil(图标);
终止
终止
终止

我以前也有同样的问题。LCL似乎不能完全支持TIcon的alpha,所以您必须使用另一个类似的组件。我试过TKIcon,效果很好。你可以在这里找到

我发布了一个提取图标的示例程序。这很简单

procedure ExtractIconAndSave(xpath: string);
var
  FileInfo: SHFILEINFO;
  Icon: KIcon.TIcon; //Don't confused with Graphics.TIcon
begin
  //Get icon handle
  SHGetFileInfo(PChar(xpath), 0, FileInfo, SizeOf(FileInfo), SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_LARGEICON);
  //Check if SHGetFileInfo get the icon handle
  if FileInfo.hIcon <> 0 then
  begin
    //Use kIcon's TIcon - It supports alpha 32bpp
    Icon := KIcon.TIcon.Create;
    try
      //Load icon handle in TKIcon and save it in a file
      Icon.LoadFromHandle(FileInfo.hIcon);
      Icon.SaveToFile('extracted.ico');
    finally
      DestroyIcon(FileInfo.hIcon);
      FreeAndNil(Icon);
    end;
  end;
end;  
过程ExtractIconAndSave(xpath:string);
变量
FileInfo:SHFILEINFO;
图标:KIcon.TIcon//不要与Graphics.TIcon混淆
开始
//获取图标句柄
SHGetFileInfo(PChar(xpath)、0、FileInfo、SizeOf(FileInfo)、SHGFI_SYSICONINDEX或SHGFI_图标或SHGFI_LARGEICON);
//检查SHGetFileInfo是否获得图标句柄
如果FileInfo.hIcon为0,则
开始
//使用kIcon的TIcon-它支持alpha 32bpp
图标:=KIcon.TIcon.Create;
尝试
//在TKIcon中加载图标句柄并将其保存在文件中
Icon.LoadFromHandle(FileInfo.hIcon);
Icon.SaveToFile('extracted.ico');
最后
销毁图标(FileInfo.hIcon);
FreeAndNil(图标);
终止
终止
终止

Lazarus 1.2的RC2可用。可能值得重新测试。Lazarus 1.2 RC2无法解决此问题。事实上,当我在Lazarus 1.2 RC2(32位版本,TKicon不支持64位)中编写并尝试代码示例时。附言:可能在1.4中?请参阅Lazarus 1.2的错误报告RC2。可能值得重新测试。Lazarus 1.2 RC2无法解决此问题。事实上,当我在Lazarus 1.2 RC2(32位版本,TKicon不支持64位)中编写并尝试代码示例时。附言:可能在1.4中?请参阅此错误报告