You've already forked lazarus-ccr
79 lines
1.4 KiB
ObjectPascal
79 lines
1.4 KiB
ObjectPascal
![]() |
{
|
||
|
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.
|
||
|
|