Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: SendStream + Fortschrittsanzeige

  Alt 13. Jun 2006, 15:59
ich hab mal eine Klasse geschrieben welche dir das abnimmt (abgeleitet von TFileStream):
Delphi-Quellcode:
[...]
type
  TStreamTransferEvnt = procedure(Sender: TStream; AMethodRes: LongInt) of Object;

  TFileStreamEx = class(TMemoryStream)
  private
    fBytesRead : LongInt;
    fBytesWritten: LongInt;
    fOnRead : TStreamTransferEvnt;
    fOnWritten : TStreamTransferEvnt;
  public
    property BytesRead: LongInt read fBytesRead;
    property BytesWritten: LongInt read fBytesWritten;

    property OnRead: TStreamTransferEvnt read fOnRead write fOnRead;
    property OnWritten: TStreamTransferEvnt read fOnWritten write fOnWritten;

    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    procedure ResetBytesRead;
    procedure ResetBytesWritten;
  end;

implementation


function TFileStreamEx.Read(var Buffer; Count: Longint): Longint;
begin
  result := inherited Read(Buffer, Count);
  inc(fBytesRead, result);
  if Assigned(fOnRead) then
    fOnRead(Self, result);
end;

function TFileStreamEx.Write(const Buffer; Count: Longint): Longint;
begin
  result := inherited Write(Buffer, Count);
  inc(fBytesWritten, result);
  if Assigned(fOnWritten) then
    fOnWritten(Self, result);
end;

procedure TFileStreamEx.ResetBytesRead;
begin
  fBytesRead := 0;
end;

procedure TFileStreamEx.ResetBytesWritten;
begin
  fBytesWritten := 0;
end;

[...]
Nützlich ist so etwas wenn man zum Beispiel die Indys nutzt da man dort im OnWork nur bedingte Kontrolle hat wieviel des Streams bereits geschrieben/gelesen wurde.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat