![]() |
Schneller als findfirst
Hallo,
ich suche eine schneller alternative zu findfirst, es dauert zu lange ein verzichnis zu durchsuchen und dann auch noch icons zu zu weisen.... ich nutze die systemImageList von Windows.... evtl. kann ich ja auch die gleichen funktionen nutzen wie das windows macht... mit den dateien aufliesten ! |
Re: Schneller als findfirst
Zitat:
Wenn du irgendwo Zeit verlierst, dann sicherlich im restlichen Code. Je nachdem wie du Icons zuweist und anzeigst, werden eher hier die Engpässe liegen. Insbesondere sollten Dinge wie beginUpdate und endUpdate verwendet werden (bin mir fast sicher, dass es dann bei dir nicht der Fall ist?) Gruß Der Unwissende |
Re: Schneller als findfirst
Zitat:
...:cat:... |
Re: Schneller als findfirst
der explorer zeigt die einträge viel schneller an als mein programm es tut. und ihr habt recht es liegt an der icon zu weiseung:
Delphi-Quellcode:
den code habe ich verwendet... evlt. liegt es an getindex die solangsamm arbeitet.... und BeginUpdatet und EndUpdate hatte ich auch schon eingebaut !
procedure TForm2.TVMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); { Dateien aus Verzeichnis mit entsprechender MAske auslesen } procedure DateiListe(sPfad, sMaske: String; aList: TListView); var SR: TSearchRec; Pfad: String; TempIcon:TIcon; FileItem:tFileItem; begin Pfad := IncludeTrailingBackSlash(sPfad); if FindFirst (PChar(Pfad+ sMaske), faAnyFile, SR) = 0 Then repeat if sr.name[1] <> '.' then begin FileItem:=tFileItem.Create; fileItem.FileName:=pfad+sr.Name; fileItem.isDir:= (sr.Attr and faDirectory > 0); // alist.add with alist.Items.Add do begin Data:=FileItem; Caption:=sr.name; ImageIndex:=GetIndex(pfad +sr.name); end; end; until FindNext (SR ) <> 0; FindClose(SR); end; var aNode, ElternKnoten: TTreeNode; Pfad: String; begin Listview1.Clear; ListView1.Items.BeginUpdate; aNode := tv.Selected; //--feststellen, ob MausKlick auf einem Knoten erfolgte if (htOnItem in tv.GetHitTestInfoAt(X,Y)) then begin Pfad := aNode.Text; ElternKnoten := aNode.Parent; while ElternKnoten <> nil do begin Pfad := ElternKnoten.Text+ '\' + Pfad ; ElternKnoten := ElternKnoten.Parent; end; // aNode.Parent.ImageIndex:=GetIndex(pfad); // ShowmEssage(Pfad); DateiListe(Pfad , '*.*', Listview1); end; ListView1.Items.EndUpdate; end; function GetIndex(Datei:String):integer; var li : TListItem; fi : TSHFileInfo; begin ZeroMemory(@fi,sizeof(fi)); SHGetFileInfo(pchar(Datei),0,fi,sizeof(fi), SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME or SHGFI_SYSICONINDEX); result:=fi.iIcon; end; |
Re: Schneller als findfirst
es muss doch einen schneller möglichkeit geben.. der explorer braucht für das einlesen das gleichen verzeichnis viel weniger zeit als mein programm....
|
Re: Schneller als findfirst
Das wird daran liegen, dass er nur die oberste Ebene anzeigt und zusätzlich, dass er es cacht. Lass deine Routine ein zweites Mal laufen und du wirst sehen, dass es wesentlich schneller geht.
|
Re: Schneller als findfirst
Hallo,
zusätzlich liest der Explorer die Icons in einem Hintergrund-Thread ein. Dadurch fühlt sich die Aktion schneller an, als sie ist. Gruß xaromz |
Re: Schneller als findfirst
kennt sich einer mit PItemIdList ? ist das das was lch glaube:
könnte damit einer schneller suchfunktion gebaut werden ? das mit den hintergrund Thead habe ich mir fast gedacht ! aber es muss doch noch schneller funktionen geben... wie komme ich schneller an das icon ran ? weil ich glaube das hält die ganze sache auf ! |
Re: Schneller als findfirst
Wie schon gesagt, die Icons werden in einem zweiten Thread ermittelt. Und weißer als weiß gibt es nicht, auch wenn uns das die Waschmittel Industrie glauben machen will.
|
Re: Schneller als findfirst
gut, wenn ihr da alle einer meinug zeit brauche ich ja auch nicht weiter zu suchen... nur ich lese immer wieder das diese PItemlist schneller sein sollen(angeblich) konnte nur noch nichts finden womit ich was anfangen könnte/kann :(
ich wollte noch eine icon list einfügen als array und zwar: sollen dort die zuletzt 5 icons gepseichert werden die verwendet wurden das könnte das suchen in der "großen" liste beschleunigen.... glaube ich aufjedenfall mal sehen ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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