| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- {
- $Project$
- $Workfile$
- $Revision$
- $DateUTC$
- $Id$
- This file is part of the Indy (Internet Direct) project, and is offered
- under the dual-licensing agreement described on the Indy website.
- (http://www.indyproject.org/)
- Copyright:
- (c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
- $Log$
- Rev 1.6 6/29/04 12:27:14 PM RLebeau
- Updated to remove DotNet conditionals
-
- Updated constructor to call SetDataString()
- Rev 1.5 2004.02.03 5:44:52 PM czhower
- Name changes
- Rev 1.4 2004.02.03 2:12:04 PM czhower
- $I path change
- Rev 1.3 24/01/2004 19:07:18 CCostelloe
- Cleaned up warnings
- Rev 1.2 14/12/2003 18:07:16 CCostelloe
- Changed GetDataString to avoiud error 'String element cannot be passed to var
- parameter'
- Rev 1.1 13/05/2003 20:28:04 CCostelloe
- Bug fix: remove default values in Create to avoid ambiguities with
- Create(TCollection)
- Rev 1.0 11/14/2002 02:12:46 PM JPMugaas
- }
- unit IdAttachmentMemory;
- interface
- {$I IdCompilerDefines.inc}
- uses
- Classes, IdAttachment, IdMessageParts, IdGlobal;
- type
- TIdAttachmentMemory = class(TIdAttachment)
- protected
- FDataStream: TStream;
- FDataStreamBeforeLoadPosition: TIdStreamSize;
- function GetDataString: string;
- procedure SetDataStream(const Value: TStream);
- procedure SetDataString(const Value: string);
- public
- {CC: Bug fix, remove default values to resolve ambiguities with Create(TCollection).}
- constructor Create(Collection: TCollection); overload; override;
- constructor Create(Collection: TIdMessageParts; const CopyFrom: TStream); reintroduce; overload;
- constructor Create(Collection: TIdMessageParts; const CopyFrom: String); reintroduce; overload;
- destructor Destroy; override;
- property DataStream: TStream read FDataStream write SetDataStream;
- property DataString: string read GetDataString write SetDataString;
- function OpenLoadStream: TStream; override;
- procedure CloseLoadStream; override;
- procedure FinishTempStream; override;
- function PrepareTempStream: TStream; override;
- end;
- implementation
- uses
- SysUtils;
- { TIdAttachmentMemory }
- constructor TIdAttachmentMemory.Create(Collection: TCollection);
- begin
- inherited Create(Collection);
- FDataStream := TMemoryStream.Create;
- end;
- constructor TIdAttachmentMemory.Create(Collection: TIdMessageParts;
- const CopyFrom: TStream);
- var
- LSize: TIdStreamSize;
- begin
- inherited Create(Collection);
- FDataStream := TMemoryStream.Create;
- if Assigned(CopyFrom) then begin
- LSize := IndyLength(CopyFrom);
- if LSize > 0 then begin
- FDataStream.CopyFrom(CopyFrom, LSize);
- end;
- end;
- end;
- constructor TIdAttachmentMemory.Create(Collection: TIdMessageParts;
- const CopyFrom: String);
- begin
- inherited Create(Collection);
- FDataStream := TMemoryStream.Create;
- SetDataString(CopyFrom);
- end;
- destructor TIdAttachmentMemory.Destroy;
- begin
- FreeAndNil(FDataStream);
- inherited Destroy;
- end;
- procedure TIdAttachmentMemory.CloseLoadStream;
- begin
- DataStream.Position := FDataStreamBeforeLoadPosition;
- end;
- function TIdAttachmentMemory.GetDataString: string;
- var
- Pos: TIdStreamSize;
- begin
- Pos := FDataStream.Position;
- try
- FDataStream.Position := 0;
- Result := ReadStringFromStream(FDataStream, FDataStream.Size);
- finally
- FDataStream.Position := Pos;
- end;
- end;
- function TIdAttachmentMemory.OpenLoadStream: TStream;
- begin
- FDataStreamBeforeLoadPosition := DataStream.Position;
- DataStream.Position := 0;
- Result := DataStream;
- end;
- procedure TIdAttachmentMemory.SetDataStream(const Value: TStream);
- var
- LSize: TIdStreamSize;
- begin
- FDataStream.Size := 0;
- LSize := IndyLength(Value);
- if LSize > 0 then begin
- FDataStream.CopyFrom(Value, LSize);
- end;
- end;
- procedure TIdAttachmentMemory.SetDataString(const Value: string);
- begin
- FDataStream.Size := 0;
- WriteStringToStream(FDataStream, Value);
- end;
- procedure TIdAttachmentMemory.FinishTempStream;
- begin
- DataStream.Position := 0;
- end;
- function TIdAttachmentMemory.PrepareTempStream: TStream;
- begin
- DataStream.Size := 0;
- Result := DataStream;
- end;
- end.
|