Newsgroup: it.comp.lang.delphi
Titolo: Trovare l'icona di sistema per le cartelle

Utilizzo questo codice per trovare l'icona appropriata per un file, da
visualizzare ad esempio in una ListView o in una TreeView, dopo avere
creato la lista di icone di sistema da associare:
function GetAssociatedIcon(const strFileName: TFileName;
 
const fSmallIcon: Boolean = True): Integer;
var
	SHFileInfo: TSHFileInfo;
	intIconType: Integer;
begin
	// Inizializzazioni:
	Result := -1;
	try
		intIconType := SHGFI_SMALLICON;
		if not fSmallIcon then intIconType := SHGFI_LARGEICON;
		// Riempie la struttura SHFileInfo per operare sui file:
		FillChar(SHFileInfo, SizeOf(TSHFileInfo), 0);
		if (SHGetFileInfo(PChar(strFileName),
				FILE_ATTRIBUTE_NORMAL,
				SHFileInfo,
				SizeOf(TSHFileInfo),
				SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or
intIconType) <> 0) then
			// Ricava l'indice dell'icona nella lista di
sistema delle icone file:
			try
				Result := SHFileInfo.iIcon;
			finally
				DestroyIcon(SHFileInfo.hIcon); //
distruggo l'handle all'icona
			end;
	except
		on E:Exception do
			begin
				Result := -1;
				MsgErrHandler(STR_ERR_GETFILEICON + '"'
+ strFileName + '"', E.Message);
			end;
	end;
end;
Ma le cartelle mi vengono visualizzate sempre con l'icona del file non
riconosciuto, visto che giustamente non č un tipo di file. Ma come
faccio a forzare l'icona di sistema per le icone? (che per di piů varia
da Win95 a XP).
Sergio Pappalardo aka Silver Black
--- posted by geoForum on 
http://www.delphiedintorni.it

creato la lista di icone di sistema da associare:
io utilizzo questi stralci di codice presi da non so
quale articolo un bel pò di tempo fa ... vedi un pò se
fanno al caso tuo ... 
---------- inizializzazione dellalista delle icone ----
procedure TFormMain.FormCreate(Sender: TObject);
var
 SysIL: HImageList;
 SFI: TSHFileINfo;
begin
  SysIL := SHGetFileInfo('', 0, SFI, SizeOF(SFI), SHGFI_SYSICONINDEX or
    SHGFI_SMALLICON);
  if SysIL <> 0 then
    ImageListShell.Handle := SysIL;
[...]
-----------------------------------------------------
--- procedure per il recupero dell'indice dell'icona --
function TFormMain.GetShellIconIndex(const AFile: String; Attrs: DWORD):Integer;
var
    SFI: TSHFileInfo;
begin
   SHGetFileInfo(PChar(AFile), Attrs, SFI, SizeOf(TSHFileInfo),
       SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
   Result := SFI.iIcon;
end;
-----------------------------------------------------------
per avere l'icona dei un file puoi usare come Attrs
FILE_ATTRIBUTE_NORMAL, invece, per avere l'icona di una
cartella basta che usi FILE_ATTRIBUTE_DIRECTORY oppure
puoi provare se c'è uno di questi attributi che vada
bene in generale per trovare l'icona dei file o delle
cartelle indifferentemente, li trovi o con il
completamento automatico o se desideri vedere le
dichiarazioni, facendo nel code editor CTRL+CLICK sulla
parola FILE_ATTRIBUTE_NORMAL o FILE_ATTRIBUTE_DIRECTORY
indifferentemente.
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it

cartella basta che usi FILE_ATTRIBUTE_DIRECTORY oppure
Quello che non capisco č... perchč tu sei un genio e io no!!!! ;-) ;-)
GRAZIE INFINITE!!! Nel mio codice non usavo "Attrs", ma mettevo di 
predefinito la costante FILE_ATTIRBUTE_NORMAL. Adesso, grazie a te, ho 
aggiunto il parmetro per ricevere gli attributi in base al tipo di file.
P.S.
Il tuo indirizzo fittizio č kajjamaster... posso chiederti se giocavi a 
WingCommander piů di 10 anni fa?


--- posted by geoForum on 
http://www.delphiedintorni.it
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it