2014-01-15 4 views
0

SHGetFileInfo에 문제가 있습니다.SHGetFileInfo가 검은 색 배경의 아이콘을 생성합니다.

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; 

문제는 대신 투명 중독 검정색 배경 아이콘 파일을 생성이다 : 나는 나사로 1.0.14와 FPC 2.6.2를 사용하고, 여기에 코드입니다. 다음은이 같은 모습입니다 :

http://i.imgur.com/5BF3xbT.jpg

내가 델파이에서 동일한 코드를 컴파일 할 때, 그것은 완벽하게 작동합니다. 아이콘에는 투명 한 배경이 있습니다. 사람이 제가 같은 문제가 시간 전에이

답변

0

:-)이 문제를 해결하는 데 도움 수 있다면

나는 감사하겠습니다. LCL은 TIcon에 완전한 알파 지원을 할 수 없으므로 다른 유사한 구성 요소를 사용해야합니다. 나는 TKIcon을 시도하고 작동한다. 여기에서 찾을 수 있습니다 http://www.tkweb.eu/en/delphicomp/kicon.html

아이콘을 추출하는 샘플 절차를 게시합니다. 그것은 매우 간단합니다.

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; 
+0

감사합니다. 이것은 완벽하게 작동합니다. – user1269348

+0

Lazarus 1.2의 RC2를 사용할 수 있습니다. 재검사할만한 가치가 있을지도 몰라. –

+0

나사로 1.2 RC2로이 문제가 해결되지 않습니다. 실제로 내가 Lazarus 1.2 RC2 (32 비트 버전, TKicon은 64 비트를 지원하지 않음)에서 코드 샘플을 작성하고 시도했습니다. 피. 에스켈 씨 : 어쩌면 1.4? 이 버그 보고서 http://bugs.freepascal.org/view.php?id=19748을 참조하십시오. –