![]() |
SendStream + Fortschrittsanzeige
Hallo, ich habe eine Frage....
Vorweg, habe schon gesucht.. abr Irgendwie icht Wirklich fündig geworden Also wie kann ich die anzahl der Bytes auslesen, die gesendet BZW Emfangen wurden ? Hintergrund ist das ich eine Fortschrittsanzeige machen Möchte, die Dateigröße lasse ich mich Auslesen (in Bytes) und übertrage diese dann auch an die Gegenstelle nun soll während der Übertragung die Anzahl der Bytes ausgelesen werden. |
Re: SendStream + Fortschrittsanzeige
könntest du noch ein paar mehr Infos angeben? Zum Beispiel mit welchen Komponenten du sendest, welche Methoden oder Events der Komponente du dazu benutzt etc.
|
Re: SendStream + Fortschrittsanzeige
Sorry.. hier ein Paar infos
Also ich benutze TClientSocket und TServerSocket Die Datei Empfange ich mit
Delphi-Quellcode:
procedure TMsg_Haupt_Form.File_Get_Procedure (sender:TObject; abs:TCustomWinSocket); // On read Ereignis
var iLen: Integer; Bfr: Pointer; begin file_fenster[find_file_fenster_by_socket(Integer(abs))].current_status.Caption:= 'Empfange...'; iLen := abs.ReceiveLength; GetMem(Bfr, iLen); try abs.ReceiveBuf(Bfr^, iLen); FStream.Write(Bfr^, iLen); finally file_fenster[find_file_fenster_by_socket(Integer(abs))].current_status.Caption:= IntToStr(gesLen); FreeMem(Bfr); end; end; Ich Sende mit:
Delphi-Quellcode:
procedure Tmsg_haupt_form.datei_verbunden(Sender: TObject; Socket: TCustomWinSocket);
begin Debugger.RichEdit1.Lines.Add('Verbunden zu '+ Socket.RemoteHost); Socket.SendStream(TFileStream.Create(selected_file, fmOpenRead or fmShareDenyWrite)); end; MfG Real_Thunder |
Re: SendStream + Fortschrittsanzeige
du weißt doch wieviel Bytes du aus dem Stream lädst bzw. wieviel darein geschrieben wurden. Oder suchst du die Anzahl an Bytes inklusive der des Protokolls etc.?
|
Re: SendStream + Fortschrittsanzeige
Schade auf mein haupt, ich dnke ich sollte mal lieber Schlafen gehen........
Man kann die Werte ja auch einfach Addieren... :wall: :wall: :wall: :wall: |
Re: SendStream + Fortschrittsanzeige
ich hab mal eine Klasse geschrieben welche dir das abnimmt (abgeleitet von TFileStream):
Delphi-Quellcode:
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.
[...]
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; [...] |
Re: SendStream + Fortschrittsanzeige
Ich verstehe die classe nicht, bzw ich Habe keine Ahnung, wie ich diese Einbinden Soll, bzw Nutzen
Bin noch delphi Anfänger... Das mit dem Empfangen Bytes Zählne hab ich nun Prima Hinbekommen Bloß mit den gesenden nicht.. Kannst du mir verraten wie ich deine Klasse einbinden Bzw Nutzen kann ? MfG Real Thunder |
Re: SendStream + Fortschrittsanzeige
Noch Irgendjemand wach, der mir Helfen Könnte ?
Die Fortschrittsanzeige beim Empfangen Läuft.... Bei der Für das Senden, habe ich keinen Anhaltspunkt |
Re: SendStream + Fortschrittsanzeige
Jes´ns??? Könntest du mir die classe erklären ? was er wo macht ?? und iw eman sie einbindet ?
währe nett.... MfG Real Thunder |
Re: SendStream + Fortschrittsanzeige
am besten du packst die Klasse in eine eigene Unit und bindest diese Unit dann ein. Anschließend benutzt du anstelle von TFileStream diese neue Klasse.
mit
Delphi-Quellcode:
kannst du bei jedem lesevorgang des Streams anzeigen lassen wieviel bisher gelesen wurde. (ShowMessage ist natürlich nicht das optimalste Beispiel)
procedure TYourForm.OnReadProc(Sender: TStream; AMethodRes: LongInt);
begin ShowMessage('Bisher gelesen (byte): ' + IntToStr(TFileStreamEx(Sender).BytesRead)); end; [...] TheStreamInstanzce.OnRead := OnReadProc; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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-2025 by Thomas Breitkreuz