Einzelnen Beitrag anzeigen

ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: SHGetFileInfo und Dateien in der Path-Umgebungsvariable

  Alt 7. Jan 2005, 12:01
Danke für den Tip Mathias!

Hier nun die überarbeitete Funktion:
Delphi-Quellcode:
function GetIconFromFile(szFilename: string;
  fSmall: boolean = false): TIcon;
const
  dwIconFlags : array[boolean]of dword =
    (SHGFI_LARGEICON,SHGFI_SMALLICON);
var
  fi : TSHFileInfo;
  aPath : String;
begin
  Result := nil;
  ZeroMemory(@fi,sizeof(fi));

  szFileName := Copy(szFileName, 0, LastDelimiter('.', szFileName) + 3);

  if ExtractFilePath (szFileName) <> 'then
    begin
      aPath := szFileName;
    end
  else
    begin
      aPath := FileSearch(szFileName, GetEnvironmentVariable('Path'));
      if ExtractFilePath (aPath) = 'then
        aPath := szFileName ;
    end;

  SHGetFileInfo(pchar(aPath),FILE_ATTRIBUTE_NORMAL, fi, sizeof(fi),
    SHGFI_ICON or SHGFI_USEFILEATTRIBUTES or dwIconFlags[fSmall]);

  if(fi.hIcon <> 0) then
    begin
      Result := TIcon.Create;
      if(Result <> nil) then
        Result.Handle := fi.hIcon;
    end;
end;
Die Funktion verschluckt sich noch bei Pfaden die Punkte enthalten. Wird die Zeile szFileName := Copy(szFileName, 0, Pos('.', szFileName) + 3); weggelassen funktioniert das zwar auch, allerdings gibt es dann Probleme wenn der Pfad noch irgendwelche Parameter (z.B. notepad.exe c:\temp\irgendwas.txt) enthält.

Wenn jemand dafür noch eine Lösung hätte wäre ich dankbar dafür.

[EDIT]Achso, ParamStr / ParamCount funktionieren hier nicht, weil der Pfad nicht über die Kommandozeile übergeben wird.

[EDIT 2]
Code:
szFileName := Copy(szFileName, 0, Pos('.', szFileName) + 3);
durch
Code:
szFileName := Copy(szFileName, 0, LastDelimiter('.', szFileName) + 3);
ersetzt.
  Mit Zitat antworten Zitat