AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit Shellicons...

Offene Frage von "FriFra"
Ein Thema von FriFra · begonnen am 19. Jun 2003 · letzter Beitrag vom 18. Jul 2003
Antwort Antwort
Seite 4 von 4   « Erste     234   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#31
  Alt 20. Jun 2003, 22:27
Moin FriFra, moin Marco,

ihr habt doch beide ein D7 Version.
In der müsste es doch den TShellTreeView/TShellListView geben.
Was zeigen denn die an?

Sollte es gehen, könnt ihr dann ja mal in den Sourcen nachsehen (sollte bei der Pro/Enterprise ja dabei sein) wie es dort gemacht wird.

Ich hab' die ShellShock Kompos und dort wird nicht mit dem Dateinamen sondern der ItemIDList gearbeitet.
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
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#32
  Alt 20. Jun 2003, 23:28
Mit TShellTreeView/TShellListView klappt es...

Aber ich werd im moment nicht ganz schlau daraus... wie kann ich diese Funktion aus TShellTreeView/TShellListView verwenden, wenn ich einen Dateinamen übergeben will?
Delphi-Quellcode:
function GetShellImage(PIDL: PItemIDList; Large, Open: Boolean): Integer;
var
  FileInfo: TSHFileInfo;
  Flags: Integer;
begin
  Flags := SHGFI_PIDL or SHGFI_SYSICONINDEX;
  if Open then Flags := Flags or SHGFI_OPENICON;
  if Large then Flags := Flags or SHGFI_LARGEICON
  else Flags := Flags or SHGFI_SMALLICON;
  SHGetFileInfo(PChar(PIDL),
                0,
                FileInfo,
                SizeOf(FileInfo),
                Flags);
  Result := FileInfo.iIcon;
end;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#33
  Alt 21. Jun 2003, 00:01
Moin FriFra,

mit der Methode ParseDisplayName des Interface IShellFolder sollte man eine ITEMIDLIST die zum Namen gehört erhalten.
Gemacht hab' ich das allerdings noch nicht.
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
Christian Seehase
(Co-Admin)

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

Re: Problem mit Shellicons...

  Alt 18. Jul 2003, 16:36
Moin FriFra,

jetzt hab' ich das mal gemacht:

Delphi-Quellcode:
// uses SHLOBJ,SHELLAPI;

var
  isfWork : IShellFolder;
  piidWork : PItemIdList;
  dwDummy : DWORD;
  fiWork : TSHFileInfo;
  wsWork : WideString;

begin
  // Interface auf IShellLink holen
  SHGetDesktopFolder(isfWork);
  // Vielleicht geht auch nur die Extension
  wsWork := 'Pfad der Datei';
  // Weil Borland ja bei Pointern immer var Parameter nimmt ist ein Dummy erforderlich
  dwDummy := 0;
  // ItemIdList des Pfades holen
  isfWork.ParseDisplayName(0,nil,PWideChar(wsWork),dwDummy,piidWork,dwDummy);
  // Und die Info abfragen
  SHGetFileInfo(PChar(piidWork),0,fiWork,SizeOf(fiWork),SHGFI_PIDL or SHGFI_ICON or SHGFI_SMALLICON);
  // fiIcon.iIcon enthält jetzt auch den Index in der SystemImageList, hIcon das Handle
end;
Bei mir funzt es, aber das tat's ja auch schon vorher

Ich weiss etwas spät
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
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#35

Re: Problem mit Shellicons...

  Alt 18. Jul 2003, 17:26
Leider funktioniert auch dieser Code nicht:
http://www.frifra.de/Temp/iconindex.JPG

Deinen Code habe ich wie folgt implementiert:
Delphi-Quellcode:
function TMain.GetShellIcon(FileName: string): integer;
var
  isfWork : IShellFolder;
  piidWork : PItemIdList;
  dwDummy : DWORD;
  fiWork : TSHFileInfo;
  wsWork : WideString;
begin
Result:=0;
  // Interface auf IShellLink holen
  SHGetDesktopFolder(isfWork);
  //Falls ein Laufwerksbuchstabe übergeben wurde...
  if Length(FileName) = 1 then
    FileName := FileName + ':';
  //Laufwerke sollten mit \ enden...
  if (Length(FileName) = 2) and (copy(FileName, length(FileName), 1) = ':') and
    (copy(FileName, length(FileName), 1) <> '\') then
    FileName := FileName + '\';

  // Dateiname; Vielleicht geht auch nur die Extension
  wsWork := FileName;
  // Weil Borland ja bei Pointern immer var Parameter nimmt ist ein Dummy erforderlich
  dwDummy := 0;
  // ItemIdList des Pfades holen
  isfWork.ParseDisplayName(0,nil,PWideChar(wsWork),dwDummy,piidWork,dwDummy);
  // Und die Info abfragen
  SHGetFileInfo(PChar(piidWork),0,fiWork,SizeOf(fiWork),SHGFI_PIDL or SHGFI_ICON or SHGFI_SMALLICON);
  // fiWork.iIcon enthält jetzt auch den Index in der SystemImageList, hIcon das Handle
    try
    //IconIndex liefern...
    Result := fiWork.iIcon
  finally
    // you are responsible for destroying the icon handle
    DestroyIcon(fiWork.hIcon);
  end;
end;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Problem mit Shellicons...

  Alt 18. Jul 2003, 19:04
Moin FriFra,

komisch. Das ist doch eigentlich genauso, wie der ShellTreeView es macht, und, wenn ich nicht irre, bei dem gings doch.

Versuch mal SHGI_ICON gegen SHGFI_SYSICONINDEX zu tauschen. Du brauchst ja nur den Index.
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
Antwort Antwort
Seite 4 von 4   « Erste     234   


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:00 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