
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@362 8e941d3f-bd1b-0410-a28a-d453659cc2b4
79 lines
1.4 KiB
ObjectPascal
Executable File
79 lines
1.4 KiB
ObjectPascal
Executable File
{
|
|
fpolestorage.pas
|
|
|
|
Writes an OLE document
|
|
|
|
AUTHORS: Felipe Monteiro de Carvalho
|
|
}
|
|
unit fpolestorage;
|
|
|
|
{$ifdef fpc}
|
|
{$mode delphi}
|
|
{$endif}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$ifdef Windows}
|
|
ActiveX, ComObj,
|
|
{$endif}
|
|
Classes, SysUtils;
|
|
|
|
type
|
|
|
|
{ TOLEStorage }
|
|
|
|
TOLEStorage = class
|
|
private
|
|
{$ifdef Windows}
|
|
FStorage: IStorage;
|
|
FStream: IStream;
|
|
{$endif}
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure WriteStreamToOLEFile(AFileName: string; AMemStream: TMemoryStream);
|
|
end;
|
|
|
|
implementation
|
|
|
|
{ TOLEStorage }
|
|
|
|
constructor TOLEStorage.Create;
|
|
begin
|
|
inherited Create;
|
|
|
|
end;
|
|
|
|
destructor TOLEStorage.Destroy;
|
|
begin
|
|
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TOLEStorage.WriteStreamToOLEFile(AFileName: string; AMemStream: TMemoryStream);
|
|
var
|
|
cbWritten: Cardinal;
|
|
begin
|
|
{$ifdef Windows}
|
|
{ Initialize the Component Object Model (COM) before calling s functions }
|
|
OleCheck(CoInitialize(nil));
|
|
|
|
{ Create a Storage Object }
|
|
OleCheck(StgCreateDocfile(PWideChar(WideString(AFileName)),
|
|
STGM_READWRITE or STGM_FAILIFTHERE or STGM_SHARE_EXCLUSIVE or STGM_DIRECT,
|
|
0, FStorage));
|
|
|
|
{ Create a workbook stream in the storage. A BIFF5 file must
|
|
have at least a workbook stream. This stream *must* be named 'Book' }
|
|
OleCheck(FStorage.CreateStream('Book',
|
|
STGM_READWRITE or STGM_SHARE_EXCLUSIVE or STGM_DIRECT, 0, 0, FStream));
|
|
|
|
{ Write all data }
|
|
FStream.Write(AMemStream.Memory, AMemStream.Size, @cbWritten);
|
|
{$endif}
|
|
end;
|
|
|
|
end.
|
|
|