AGB  ·  Datenschutz  ·  Impressum  







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

DEC onProgress-Ereignis bei mehreren Threads

Ein Thema von Luckie · begonnen am 9. Aug 2003 · letzter Beitrag vom 11. Aug 2003
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

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

Re: DEC onProgress-Ereignis bei mehreren Threads

  Alt 10. Aug 2003, 17:41
So ganz bin ich noch nicht dahintergestiegen. Es sieht jetzt so aus:
Delphi-Quellcode:
for i := 0 to lvFiles.Items.Count - 1 do
  begin
    Filename := lvFiles.Items.Item[i].Caption;
    if lvFiles.Items.Item[i].SubItems[0] = 'unverschlüsseltthen
    begin
      try
        ProgressAdapter := TStreamProgressAdapter.Create(TFileStream.Create(FileName, fmOpenReadWrite));
        try
          Encrypt(FileName, edtPW1.Text, TCipher_Rijndael);
          lvFiles.Items.Item[i].SubItems[0] := FloatToStr(ProgressAdapter.Progress);
        finally
          FreeAndNil(ProgressAdapter);
        end;
      finally
        FreeAndNil(FileStream);
      end;
    end;
  end;
Ich bekomme allerdings bei Encrypt eine Zugriffsverletzung.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#12

Re: DEC onProgress-Ereignis bei mehreren Threads

  Alt 10. Aug 2003, 20:36
Ähm, jetzt verstehe ich aber nicht was du eigentlich machst. Encrypt() muß den ProgressAdapter als Stream nutzen und keinen FileNamen.
Delphi-Quellcode:
procedure Encrypt(const Filename: String; ....);
var
  Source,Dest: TStream;
begin
  Source := TStreamProgressAdapter.Create(TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone));
  try
    Dest := TFileStream.Create(TempFilename, fmCreate);
    try
      with CipherClass.Create('', nil) do
      try
        Mode := cmCBC;
        InitKey(Password, nil);
        EncodeStream(Source, Dest, -1);
      finally
        Free;
      end;
    finally
      Dest.Free;
    end;
  finally
    Source.Free;
  end;
  DeleteFile(FileName);
  RenameFile(TempFileName, FileName);
end;
D.h. der Cipher liest nun die Daten aus Source, verschlüsselt diese und speichert sie in Dest. Über den ProgressAdapter bekommen wir mit wann der Cipher wieviele Bytes aus Source.FStream liesst.Somit kannste TStreamProgressAdapter für jede Art von Stream basierte Funktion nutzen um eine ProgressBar zwischen zu schieben.

Angenommen es soll eine Bitmap Datei geladen werden:
Delphi-Quellcode:
var
  Bitmap: TBitmap;
  Source: TStream;
begin
  Bitmap := TBitmap.Create;

  Source := TStreamProgressAdapter.Create(TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone));
  try
    Bitmap.LoadFromStream(Source);
  finally
    Source.Free;
  end;
end;
Es hängt jetzt nur davon ab wie TStreamProgressAdapter weiter ausgebaut wird. Ich würde im Constructor gleich die TProgressBar mit übergeben, so daß der Adapter diese Updaten kann.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: DEC onProgress-Ereignis bei mehreren Threads

  Alt 11. Aug 2003, 01:18
Zitat von negaH:
Ähm, jetzt verstehe ich aber nicht was du eigentlich machst. Encrypt() muß den ProgressAdapter als Stream nutzen und keinen FileNamen.
*patsch* Jetzt wo ich den Source sehe... Könnten wir das auf die momentane Wetterlage schieben?

Zitat:
Es hängt jetzt nur davon ab wie TStreamProgressAdapter weiter ausgebaut wird. Ich würde im Constructor gleich die TProgressBar mit übergeben, so daß der Adapter diese Updaten kann.
Mir wäre es lieber, wenn TStreamProgressAdapter einen Prozentwert zurückliefert. Dann ist das ganze universeller.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 22:21 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