![]() |
Datei über die Indys mit Fortschrittsanzeige senden (Indy10)
Das ist ein Beispiel. Natürlich macht es Sinn, die Angaben wie z.B. den Ziel-Host zu überprüfen und noch die Indy-Fehler abzufangen.
Voraussetzungen: Die Indy-Komponenten ab Version 10 Sender: TidTCPClient (hier: "TCPSender") Empfänger: TidTCPServer (hier: "TCPReceiver") Hinweise: Die ProgressBar auf dem Sender hat MIN := 0 und MAX := 100. Das hat den Sinn, dass man sie durch eine andere Komponente ersetzen kann, die Prozentwerte verlangt. Zudem kann man den errechneten Wert z.B. für ein Label verwenden.
Delphi-Quellcode:
[edit] Kommentare hinzugefügt [/edit]
// Sender
{Global} var Groesse: Integer; procedure TSendeForm.DateiSendeButtonClick(Sender : TObject); var FStream: TFileStream; IDS: TidStreamVCL; begin { Hier wird die Datei "ermittelt" } TCPSender.Host := HostEdit.text; if not (DateiOpenDialog.Execute) then exit; { Die Streams initialisieren - Beim IDS wird FStream gleich eingelesen } FStream := TFileStream.Create(DateiOpenDialog.FileName, fmOpenRead); try IDS := TidStreamVCL.Create(FStream); try { Senden } with TCPSender do begin Connect; try Socket.Write(IDS, 0, true); finally Disconnect; end; end; finally FreeAndNil(IDS); end; finally FreeAndNil(FStream); end; end; procedure TSendeForm.TCPSenderWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); begin { Aktualisierung der Fortschrittsanzeige, ProcessMessages nicht vergessen! } ProgressBar.Position := Round((AWorkCount / Groesse) * 100); Application.ProcessMessages; end; procedure TSendeForm.TCPSenderWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer); begin { Damit klar ist, wie groß die Datei ist | Reset der ProgressBar } Groesse := AWorkCountMax; ProgressBar.Position := 0; end; // Empfänger procedure TEmpfangsForm.TCPReceiverExecute(AContext: TIdContext); var FSTream: TFileStream; SizeOfIncomingStream: Integer; IDS: TidStreamVCL; begin { Wo soll die Datei gespeichert werden? } if not (DateiSaveDialog.execute) then begin ShowMessage('Es wurde keine Datei ausgewählt!'); exit; end; { Wieder die Streams } FStream := TFileStream.Create(DateiSaveDialog.FileName, fmCreate); try IDS := TidStreamVCL.Create(FStream); try { Empfangen } with AContext.connection do begin try SizeOfIncomingStream := Socket.ReadInteger; Socket.ReadStream(IDS, SizeOfIncomingStream); finally Disconnect; end; end; { Damit der Inhalt von IDS in FStream übertragen wird } IDS.VCLStream.Position := 0; finally FreeAndNil(IDS); end; finally FreeAndNil(FStream); end; end; [edit=Matze]Code angepasst (korigiert und formatiert). Mfg, Matze[/edit] |
Re: Datei über die Indys mit Fortschrittsanzeige senden (Ind
Wichtig:
Delphi-Quellcode:
wird nicht automatisch hinzugefügt, man muss es per Hand eingeben.
uses IdStreamVCL;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 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