AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bestimmtes Icon aus Shell32.dll laden
Thema durchsuchen
Ansicht
Themen-Optionen

Bestimmtes Icon aus Shell32.dll laden

Ein Thema von Neutral General · begonnen am 13. Nov 2009 · letzter Beitrag vom 13. Nov 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

Re: Bestimmtes Icon aus Shell32.dll laden

  Alt 13. Nov 2009, 12:53
Zitat von OregonGhost:
Ich werfe nur mal dies ein:

When programs assume that the system will never change, episode 1

Fazit: Wenn's ein Ordner sein soll, kannst du dir das Icon des Ordners (oder eines beliebigen) mit MSDN-Library durchsuchenSHGetFileInfo besorgen. Aber lieber nicht aus irgendeiner System-DLL klauen.
Ich assume eigentlich normalerweise nicht, dass das System will never change
Deswegen habe ich ursprünglich ja nach irgendwelchen Konstanten gefragt

Die Methode mit SHGetFileInfo funktioniert soweit ganz gut
Die Icons sehen nur nicht.. so schön aus.. Mein Code:

Delphi-Quellcode:
var ico: TIcon;
    fi: TSHFILEINFO;
    len: Cardinal;
begin
  ico := TIcon.Create;
  try
    len := SizeOf(TSHFILEINFO);
    FillChar(fi,len,0);
    SHGetFileInfo('C:\Windows',0,fi,len,SHGFI_ICON or SHGFI_SMALLICON);
    ico.Handle := fi.hIcon;
    imlTreeView.AddIcon(ico); // TImageList
  finally
    ico.Free;
  end;
end;
Keine Angst - Das 'C:\Windows' ist nur testweise
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#12

Re: Bestimmtes Icon aus Shell32.dll laden

  Alt 13. Nov 2009, 12:55
Was heißt denn das, sie sehen nicht so schön aus? Fehlt die Transparenz? Falsche Farbtiefe? Unscharf?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#13

Re: Bestimmtes Icon aus Shell32.dll laden

  Alt 13. Nov 2009, 12:56
Zitat von Neutral General:
Deswegen habe ich ursprünglich ja nach irgendwelchen Konstanten gefragt
Konstanten sind och nix anderes als Zahlen, die ins Programm einkompilliert werden.

Es gibt sie aber, imho habe ich sie in der MSDN mal gesehen... Erinnere mich nur gerade nicht mehr an die passenden Suchbegriffe...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#14

Re: Bestimmtes Icon aus Shell32.dll laden

  Alt 13. Nov 2009, 12:58
Es gibt Konstanten für die ganzen MessageBox-Icons und so, aber ich glaube nicht für die Shell. Kann mich natürlich irren.

Zum Thema: Mir fiel gerade noch auf, du könntest bei SHGetFileInfo ja mal SHGFI_ICONLOCATION übergeben, mit den Informationen müsstest du das Icon ja selbst laden können. Vielleicht hast du dann mehr Kontrolle über Auflösung, Farbtiefe und so weiter.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#15

Re: Bestimmtes Icon aus Shell32.dll laden

  Alt 13. Nov 2009, 12:59
Siehe Anhang.

Edit:

Zitat von OregonGhost:
Es gibt Konstanten für die ganzen MessageBox-Icons und so, aber ich glaube nicht für die Shell. Kann mich natürlich irren.

Zum Thema: Mir fiel gerade noch auf, du könntest bei SHGetFileInfo ja mal SHGFI_ICONLOCATION übergeben, mit den Informationen müsstest du das Icon ja selbst laden können. Vielleicht hast du dann mehr Kontrolle über Auflösung, Farbtiefe und so weiter.
Ich habe es ja vorher selbst geladen. Da sah es aber genauso aus.
Miniaturansicht angehängter Grafiken
dialog_507.jpg  
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#16

Re: Bestimmtes Icon aus Shell32.dll laden

  Alt 13. Nov 2009, 13:01
SHGetFileInfo('C:\Windows',0,fi,len,SHGFI_ICON or SHGFI_SMALLICON); Der Aufruf führt glaube ich nicht immer zum Ziel, weil man ja auch Eigene Ordner-Icons (z.B. mit Hilfe des Explorers in den Ordnereigenschaften) setzen kann. Es gibt da noch ein Flag für, SHGFI_USEFILEATTRIBUTES, ich könnte mir vorstellen, dass das für Abhilfe sorgt. Wollte nur drauf hinweisen...
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#17

Re: Bestimmtes Icon aus Shell32.dll laden

  Alt 13. Nov 2009, 13:27
Zitat von wicht:
SHGetFileInfo('C:\Windows',0,fi,len,SHGFI_ICON or SHGFI_SMALLICON); Der Aufruf führt glaube ich nicht immer zum Ziel, weil man ja auch Eigene Ordner-Icons (z.B. mit Hilfe des Explorers in den Ordnereigenschaften) setzen kann. Es gibt da noch ein Flag für, SHGFI_USEFILEATTRIBUTES, ich könnte mir vorstellen, dass das für Abhilfe sorgt. Wollte nur drauf hinweisen...
Hi,

Wenn ich dieses Flag setze, bekomme ich ein falsches Icon. Also im Moment hat diese Methode 2 Nachteile:

1. SHGetFileInfo braucht ziemlich lange!
2. Das Icon sieht nicht so schön aus..

wenn noch jemand ne Idee hat wäre das super.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#18

Re: Bestimmtes Icon aus Shell32.dll laden

  Alt 13. Nov 2009, 13:34
Mal zuhause eingewählt, das hier habe ich gefunden. Ich benutze ein TListView, um die Icons anzuzeigen, und die sehen eigentlich alle ganz cremig aus. Vielleicht hilft das noch (obwohl es genau so aussieht wie dein Code...), ansonsten bin ich raus...

Delphi-Quellcode:
unit IconManager;

interface

uses
  Windows, SysUtils, Controls, ShellApi, Generics.Collections, Functions;

type
  TIconManager = class
  private
    FDirIndex: Integer;
    FImages: TImageList;
    FData: TDictionary<string, Integer>;
    function FGetIconIndex(Extension: string): Integer;
  public
    constructor Create;
    destructor Destroy; override;
    property DirIndex: Integer read FDirIndex;
    property Images: TImageList read FImages;
    property Icon[Extension: string]: Integer read FGetIconIndex;
  end;

implementation

{ TIconManager }

constructor TIconManager.Create;
var
  SysIL: uint;
  SFI: TSHFileInfoW;
begin
  FData := TDictionary<string, Integer>.Create();
  FImages := TImageList.Create(nil);
  SysIL := SHGetFileInfoW('', 0, SFI, SizeOf(SFI), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
  if SysIL <> 0 then
  begin
    FImages.Handle := SysIL;
  end;

  SHGetFileInfoW(PChar(GetSystemDir), 0, SFI, SizeOf(TSHFileInfoW), SHGFI_ICON or SHGFI_SMALLICON);
  FDirIndex := SFI.iIcon;
end;

destructor TIconManager.Destroy;
begin
  FImages.Free;
  FData.Free;
  inherited;
end;

function TIconManager.FGetIconIndex(Extension: string): Integer;
var
  SFI: TSHFileInfoW;
begin
  if not FData.ContainsKey(Extension) then
  begin
    SHGetFileInfoW(PChar(Extension), 0, SFI, SizeOf(TSHFileInfoW), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES);
    FData.Add(Extension, SFI.iIcon);
  end;
  Result := FData[Extension];
end;

end.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#19

Re: Bestimmtes Icon aus Shell32.dll laden

  Alt 13. Nov 2009, 13:58
@wicht: Danke, das hat mir geholfen
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#20

Re: Bestimmtes Icon aus Shell32.dll laden

  Alt 13. Nov 2009, 13:59
Danke für die Rückmeldung
Dann mal ein schönes Wochenende ...
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 01:44 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