![]() |
TmxJsCollection.SaveToStream
Hallo,
ich habe folgendes Problem: Ich möchte eine TmxJsCollection mit Items vom Typen TCollectionItem von einem Client zum Host (mit Hilfe von TIdTCPServer/Client) als Stream übertragen. Jedes Item besitzt als published property einen Filename (String) und einmal ImageData (aktuell als TBytes implementiert, habe aber auch schon verschiedene Streams versucht). Der Filename wird einfach zugewiessen und für die Imagedatas benutze ich LoadFromFile.
Delphi-Quellcode:
Bis zu dem Punkt wo ich die Collection als Stream speichern will funktioniert alles. Die Collectionitems haben die richtige Größe/Size und die Daten sehen auch gut aus. Nach dem SaveToStream Aufruf allerdings ist die Size des Streams viel zu klein (rund 110-115(als Binary)).
TMyImage = class(TCollectionItem)
private FFilename: String; FImageData: TBytes; public constructor Create(ACollection: TCollection); override; destructor Destroy; override; procedure Assign(ASource: TPersistent); override; procedure LoadFromFile(const AFileName: String); procedure SaveToFile(const AFileName: String); published property Filename: String read FFilename write FFilename; property ImageData: TBytes read FImageData; end; procedure TMyImage.LoadFromFile(const AFileName: String); var LFileStream: TFileStream; begin LFileStream := TFileStream.Create(AFileName, fmOpenRead OR fmShareDenyWrite); try SetLength(FImageData, LFileStream.Size); LFileStream.Read(FImageData[0], Length(FImageData)); finally LFileStream.Free; end; end;
Delphi-Quellcode:
Wenn ich nur Strings o.Ä. in den Stream speichere funktioniert alles reibungslos, nur die Bilddaten verursachen die Probleme.
procedure TMyClient.Execute;
var LStream: TStream; begin LStream := TStringStream.Create; try FCollection.Binary := True; FCollection.SaveToStream(LStream); FClient.Connect; FClient.IOHandler.Write(LStream, 0, False); FClient.Disconnect; finally LStream.Free; end; end; Was mache ich falsch? Wie kann ich die Imagedatas in einer Collection zum Host übertragen? Danke für alle Antworten im Voraus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 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