Einzelnen Beitrag anzeigen

SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Welche Auflösungen besitzt ein *.ico-File

  Alt 15. Feb 2007, 13:07
Hi ...

Nee, hift leider nicht, denn es wird immer 32x32 zurückgegeben,
auch wenn das Icon höhere Auflösungen enthält. Ich glaube das
muss über GetIconInfo ablaufen.

Das Handle auf mein Icon in meiner gewünschten Auflösung bekomme ich so:
(aus den 'Abgründen' des Internets)

Delphi-Quellcode:
function GethIcon(FileName: String; icoSize: Cardinal; icoIndex: integer = 0): Cardinal;
var DeskTopISF: IShellFolder; IExIcon: IExtractIcon; PathPidl: PItemIDList; hIconL, hIconS: HIcon;
begin
 Result := 0;
 {this function uses the IExtractIcon to get an e.g. 48x48 icon Handle
from a file that Has the Icon Bitmaps in it, like an Icon File (.ICO),
an executable (.EXE) and a library (.DLL)}


 if SHGetDesktopFolder(DeskTopISF) <> NOERROR then Exit;
 PathPidl := nil;
 if DeskTopISF.GetUIObjectOf(0, 1, PathPidl, IID_IExtractIconA, nil, IExIcon) <> NOERROR then Exit;
 if (IExIcon.Extract(PChar(FileName), icoIndex, hIconL, hIconS,
     icoSize or (16 shl 16)) = NOERROR) and (hIconL <> 0) then Result := hIconL;
 DestroyIcon(hIconS);
end;
Das funktioniert (leider) auch, wenn die entsprechende Datei kein Icon in meiner gewünschten Auflösung besitzt. Windows vergrößert das Icon dann und das möchte ich (in besserer Qualität) lieber selber machen.
Hinterher geht das wohl nicht mehr, deshalb möchte ich irgendwie vorher erfragen ob z.B. ein 48x48-Icon enthalten ist und falls nicht, dann lese ich lieber das 32x32-Icon aus und vergrößere es selber (per gr32)

Dankbar für jeden weitern Ansatz, grüßt ...
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat