Thema: Delphi Zipmaster OnProgress

Einzelnen Beitrag anzeigen

Der_Unwissende

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

Re: Zipmaster OnProgress

  Alt 16. Apr 2007, 16:20
Zitat von mgiggle:
ich habe ein Problem mit dem Zipmaster, genauer mit dem Ereignis OnProgress.
Link:
Zipmaster OnProgress

Es steht geschrieben:
Zitat:
ProgressUpdate: Dieser Wert ist wichtig, wenn man den Verlauf in Form einer Fortschirttsanziege visualisieren möchte.

Ich moechte jetzt genau die Fortschrittsanzeige mithilfe einer Progress oder Statusbar realisieren.
Hi,
soweit ist alles klar, wie lautet die eigentliche Frage? Ich meine klar, Du möchtest gerne den Fortschritt anzeigen, woran scheiterst Du? Bist Du mit der Idee von Call-Backs vertraut? Hast Du noch nie mit Funktionszeigern gearbeitet? Ein wenig mehr Information wäre immer nett für die Leute, die Dir helfen wollen/sollen.

Mal ganz grob zur allgemeinen Idee: Du hast eine Komponente, Zipmaster. Ein Zipmaster führt eine Aktion aus (z.B. Entpacken) und kann andere über den Fortschritt dieser Aktion benachrichtigen. Dazu muss ihr aber eine Rückruf-Adresse mitgeteilt werden (die Komponente kann ja Deine Anwendung nicht kennen). In Delphi wird dies über Methodenzeiger realisiert. Ein Methodenzeiger ist (wie der Name schon verrät) ein Zeiger auf eine Methode. Eine Methode ist eine Prozedur oder Funktion, die zu einem Objekt (Instanz einer Klasse) gehört.
Alles was Du tust ist, dass Du der Komponente einen Methodenzeiger für das entsprechende Ereignis zuweist (auch durch Doppelklick im OI möglich), tritt dann das Ereignis auf, so wird die Komponente einfach die Methode, auf die sie zeigt, aufrufen.
Jetzt muss natürlich auch noch Information übermittelt werden (Du willst ja schließlich nicht nur wissen, dass es irgendeinen Fortschritt gab, sondern auch wie groß dieser war). Dazu dienen die Argumente der Methode. Alles was hier übergeben wird, stellt eigentlich nur Information für Dich da. In Deinem Fall wären das
  • Sender: TObject;
  • ProgrType: ProgressType;
  • Filename: string;
  • FileSize: Integer

Hier wird Dir mitgeteilt, wer überhaupt die Aktion ausgelöst hat, was für ein Fortschritt gerade angezeigt wird und welche Form er hat. Jetzt hat der Entwickler der Komponente aber verschiedene Ereignisse vorgesehen, aber nur eine Benachrichtigungsfunktion (also es gibt mehr, nur nicht für diese Ereignisse). Deshalb ist in ProgrType codiert, um was für eine Form von Fortschritt es sich handelt. Welche es gibt kannst Du der Hilfe zu TZipMaster entnehmen.
So gibt es zum Beispiel ein initiales Ereignis, in dem wird Dir die gesamte Anzahl der Dateien, die verarbeitet werden mitgeteilt. Oder es wird Dir mitgeteilt, dass eine neue Datei entpackt wird. In diesem Fall wird Dir natürlich nicht die Anzahl der Dateien insgesamt, sondern die Größe der entpackten Datei mitgeteilt. Zudem gibt es noch Updates, die den Fortschritt anzeigen. Was für Werte als in Filename und FileSize stehen und wie sie zu interpretieren sind, hängt vom ProgrType ab.
Willst Du hier den Fortschritt für eine Datei anzeigen, so musst Du Dir nur die Größe merken, die beim Eintritt des Ereignisses mit ProgrType = NewFile in fileSize steht (das wären 100%) und bei jedem ProgrType = ProgressUpdate die Relation zwischen bereits bearbeiter Größe und dieser Gesamtgröße berechnen. Das ist dann schon alles.

Hoffe es hilft ein wenig weiter.

Gruß Der Unwissende
  Mit Zitat antworten Zitat