AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Symbol eines Dateityps

Ein Thema von Chewie · begonnen am 9. Aug 2003 · letzter Beitrag vom 11. Aug 2003
Antwort Antwort
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

Symbol eines Dateityps

  Alt 9. Aug 2003, 13:57
Ich bin gerade am Überlegen, wie ich das Standard-Icon eines Dateityps erhalten kann, wenn ich den Namen der Datei nicht weiß! Ich habe lediglich den Typ, was ja im Prinzip auch ausreicht. Allerdings scheidet da ja SHGetFileInfo bzw. ExtractAssociatedIcoc aus, da diese ja den ganzen Namen verlangen.
Also fällt mir nur der Weg ein über die Registry, über HKEY_CLASSES_ROOT. Dort ist ja bei dem Dateityp direkt oder indirekt das Icon aufgeführrt, allerdings weiß ich nicht, 1. mit welchen Möglichkeiten das Symbol referenziert werden kann und 2. ob es unter allen Windows-Verrsionen gleich aussieht.
Soweit ich das in meiner Registry gesehen hab, ist das Icon der Standard-Eintrag im Unterschlüssel DefaultIcon der Dateierweiterung. Falls es diesen Schlüssel nicht gibt, schau ich nach, ob es einen Schlüssel gibt mit dem Wert des Standardeintrags der jeweiligen Dateiendung. Gibt es diesen, so such ich dort nach dem DefaultIcon-Schlüssel. Existiert er auch dort nicht, weiße ich das Standard-Icon zu.

Ist das der einzige Weg oder können die Werte anders gespeichert werden? Und ist das bei allen Versionen gleich?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Symbol eines Dateityps

  Alt 9. Aug 2003, 14:45
hi,

erstelle einfach ein leeres temp file mit der endung dessen icon du suchst, dann kannst du die aktionen daran ausführen.
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Symbol eines Dateityps

  Alt 9. Aug 2003, 14:57
Moin Chewie,

such' hier mal nach Hier im Forum suchenSHGetFileInfo
Damit kann man, nur mit der Extension, das Icon aus der Systemimagelist laden
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Symbol eines Dateityps

  Alt 9. Aug 2003, 15:10
Bei SHGetFileInfo war ich schon, aber ich dachte, da muss der komplette Pfad angegeben werden. Ich habs zwar nicht ausprobiert, aber alles im PSDK deutet darauf hin. OK, ich werds halt mal ausprobieren.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Symbol eines Dateityps

  Alt 10. Aug 2003, 14:22
Also, ich habe es jetzt ausprobiert.

Wenn ich den ganzen Pfad einer existierenden Datei angebe, wird das Icon ermittelt, ansonsten nicht (SHGetFileInfo gibt 0 zurück).

So sieht mein Code aus, mit dem ich ein Icon testweise zeichnen will:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  FileIcon: TFileTypeIcon;
  Icon: TIcon;
begin
  FileIcon := TFileTypeIcon.Create;
  Icon := FileIcon.GetIcon('C:\irgendwas.txt');
  if Icon = nil then
  begin
    ShowMessage('war nix');
    Exit;
  end;
  Icon.Transparent := True;
  with PaintBox1 do
  begin
    Width := Icon.Width;
    Height := Icon.Height;
    Application.ProcessMessages;
    Canvas.Rectangle(-1, -1, Succ(Width), Succ(Height));
    Canvas.Draw(0, 0, Icon);
  end;
  Icon.Free;
  FileIcon.Free;
end;
GetIcon sieht so aus:
Delphi-Quellcode:
function TFileTypeIcon.GetIcon(const Extension: String): TIcon;
begin
  {...}

  Result := RetrieveIcon(Extension);
end;
Und RetrieveIcon:
Delphi-Quellcode:
function TFileTypeIcon.RetrieveIcon(const Extension: String): TIcon;
var
  FileInfo: TSHFileInfo;
begin
  Result := nil;
  if SHGetFileInfo(@Extension[1], 0, FileInfo, Sizeof(FileInfo), SHGFI_ICON
    or SHGFI_TYPENAME) = 0 then
  begin
    Exit;
  end;
  Result := TIcon.Create;
  Result.Handle := FileInfo.hIcon;
Ich habe es versucht mit ".txt", "*.txt" sowie mit dem Namen einer nicht vorhandenen Datei ("test.txt"). In allen Fällen liefert SHGetFileInfo 0.
Und eine eine temporäre Datei erstellen düfte wohl ganz schön auf die Performance drücken.
Habe ich da oben also nur einen Fehler gemacht oder funktioniert das grundsätzlich nicht?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Symbol eines Dateityps

  Alt 11. Aug 2003, 13:15
Niemand?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#7

Re: Symbol eines Dateityps

  Alt 11. Aug 2003, 13:27
Delphi-Quellcode:
function ShlImageIndex(asFileName: String; alSmall,
  alOpen: Boolean): Integer;
var fInfo : TSHFileInfo;
    dwFileAttr,
    dwFlags : Cardinal;
begin
  FillMemory(@fInfo, SizeOf(fInfo), 0);

  dwFlags := 0;
  dwFileAttr := 0;

  if alOpen then dwFlags := dwFlags or SHGFI_OPENICON;

  // normaler Dateiname oder bloß endung
  if (Length(asFileName) > 1) and (asFileName[1] = '.') then
     begin
       dwFlags := dwFlags or SHGFI_USEFILEATTRIBUTES;
       dwFileAttr := FILE_ATTRIBUTE_NORMAL;
     end;

  SHGetFileInfo(PChar(asFileName), dwFileAttr, fInfo, SizeOf(fInfo),
    SHGFI_SYSICONINDEX or dwFlags);

  Result := fInfo.iIcon;
end;
müsstes du nur noch anpassen
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Symbol eines Dateityps

  Alt 11. Aug 2003, 13:44
Alles klar. Ich musste das Flag SHGFI_USEFILEATTRIBUTES setzen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  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 05:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz