AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schneller als findfirst

Ein Thema von mimi · begonnen am 15. Aug 2006 · letzter Beitrag vom 19. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

Schneller als findfirst

  Alt 15. Aug 2006, 16:37
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 !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Schneller als findfirst

  Alt 15. Aug 2006, 17:54
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Schneller als findfirst

  Alt 15. Aug 2006, 18:03
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.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Schneller als findfirst

  Alt 15. Aug 2006, 19:12
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 !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Schneller als findfirst

  Alt 16. Aug 2006, 21:01
es muss doch einen schneller möglichkeit geben.. der explorer braucht für das einlesen das gleichen verzeichnis viel weniger zeit als mein programm....
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Schneller als findfirst

  Alt 16. Aug 2006, 21:08
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: Schneller als findfirst

  Alt 16. Aug 2006, 21:21
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Schneller als findfirst

  Alt 16. Aug 2006, 22:23
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 !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Schneller als findfirst

  Alt 16. Aug 2006, 22:32
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Schneller als findfirst

  Alt 17. Aug 2006, 12:41
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 !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz