AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi SHGetFileInfo und Dateien in der Path-Umgebungsvariable
Thema durchsuchen
Ansicht
Themen-Optionen

SHGetFileInfo und Dateien in der Path-Umgebungsvariable

Ein Thema von ringli · begonnen am 6. Jan 2005 · letzter Beitrag vom 7. Jan 2005
Antwort Antwort
ringli

Registriert seit: 7. Okt 2004
517 Beiträge
 
Delphi 11 Alexandria
 
#1

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz