Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#8

AW: Funktion ob Dateityp änderbares Symbol hat?

  Alt 17. Mär 2014, 11:10
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.

Geändert von Popov (17. Mär 2014 um 11:44 Uhr)
  Mit Zitat antworten Zitat