Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Icons in Listbox (https://www.delphipraxis.net/54518-icons-listbox.html)

N47R0N 5. Okt 2005 20:18


Icons in Listbox
 
Hi

so ich hab geschaft einen Filemanager zu coden nun geht es um das
aussehen, meine Frage ist nun wie man es hinbekmmt das wenn in der
Listbox nun die namen der Files die sich z.B. auf Laufwerk C:/ befinden
auch immer das Pasende Icon dazu gepackt wird.

also wenn es eine Winrar File ist dann steht am anfang gans klein das
Winrar Icon und dann der Filename. das selbe auch bei allen anderen
Formaten und Ordnern.

wie kann ich das realisieren?

alzaimar 5. Okt 2005 21:08

Re: Icons in Listbox
 
Das geht über die Shellextensions. Schau doch mal in der ShellAPI, da müsste es was geben. Ich meine, bei www.swissdelphicenter.ch was gesehen zu haben

N47R0N 6. Okt 2005 06:34

Re: Icons in Listbox
 
nach was soll ich bei swissdelphicenter suchen? wen ich Shellextensions
eingebe findet er nichts

SirThornberry 6. Okt 2005 06:47

Re: Icons in Listbox
 
es gibt mehrere Variante an die Icons zu kommen. Zum einen ExtractAssociatedIcon zum anderen
gibt es die Möglichkeit eine Imagelist zu nehmen (fImgList)
Delphi-Quellcode:
//zum Initialisieren (zur einmal ausführen)
var LSFI: TSHFileInfo;
[...]
  LHandle := SHGetFileInfo('', 0, LSFI, SizeOf(LSFI), SHGFI_SYSICONINDEX or SHGFI_OPENICON);
  if LHandle <> 0 then
  begin
    fImgList.Handle := LHandle;
    fImgList.ShareImages := True;
  end;
[...]
//zum Icon holen
var LInfo: TSHFileInfo;
[...]
  SHGetFileInfo(PChar(LFilename),0,LInfo,SizeOf(TSHFileInfo),SHGFI_SYSIconIndex or SHGFI_TYPENAME);
  fImgList.GetBitmap(LInfo.iIcon, fTmpBitmap);
der Quelltext ist ein Auszug aus einem meiner Programme, daher auch die nicht immer ganz eindeutigen VariablenNamen

Flocke 6. Okt 2005 07:32

Re: Icons in Listbox
 
@SirThornberry:
1. mit 'nem leeren Dateinamen geht's auch?
2. Wieso SHGFI_OPENICON?

Hier mal eine kleine Funktion, die ich mir Anno 98 geschrieben hab' (könnte man lt. obigen Post dann wohl auch vereinfachen) - liefert das Handle für kleine oder große Symbole:
Delphi-Quellcode:
function GetShellImageListHandle(fSmall: boolean): THandle;
var
  sfi: TShFileInfo;
  WinDir: string;
begin
  SetLength(WinDir, MAX_PATH);
  GetWindowsDirectory(PChar(WinDir), MAX_PATH);
  FillChar(sfi, SizeOf(sfi), 0);
  if fSmall
    then Result := SHGetFileInfo(PChar(WinDir), 0, sfi, SizeOf(sfi),
                                 SHGFI_SYSICONINDEX or SHGFI_SMALLICON)
    else Result := SHGetFileInfo(PChar(WinDir), 0, sfi, SizeOf(sfi),
                                 SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
end;
[Nachtrag]

Ach so: für einzelne Dateien und Ordner kannst du dann ebenfalls mit SHGetFileInfo mit dem Parameter SHGFI_SYSICONINDEX den Image-Index ermitteln.

MaBuSE 6. Okt 2005 12:29

Re: Icons in Listbox
 
Zitat:

Zitat von N47R0N
so ich hab geschaft einen Filemanager zu coden nun geht es um das
aussehen, meine Frage ist nun wie man es hinbekmmt das wenn in der
Listbox nun die namen der Files die sich z.B. auf Laufwerk C:/ befinden
auch immer das Pasende Icon dazu gepackt wird
....
wie kann ich das realisieren?

Wie Du an die passenden Icon kommst, zeigten Dir die letzten 2 Beiträge, aber wie kommen die Icons in die Liste?
  • Einfach mal eine TComboBox, TImageList und ein TListView auf ein leeres Form legen.
  • Dann die TListView Komponente markieren und F1 drücken -> Es wird nun die hilfe von Delphi zu TListView geöffnet.
  • Dann in der Hilfe Eigenschaften anklicken -> Es wird das Fenster "Eigenschaften von TListView" mit der Liste aller Eigenschaften angezeigt
  • Items auswählen -> Es wird die Hilfe Seite "Items (Eigenschaft von TCustomListView)" angezeigt.
  • "Delphi-Beispiel" anklicken -> Es kommt ein Auswahlfenster "gefundene Themen"
  • "Column, Items, ViewStyle, SmallImages, LargeImages, ImageIndex, AddObject, Objects (Beispiel)" auswählen
  • lesen und den Quelltext in das Form kopieren.
(Ich habe das gerade in D7 getestet)
Viel Spaß
MaBuSE


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 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