Obwohl jetzt keine Fehlermeldung kommt, ganz glücklich bin ich dann doch nicht, denn da scheint immer noch der Wurm drin zu liegen. Mal ein kleines Beispiel. Diesen Code kriege ich keine zwei mal ausgeführt, nur sehe ich keinen Fehler drin. Zwar ist das kein Code aus meinem vorherigen Problem, denn ich nutze nicht alle Icons, aber trotzdem. Wieso ist danach das Programm ausgelastet?
Delphi-Quellcode:
uses
ShellApi;
procedure TForm1.Button1Click(Sender: TObject);
var
SearchPath, FilePath: String;
sr: TSearchRec;
sfi: TSHFileInfo;
Icon: TIcon;
begin
SearchPath := 'c:\windows\system32\';
if FindFirst(SearchPath + '*.*', faAnyFile or faDirectory, sr) = 0 then
try
repeat
FilePath := SearchPath + sr.Name;
if SHGetFileInfo(PChar(FilePath), 0, sfi, SizeOf(sfi), SHGFI_ICON or SHGFI_SMALLICON) <> 0 then
begin
Icon := TIcon.Create;
try
Icon.Handle := sfi.hIcon; //<<< hinzugefügt
ImageList1.AddIcon(Icon);
finally
Icon.Free;
end;
end;
until FindNext(sr) <> 0;
finally
FindClose(sr);
end;
ImageList1.Clear;
ShowMessage('Laden fertig, und schon wieder gelöscht.');
end;
Was mir auffällt ist der Teil
SHGetFileInfo(...) <> 0
. Zwar steht das nicht in der
MSDN, denn da steht, dass bei Nichtnutzung von SHGFI_EXETYPE oder SHGFI_SYSICONINDEX der Erfolgsfall mit ungleich Null angezeigt wird, laut einer anderen Quelle gilt das auch für SHGFI_ICON und SHGFI_SMALLICON, womit hier ein Fehler vorliegen würde, aber selbst wenn, das dürfte nicht das Problem sein.
//EDIT
Scheint jetzt zu klappen. Anscheinend habe ich vorhin eine Zeile vergessen. Trotzdem, wieso der Unterschied? Mit der Zeile, alles ok, ohne Auslastung.