if (TempIcon.Height or TempIcon.Width)<>32 then ImageIndex := ImgList.AddIcon(FInvalidIconFile) Else ImageIndex := ImgList.AddIcon(TempIcon);(je suis aller un peu vite et j'ai pas vu) mais au moins je sais que c'est plus précisement où ça qui plante. Sinon merci quand même Bravemouse ;-) (je pourrais piquer des codes dans Ultimate).
TempIcon.Handle := DLLExtractAssociatedIcon(Application.Handle,PWideChar(FDirectory+'\'+Attr.cFileName),indexIcon);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionprocedure TFileListView.UpdtFiles; var TmpChar:array[0..2048] of char;//NOUVEAUTES ICI<<<<<<< IndexFile,FileCount:Cardinal; TempIcon:TIcon; IndexIcon:Word; Attr:WIN32_FIND_DATA; Shell32DLLHandle,Kernel32DLLHandle,SearchHandle:THandle; DLLExtractAssociatedIcon:function(hInst: HINST; lpIconPath: PWideChar; var lpiIcon: Word): HICON; stdcall; DLLFindNextFile:function(hFindFile: THandle; var lpFindFileData: TWIN32FindData): BOOL; stdcall; begin Try //Préparation if Assigned(FOnProgress) then FOnProgress(Self,FLVUPSPrepa,0,1); IndexIcon := 0; IndexFile := 0; FileCount := 0; TempIcon := TIcon.Create; TempIcon.SetSize(32,32); ImgList.Clear; Items.Clear; {Chargement des DLL Information: ce code à été trouver sur developpez.com et a été publier par Olivier Lance Lien:http://olance.developpez.com/articles/delphi/creation-dll/ (25/10/2014) Le code ici présent est modifier} if Assigned(FOnProgress) then FOnProgress(Self,FLVUPSLoadShell32DLL,0,1); Shell32DLLHandle := LoadLibrary('shell32.dll');//Chargement de Shell32.dll if Shell32DLLHandle = 0 then EFileListView.Create('shell32.dll n''a pas pu être charger'); DLLExtractAssociatedIcon := GetProcAddress(Shell32DLLHandle,'ExtractAssociatedIconW');//Chargement de la fonction if Assigned(FOnProgress) then FOnProgress(Self,FLVUPSLoadKernel32DLL,0,1); Kernel32DLLHandle := LoadLibrary('kernel32.dll');//Chargement de kernel32.dll if Kernel32DLLHandle = 0 then EFileListView.Create('kernel32.dll n''a pas pu être charger'); DLLFindNextFile := GetProcAddress(Kernel32DLLHandle,'FindNextFileW');//Chargement de la fonction //*** //Recherche //évaluation du nombre de fichier SearchHandle := FindFirstFile(Pchar(FDirectory+'\'+Mask),Attr); while DLLFindNextFile(SearchHandle,Attr)=True do begin Inc(FileCount); if Assigned(FOnProgress) then FOnProgress(Self,FLVUPSSearchFileCount,FileCount,0); end; SetLength(FilesProperties,IndexFile+5); //Recherche des fichiers IndexFile := 0; SearchHandle := FindFirstFile(PChar(FDirectory+'\'+Mask),Attr); Repeat begin if Assigned(FOnProgress) then FOnProgress(Self,FLVUPGetFiles,IndexFile,FileCount); if (attr.cFileName = PChar('.'))or(attr.cFileName = '..') then if attr.cFileName = PChar('.') then begin if FCurrentDirName <> '$HIDE-DIR$' then With Items.Add do begin Caption := FCurrentDirName; if Assigned(FCurrentDirIcon) then ImageIndex := ImgList.AddIcon(FCurrentDirIcon) else ImageIndex := ImgList.AddIcon(FInvalidIconFile) end; end; if attr.cFileName = '..' then begin if FParentDirName <> '$HIDE-DIR$' then With Items.Add do begin Caption := FParentDirName; if Assigned(FCurrentDirIcon) then ImageIndex := ImgList.AddIcon(FCurrentDirIcon) else ImageIndex := ImgList.AddIcon(FInvalidIconFile) end; end Else With Items.Add do begin Caption := Attr.cFileName;//Affichage du nom du fichier TempIcon.ReleaseHandle;//Libération du Handle StrCopy(TmpChar,PChar(FDirectory+'\'+Attr.cFileName));//Copy du String//NOUVEAUTES ICI<<<<<<< TempIcon.Handle := ExtractAssociatedIcon(Application.Handle,TmpChar,indexIcon);//Extraction de l'icone if (TempIcon.Height or TempIcon.Width)<>32 then ImageIndex := ImgList.AddIcon(FInvalidIconFile) Else ImageIndex := ImgList.AddIcon(TempIcon); end; FilesProperties[IndexFile] := Attr; end; if Assigned(FOnProgress) then FOnProgress(Self,FLVUPGetFiles,IndexFile,FileCount); Until DLLFindNextFile(SearchHandle,Attr)<>True; finally FindClose(SearchHandle); TempIcon.Free; FreeLibrary(Shell32DLLHandle); FreeLibrary(Kernel32DLLHandle); end; end;
28 oct. 2014 à 15:19
29 oct. 2014 à 02:48
malheureusement j"ai pas du temps en se Moment Pour faire Traité cette Bibliothèque ...; a vous de Jouer Monsieur : MiniApp
Cordialement : Brave