![]() |
FilterComboBox und ShellListView kombinieren
Hi!
Nochmal was ;) Ich will das ShellListView filtern ==> Geht aber nicht (die Suche brachte nur eine Kompo) Die FilterComboBox (Register 3.1) kann das, jedoch nur, wenn ich sie mit FileListBox (auch 3.1) verknüpfe. Das Design der alten Komponenten gefällt mir ja gar nicht. :( Kann man ohne Fremdkomponenten diese FilterComboBox mit dem ShellListView kombinieren? |
Re: FilterComboBox und ShellListView kombinieren
Mach alles manuell mit einer ListView und die Dateien suchst du dann mit FindFirst und FindNext. So habe ich es auch gemacht. Die Verzeichnisse lasse ich aber weiterhin von der ShellTreeView wählen, nur für die Darstellung der Dateien verwende ich dann das ListView.
Wenn dir das nicht weiterhilfst, kann ich dir auch ein wenig Code posten. mfG mirage228 |
Re: FilterComboBox und ShellListView kombinieren
Cool, die Idee ist genaial, bin ich gar nicht draufgekommen.
Das schaffe ich soweit selber, wenn es sich nur um eine Dateiendung handelt. Weiß du, wie ich mehrere Endungen zulassen kann, außer mit einer Schleife? |
Re: FilterComboBox und ShellListView kombinieren
Einfach ne schleife für die einzelnen Endungen durchlaufen lassen und alles in eine Liste und das ganze dann ab inne ListView.
mfG mirage228 |
Re: FilterComboBox und ShellListView kombinieren
OK, dann mache ich das so, vielen Dank! :thumb:
|
Re: FilterComboBox und ShellListView kombinieren
Nur sieht das doof aus, wenn es ohne Icons da ist :(
|
Re: FilterComboBox und ShellListView kombinieren
Achso, ja die Icons ^^
Also du machst dir ne Variable in den public Bereich deines Forms vom Typ TImageList. Im OnCreate deines Forms schreibst du dann:
Delphi-Quellcode:
Die Prozedur ist auch noch hilfreich:
var
SHFileInfo: TSHFileInfo; SysIcons: THandle; begin // ... GlobalImageList := TImageList.Create(MainForm); // oder halt andere ImageList try SysIcons := SHGetFileInfo(PChar(copy(ParamStr(0), 1, 3)), 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_ICON); finally DestroyIcon(SHFileInfo.hIcon); end; ListView.ViewStyle := vsReport; ListView1.SmallImages := GlobalImageList;
Delphi-Quellcode:
Und dann in der Prozedur, wo du die Items hinzufügst
function GetAssociatedIcon(const AExtension: string; ASmall: Boolean): HIcon;
var Info: TSHFileInfo; Flags: Cardinal; begin if ASmall then Flags := SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES else Flags := SHGFI_ICON or SHGFI_LARGEICON or SHGFI_USEFILEATTRIBUTES; SHGetFileInfo(PChar(AExtension), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), Flags); Result := Info.hIcon; end;
Delphi-Quellcode:
Schreib es dir nach belieben um ^^
var
Icon: TIcon; begin // ... Icon := TIcon.Create; try Icon.Handle := GetAssociatedIcon(ExtractFileExt(DateiName), True); Icon.Transparent := True; // dem Item das hinzugefügt wurde zuweisen: // Item hinzufügen... Item.ImageIndex := GlobalImageList.AddIcon(Icon); finally Icon.Free; end; // ... end; mfG mirage228 |
Re: FilterComboBox und ShellListView kombinieren
Danke erstmal, muss ich mir mal durch den Kopf gehen lassen. ;)
Wessen Eigenschaft ist dieses Item?
Delphi-Quellcode:
Item.ImageIndex := GlobalImageList.AddIcon(Icon);
|
Re: FilterComboBox und ShellListView kombinieren
also das "Item" ist das Item, dass du gerade der liste der listview hinzugefügt hast...
Ich mache das nämlich immer so:
Delphi-Quellcode:
mfG
var
Item: TListItem; begin Item := ListView1.Items.Add(); Item.Caption := 'Irgendwas'; Item.ItemIndex := GlobalImageList.AddIcon(Icon); end; mirage228 |
Re: FilterComboBox und ShellListView kombinieren
Danke, aber ich muss nochmal verven. ;)
Ich hab das jetzt so:
Delphi-Quellcode:
Jetzt werden einfach leere Strings in die ListView eingefügt, kein Icon, kein Dateiname.
procedure TForm1.Button1Click(Sender: TObject);
var Icon: TIcon; Item: TListItem; i: integer; begin for i := 1 to ListBox1.Count - 1 do begin Icon := TIcon.Create; try Icon.Handle := GetAssociatedIcon(ExtractFileExt(ListBox1.Items[i]), True); Icon.Transparent := True; Item := ListView1.Items.Add(); Item.Caption := ListBox1.Items[i]; Item.ImageIndex := GlobalImageList.AddIcon(Icon); finally Icon.Free; end; end; end; Kannst du mir da bitte nochmals helfen? ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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 by Thomas Breitkreuz