![]() |
Streams mit Fortschritt bearbeiten
Liste der Anhänge anzeigen (Anzahl: 1)
Diese Unit ermöglicht es beliebige Streams mit einer Fortschrittsanzeige zu bearbeiten.
Autor: Hagen Reddmann. Erweiterungen: Aya, Michael Puff
Delphi-Quellcode:
Anmerkung: Die Eigenschaft "Tag" kann beliebig genutzt werden. Zum Beispiel um eine Zeile in einem Listview zu identifizieren oder dergleichen.
{*******************************************************************************
Project : - Filename : StreamProgressAdapter Date : 2003-08-11 Version : 1.0 Last modified: Author : Hagen Reddmann. Modified by Aya, Michael Puff URL : [url]www.luckie-online.de[/url] Copyright : Copyright (c) 2003 Hagen Reddmann, Michael Puff When I die I want 'Hello, world' carved on my headstone. *******************************************************************************} unit StreamProgressAdapter; interface uses SysUtils, Classes; type TOnProgress = procedure(Sender: TObject; Index: Integer; Percent: Integer) of object; TStreamProgressAdapter = class(TStream) private FStream: TStream; FCurrentPos: Integer; FIndex, FMax: Integer; FPercent: Integer; FOnProgress: TOnProgress; protected procedure SetSize(NewSize: Longint); override; public constructor Create(AStream: TStream; Index: Integer); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(Offset: Longint; Origin: Word): Longint; override; procedure DoProgress(Writing: Boolean); virtual; function Progress: Integer; published property OnProgress: TOnProgress read FOnProgress write FOnProgress; property Tag: Integer read FIndex write FIndex; end; implementation procedure TStreamProgressAdapter.SetSize(NewSize: Longint); begin TStreamProgressAdapter(FStream).SetSize(NewSize); end; constructor TStreamProgressAdapter.Create(AStream: TStream; Index: Integer); begin inherited Create; FIndex := Index; FStream := AStream; FMax := FStream.Size; FPercent := 0; end; destructor TStreamProgressAdapter.Destroy; begin FStream.Free; inherited Destroy; end; function TStreamProgressAdapter.Read(var Buffer; Count: Longint): Longint; begin Result := FStream.Read(Buffer, Count); FCurrentPos := FStream.Position; DoProgress(False); end; function TStreamProgressAdapter.Write(const Buffer; Count: Longint): Longint; begin Result := FStream.Write(Buffer, Count); DoProgress(False); end; function TStreamProgressAdapter.Seek(Offset: Longint; Origin: Word): Longint; begin Result := FStream.Seek(Offset, Origin); end; procedure TStreamProgressAdapter.DoProgress(Writing: Boolean); begin FPercent := Round(100 / FMax * FCurrentPos); if Assigned(OnProgress) then OnProgress(self, FIndex, FPercent); end; function TStreamProgressAdapter.Progress: Integer; begin result := FPercent; end; end. Im Anhang ein kleines Demo-Projekt von mir. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz