Delphi中的图标螺纹加载
发布时间:2020-12-15 09:12:12 所属栏目:大数据 来源:网络整理
导读:使用Delphi 2009,试图制作一个启动器. 为了使它“快速”,我真的想在后台线程中加载图标. 我使用过这里找到的解决方案: Can 48×48 or 64×64 icons be obtained from the Vista Shell? 如果不在线程中运行,这可以正常工作. 一旦我把它放在一个线程中,一些图
使用Delphi 2009,试图制作一个启动器.
为了使它“快速”,我真的想在后台线程中加载图标. 我使用过这里找到的解决方案: 如果不在线程中运行,这可以正常工作. 所以,问题是: /拉尔斯 编辑: if SHGetFileInfo( PChar( aFile ),FILE_ATTRIBUTE_NORMAL,SFI,SizeOf( TSHFileInfo ),SHGFI_ICON or SHGFI_LARGEICON or SHGFI_SHELLICONSIZE or SHGFI_SYSICONINDEX or SHGFI_TYPENAME or SHGFI_DISPLAYNAME ) <> 0 then begin if not Assigned( aIcon ) then aIcon := TIcon.Create; aImgList := GetImageListSH( SHIL_FLAG ); aIndex := SFI.iIcon; if aImgList <> 0 then aIcon.Handle := ImageList_GetIcon( aImgList,aIndex,ILD_NORMAL ); end; 这并没有任何不同之处. 编辑2: procedure TIconLoader.Execute; var Item : TGridItem; I : TIcon; begin inherited; while not terminated do begin Item := nil; if assigned(FOnNeedGridItem) then begin Synchronize( procedure begin FOnNeedGridItem(Self,Item); end ); end; if assigned(Item) then begin GetIconFromFile(Item.FFilename,I,SHIL_EXTRALARGE); Synchronize( procedure begin Item.SetIcon(I); end ); // I.Free; end else Terminate; end; end; 解决方法
SHGetFileInfo的文档指定在调用函数之前必须初始化COM.由于COM初始化是每个线程,因此需要在线程中初始化COM.这意味着从线程的Execute方法调用CoInitialize或CoInitializeEx.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |