Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Schneller als findfirst (https://www.delphipraxis.net/75186-schneller-als-findfirst.html)

mimi 15. Aug 2006 17:37


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 !

Der_Unwissende 15. Aug 2006 18:54

Re: Schneller als findfirst
 
Zitat:

Zitat von mimi
Hallo,
ich suche eine schneller alternative zu findfirst, es dauert zu lange ein verzichnis zu durchsuchen und dann auch noch icons zu zu weisen....

.... evtl. kann ich ja auch die gleichen funktionen nutzen wie das windows macht...

Äh, dir ist schon klar, dass Windows FindFirstFile(Ex) benutzt? Die Delphi Kapselung dürfte auch ziemlich direkt auf diese Funktion zugreifen! Schneller geht es sicherlich nicht.
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

sakura 15. Aug 2006 19:03

Re: Schneller als findfirst
 
Zitat:

Zitat von mimi
ich suche eine schneller alternative zu findfirst, es dauert zu lange ein verzichnis zu durchsuchen und dann auch noch icons zu zu weisen....

Schneller als FindFirst wirst Du nichts finden. Aber schaue mal in Deinen Visualisierungscode, da gibt es garantiert eine Menge an Möglichkeiten diesen zu optimieren.

...:cat:...

mimi 15. Aug 2006 20:12

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:
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;
den code habe ich verwendet... evlt. liegt es an getindex die solangsamm arbeitet.... und BeginUpdatet und EndUpdate hatte ich auch schon eingebaut !

mimi 16. Aug 2006 22:01

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....

Luckie 16. Aug 2006 22:08

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.

xaromz 16. Aug 2006 22:21

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

mimi 16. Aug 2006 23:23

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 !

Luckie 16. Aug 2006 23:32

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.

mimi 17. Aug 2006 13:41

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.
Seite 1 von 2  1 2      

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