AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fortschrittsanzeige beim Durchsuchen der Festplatte
Thema durchsuchen
Ansicht
Themen-Optionen

Fortschrittsanzeige beim Durchsuchen der Festplatte

Ein Thema von newuser01 · begonnen am 1. Sep 2006 · letzter Beitrag vom 4. Sep 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#11

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 1. Sep 2006, 15:12
Möglich wäre das, du solltest aber wenn du von einem Thread heraus auf das Label/die Form zugreifst den Zugriff synchronisieren.

Es kann sonst zu netten Zugriffsverletzungen kommen.

TThread bietet dir dazu die Prozeduren Synchronize an, oder du sendest halt per SendMessage den Ordnernamen an die Form.



Mein altes Programm zum Verzeichnisse vergleichen arbeitete z.B. nicht in einem Thread.

Die Suchprozedur war direkt im OnClick des Start-Buttons, wo dann alle ein paar 100 Millisekunden das Label beschrieben und danach Application.Proggresmessages zum Aktualisieren der Form aufgerufen wurde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 31. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#12

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 3. Sep 2006, 21:53
Hallo

Ich habe es ersteinmal so gelöst das in der Prozedur der Ordnername an Form1.Caption übergeben wird damit hätte man eine kleine Statusanzeige zumindetst sieht man das was passiert. Der Nachteil ist das die Suchaktion dadurch doppelt so lange dauert

Delphi-Quellcode:

procedure GetFilesInDirectory(ADirectory: string; AMask: String; AList: TStrings; ARekursiv: Boolean);
var
  SR: TSearchRec;
begin
  if (ADirectory<>'') and (ADirectory[length(ADirectory)]<>'\') then
    ADirectory:=ADirectory+'\';

  if (FindFirst(ADirectory+AMask,faAnyFile-faDirectory,SR)=0) then begin
    repeat
      if (SR.Name<>'.') and (SR.Name<>'..') and (SR.Attr<>faDirectory) then
          AList.Add(ADirectory+SR.Name)
    until FindNext(SR)<>0;
    FindClose(SR);
  end;

  if ARekursiv then
    if (FindFirst(ADirectory+'*.*',faDirectory,SR)=0) then
    begin
      repeat
        if (SR.Name<>'.') and (SR.Name<>'..') then
          GetFilesInDirectory(ADirectory+SR.Name,AMask,AList,True);
          Form1.Caption := ADirectory; //Aktuelle Ordnername wird an Caption übergeben
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;

procedure TForm1.btnSearchClick(Sender: TObject);
begi

lbAusgabe.Clear;
GetFilesInDirectory(DriveComboBox1.Drive+':\','*'+eSearch.Text+'*.mp3',lbAusgabe.Items,True);


end;
Gruß
Holger
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#13

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 4. Sep 2006, 14:07
Das liegt daran, das du jedes erzeichnis anzeigst, welches ganz schön bremst.

Entweder du zeigst das nur alle 'ner gewissen Zeit (welches is inzwischen bevorzuge),
oder nur jedes x-te Verzeichnis an.


per Zeitintervall:
-Vorteil: unterumständen schwerer zu implementieren
-Nachteil: überall etwa gleiches Anzeigeverhalten

jedes x-te:
-Vorteil: ganz leichte Implementierung
Delphi-Quellcode:
// zu Begin
X := 0;

// bei jedem Durchgang
Inc(X);
If X and $1F = 0 Then anzeigen; // jedes 32. Mal
-Nachteil:
auf schnellen Rechnern kann das Intervall zu kurz sein und die Anzeige bremst dennoch aus.
Und auf langsamen PCs, oder anderweiligen Verzögerungen kann die Aktualisierung der Anzeige schonmal recht große Pausen einlegen.


Hab mal ein bissl rumkompiliert..
Die Sync-Version zeigt auch jede Kleinigkeit an und ist daher langsamer.
Bei der Timer wird nur nach mindestens 100ms angezeigt (außerdem wurde dort für den ZählThread die CPU-Zeit und der Laufwerkszugriff optimiert).
Und in der Timer_ sind keine Optimierungen und die ProgressBar wird als solche angezeigt ... man wird da schonal leicht sehen können, daß da die ProgressBar rückwärts gehen und auch gewaltige Sprünge machen kann. (weßhalb ich wärend des Zählens die Bar eigentlich "ausblende")

Zum Test reicht es, wie schonmal erwähnt, wenn man beide Male das selbe Laufwerk angibt ... z.B. "C:\"
Angehängte Dateien
Dateityp: exe directorycompare_lockandtimer__132.exe (163,0 KB, 10x aufgerufen)
Dateityp: exe directorycompare_lockandtimer_298.exe (163,0 KB, 10x aufgerufen)
Dateityp: exe directorycompare_sync_184.exe (163,0 KB, 11x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 31. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#14

Re: Fortschrittsanzeige beim Durchsuchen der Festplatte

  Alt 4. Sep 2006, 19:23
Hallo "himitsu" Danke für deine Hilfe !

Die Idee mit dem jedes x. mal habe ich übernommen das funktioniert am besten und es ist kaum ein Geschwindigkeitsverlust zu spüren denn das Programm läuft in dem Falle eh nur auf einem Rechner. Zwei Fragen habe ich aber noch was bedeutet "and $1F" und wie hast du das hinbekommen mit der Progressbar das sie immer hin und her links rechts so wie in Windows beim suchen geht ?

Grüße
Holger
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 05:13 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