![]() |
viele shellicons in einem listview anzeigen
ich will bei einem suchscript die icons mit dem script von meinem letzten beitrag anzeigen. das klappt auch ganz gut, nur will ich diese in einem listview mit dem dateinamen anzeigen und so. wenn ich jetzt die icons in eine imagelist einfüge braucht das script sehr viel länger als wenn ich sie(zum testen) nur auf den bildschirm male. und das listview refresht bei jedem neu eingefügten icon. Wie kann ich die icons irgendwie anders speichern und in des listview einbinden?
|
Re: viele shellicons in einem listview anzeigen
BeginUpdate/EndUpdate mal ausprobieren. Damit blockierst du die Anzeige der LV, bis alle Objekte geladen sind. Vor dem Füllen der LV "BeginUpdate" aufrufen, wenn du alles drin hast, dann "EndUpdate". Und erst dann wird der Inhalt quasi angezeigt.
Ich kann nicht klagen. Ich habe eben mal die List-View-Demo aus den Win32-API-Tutorials ins Windows-Verzeichnis kopiert und gestartet. Die Demo liest ja alle Dateien im aktuellen Ordner ein und zeigt sie, samt Symbol, in der LV an. Hat nicht lange gedauert, und immerhin stecken in meinem 98er-Ordner ~280 Dateien. |
Re: viele shellicons in einem listview anzeigen
Man braucht die Icon gar nicht in die Liste einfügen.
1. System-Image-List-Handle besorgen
Delphi-Quellcode:
2. Shared-Delphi-Image-List anlegen + Handle setzen
var dwAttr : Cardinal;
fInf : TSHFileInfo; begin if alSmall then dwAttr := SHGFI_SMALLICON else dwAttr := SHGFI_LARGEICON; FillMemory(@fInf, SizeOf(fInf), 0); Result := SHGetFileInfo(PChar(GetWinDir), 0, fInf, SizeOf(fInf) , SHGFI_SYSICONINDEX or dwAttr); end;
Delphi-Quellcode:
3. Image-Index besorgen
if fSysImgLsts[alSmall] = nil then
begin fSysImgLsts[alSmall] := TCustomImageList.Create(nil); with fSysImgLsts[alSmall] do begin ShareImages := true; Handle := ShlImgs.SysImgLst(alSmall); end; end; Result := fSysImgLsts[alSmall];
Code:
das ganz du aber selber versuchen, damit man auch was dabei lernt, einfach mal im internet suchen
Siehe SHGetFileInfo
|
Re: viele shellicons in einem listview anzeigen
und wie kann ich die icons den listview einträgen zuweisen?
bis jetzt hab ichs so: ListView.Images:=ImageList; ListViewItem.ImageIndex:=ImageList.AddIcon(GetIcon (...)); GetIcon ist eine selbergemachte Funktion die des Icon mit der funktion von Sakura ermittelt und als TIcon zurückgibt. Beim Aufruf von ImageList.AddIcon() erhalte ich ja den Index des Icons als Rückgabe. Wenn ich des aber so mache refresht sich das ganze ListView bei jedem ImageList-update und es geht mit der Zeit(wenn viele icons da sind) noch mal länger zum eins hinzufügen. Die suche soll aber schnell gehen! BSP: 1 Suche ohne Icons-auslesen: 10 sek. 2 Suche mit Icons-auslesen und(zum test) mit canvas bloß auf den Bildschirm malen: 11 sek. 3 Suche mit Icons in des ImagelIst eintragen(ohne Listviewicons setzen): 30sek es soll aber immer so schnell gehen wie in Punkt 2 weil da ja die icons auch schon ausgelesen werden-> des Imagelist verschwendet viel zu viel zeit! |
Re: viele shellicons in einem listview anzeigen
Nicht verzagen, bei
![]() Du brauchst keine eigene Imageliste, du benutzt die aus dem System und holst dir bloß den Index des jeweiligen Symbols. Darum geht das auch im o.g. Beispiel ruck-zuck. |
Re: viele shellicons in einem listview anzeigen
ok danke
|
Re: viele shellicons in einem listview anzeigen
Aus den API-Tutorials werd ich einfach nicht schlau.
Ich möchte die Icons in ein TListView einbinden. Bis jatzt hab ich dieses Problem mit einer TImageList gelöst und den ListView-Items mit ImageIndex einen Bildindex zugewiesen. Aber wie ich oben schon geschrieben habe geht das zu langsam. Gibt's da nicht irgendeine VCL-Variante mit der ich dieses Problem lösen kann? Zitat:
2. So schnell ist das API-ListView aber auch wieder nicht! Da ist zum Beispiel das VirtualListView Demo von Delphi bissle schneller(oder der ShellListView Komponent in D7). |
Re: viele shellicons in einem listview anzeigen
Zitat:
Zitat:
|
Re: viele shellicons in einem listview anzeigen
Weil ich
1. Die gefundenen Einträge ständig aktualisieren will und nicht erst wenn fertig gesucht ist und 2. Das API-Tool nicht blick und bis jetzt alles mit VCL soweit fertig hab |
Re: viele shellicons in einem listview anzeigen
Wie kann ich dann die SystemImageList dem ListView zuweisen und den IconIndex rausfinden?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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