git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@928 8e941d3f-bd1b-0410-a28a-d453659cc2b4

This commit is contained in:
sekelsenmat
2009-08-11 15:28:08 +00:00
parent 67aac8aa37
commit e7fede2029
5 changed files with 139 additions and 379 deletions

View File

@ -2,16 +2,17 @@
<CONFIG>
<ProjectOptions>
<PathDelim Value="\"/>
<Version Value="7"/>
<Version Value="6"/>
<General>
<Flags>
<LRSInOutputDirectory Value="False"/>
<AlwaysBuild Value="False"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<Title Value="excel5write"/>
<UseAppBundle Value="False"/>
<ActiveEditorIndexAtStart Value="6"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
@ -33,253 +34,13 @@
<PackageName Value="laz_fpspreadsheet"/>
</Item1>
</RequiredPackages>
<Units Count="21">
<Units Count="1">
<Unit0>
<Filename Value="excel5write.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="excel5write"/>
<CursorPos X="61" Y="49"/>
<TopLine Value="45"/>
<EditorIndex Value="0"/>
<UsageCount Value="309"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="..\fpolestorage.pas"/>
<UnitName Value="fpolestorage"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="19"/>
</Unit1>
<Unit2>
<Filename Value="..\..\..\..\..\lazarus\lcl\interfaces\win32\win32wsstdctrls.pp"/>
<UnitName Value="Win32WSStdCtrls"/>
<CursorPos X="35" Y="720"/>
<TopLine Value="713"/>
<UsageCount Value="76"/>
</Unit2>
<Unit3>
<Filename Value="..\..\..\..\..\lazarus\ideintf\componenteditors.pas"/>
<UnitName Value="ComponentEditors"/>
<CursorPos X="40" Y="332"/>
<TopLine Value="330"/>
<UsageCount Value="74"/>
</Unit3>
<Unit4>
<Filename Value="..\..\xlsbiff5.pas"/>
<UnitName Value="xlsbiff5"/>
<CursorPos X="1" Y="59"/>
<TopLine Value="47"/>
<EditorIndex Value="4"/>
<UsageCount Value="140"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="..\..\fpsutils.pas"/>
<UnitName Value="fpsutils"/>
<CursorPos X="1" Y="11"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="140"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="..\..\xlsbiff2.pas"/>
<UnitName Value="xlsbiff2"/>
<CursorPos X="39" Y="281"/>
<TopLine Value="275"/>
<UsageCount Value="139"/>
</Unit6>
<Unit7>
<Filename Value="..\..\fpolestorage.pas"/>
<UnitName Value="fpolestorage"/>
<CursorPos X="38" Y="48"/>
<TopLine Value="41"/>
<UsageCount Value="139"/>
</Unit7>
<Unit8>
<Filename Value="..\..\..\..\..\lazarus26\fpc\2.2.2\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="19" Y="562"/>
<TopLine Value="553"/>
<UsageCount Value="41"/>
</Unit8>
<Unit9>
<Filename Value="..\..\..\..\..\lazarus26\fpc\2.2.2\source\rtl\objpas\classes\streams.inc"/>
<CursorPos X="21" Y="158"/>
<TopLine Value="151"/>
<UsageCount Value="41"/>
</Unit9>
<Unit10>
<Filename Value="..\..\fpspreadsheet.pas"/>
<UnitName Value="fpspreadsheet"/>
<CursorPos X="12" Y="205"/>
<TopLine Value="193"/>
<EditorIndex Value="2"/>
<UsageCount Value="93"/>
<Loaded Value="True"/>
</Unit10>
<Unit11>
<Filename Value="..\..\..\..\..\lazarus\lcl\include\customtrayicon.inc"/>
<CursorPos X="22" Y="203"/>
<TopLine Value="197"/>
<UsageCount Value="67"/>
</Unit11>
<Unit12>
<Filename Value="..\..\fpsopendocument.pas"/>
<UnitName Value="fpsopendocument"/>
<CursorPos X="53" Y="49"/>
<TopLine Value="44"/>
<UsageCount Value="11"/>
</Unit12>
<Unit13>
<Filename Value="..\..\xlsbiff8.pas"/>
<UnitName Value="xlsbiff8"/>
<CursorPos X="56" Y="53"/>
<TopLine Value="45"/>
<UsageCount Value="11"/>
</Unit13>
<Unit14>
<Filename Value="..\..\xlscommon.pas"/>
<UnitName Value="xlscommon"/>
<CursorPos X="19" Y="15"/>
<TopLine Value="1"/>
<EditorIndex Value="1"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit14>
<Unit15>
<Filename Value="..\..\uvirtuallayer.pas"/>
<UnitName Value="uvirtuallayer"/>
<CursorPos X="1" Y="17"/>
<TopLine Value="5"/>
<EditorIndex Value="5"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit15>
<Unit16>
<Filename Value="..\..\uvirtuallayer_ole.pas"/>
<UnitName Value="uvirtuallayer_ole"/>
<CursorPos X="37" Y="61"/>
<TopLine Value="56"/>
<EditorIndex Value="6"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit16>
<Unit17>
<Filename Value="..\..\uvirtuallayer_ole_helpers.pas"/>
<UnitName Value="uvirtuallayer_ole_helpers"/>
<CursorPos X="94" Y="3"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit17>
<Unit18>
<Filename Value="..\..\uvirtuallayer_ole_types.pas"/>
<UnitName Value="uvirtuallayer_ole_types"/>
<CursorPos X="89" Y="6"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit18>
<Unit19>
<Filename Value="..\..\uvirtuallayer_stream.pas"/>
<UnitName Value="uvirtuallayer_stream"/>
<CursorPos X="71" Y="10"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit19>
<Unit20>
<Filename Value="..\..\..\..\..\lazarus\lcl\masks.pas"/>
<UnitName Value="Masks"/>
<CursorPos X="35" Y="9"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit20>
</Units>
<JumpHistory Count="21" HistoryIndex="20">
<Position1>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="137" Column="40" TopLine="129"/>
</Position1>
<Position2>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="100" Column="17" TopLine="92"/>
</Position2>
<Position3>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="615" Column="34" TopLine="593"/>
</Position3>
<Position4>
<Filename Value="excel5write.lpr"/>
<Caret Line="47" Column="30" TopLine="33"/>
</Position4>
<Position5>
<Filename Value="excel5write.lpr"/>
<Caret Line="53" Column="21" TopLine="40"/>
</Position5>
<Position6>
<Filename Value="excel5write.lpr"/>
<Caret Line="54" Column="27" TopLine="40"/>
</Position6>
<Position7>
<Filename Value="excel5write.lpr"/>
<Caret Line="52" Column="38" TopLine="43"/>
</Position7>
<Position8>
<Filename Value="excel5write.lpr"/>
<Caret Line="56" Column="25" TopLine="37"/>
</Position8>
<Position9>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="101" Column="27" TopLine="89"/>
</Position9>
<Position10>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="263" Column="5" TopLine="256"/>
</Position10>
<Position11>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="101" Column="48" TopLine="90"/>
</Position11>
<Position12>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="250" Column="3" TopLine="238"/>
</Position12>
<Position13>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="245" Column="28" TopLine="234"/>
</Position13>
<Position14>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="268" Column="40" TopLine="248"/>
</Position14>
<Position15>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="101" Column="54" TopLine="90"/>
</Position15>
<Position16>
<Filename Value="..\..\uvirtuallayer.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position16>
<Position17>
<Filename Value="..\..\uvirtuallayer.pas"/>
<Caret Line="962" Column="3" TopLine="960"/>
</Position17>
<Position18>
<Filename Value="..\..\uvirtuallayer.pas"/>
<Caret Line="567" Column="1" TopLine="563"/>
</Position18>
<Position19>
<Filename Value="..\..\uvirtuallayer_ole.pas"/>
<Caret Line="70" Column="3" TopLine="61"/>
</Position19>
<Position20>
<Filename Value="..\..\uvirtuallayer_ole.pas"/>
<Caret Line="69" Column="5" TopLine="58"/>
</Position20>
<Position21>
<Filename Value="..\..\uvirtuallayer_ole.pas"/>
<Caret Line="68" Column="5" TopLine="56"/>
</Position21>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="8"/>

View File

@ -24,7 +24,7 @@ begin
// Create the spreadsheet
MyWorkbook := TsWorkbook.Create;
MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet');
MyWorksheet := MyWorkbook.AddWorksheet('Meu Relatório');
// Write some cells
MyWorksheet.WriteNumber(0, 0, 1.0);// A1

View File

@ -5,108 +5,108 @@ unit uvirtuallayer;
interface
uses
Classes, SysUtils,strutils,
Classes, SysUtils, strutils,
{$ifdef FPSUSELCL}
Graphics,
{$endif}
uvirtuallayer_types,uvirtuallayer_stream;
uvirtuallayer_types, uvirtuallayer_stream;
type
{ TVirtualLayer }
{ TVirtualLayer }
TVirtualLayer=class(TObject)
private
FMountPoints: array of TVirtualMountPoint;
m_Critical: TRTLCriticalSection;
FFreeLayerStreamOnFree: Boolean;
function GetIsWritableMedia: Boolean;
function GetMountPath: UTF8String;
function GetRootLayer: TVirtualLayer;
procedure SetParentLayer(const AValue: TVirtualLayer);
function PathMountedInCurrentLayer(const APath: UTF8String): TVirtualLayer;
function BuildPathFromIndex(const ASplittedPath: TStringList; const Index: integer): UTF8String;
function FindMounted(const APath: UTF8String; out ARemainPath: UTF8String): TVirtualLayer; overload;
function FindMounted(const APath: UTF8String): TVirtualLayer; overload;
function PreviousPath(const APath: UTF8String): UTF8String;
function StripMountPoints(const APath: UTF8String): UTF8String;
protected
FParentLayer: TVirtualLayer;
FVirtualLayerStream: TStream;
FMountedInPath: UTF8String;
procedure SplitPath(const APath: UTF8String;const ASplittedPath: TStringList);
function FileToVirtualLayer(const ATargetFileName: UTF8String;out TargetVL: TVirtualLayer): Boolean;
function AcrossLayersCopy(const ASourceFileName,ATargetFileName: UTF8String): Boolean;
function AcrossLayersMove(const ASourceFileName,ATargetFileName: UTF8String): Boolean;
function NormalizePath(const APath: UTF8String): UTF8String;
function RemoveRootPathDelimiter(const APath: UTF8String): UTF8String;
function Initialize(): boolean; virtual;
TVirtualLayer=class(TObject)
private
FMountPoints: array of TVirtualMountPoint;
m_Critical: TRTLCriticalSection;
FFreeLayerStreamOnFree: Boolean;
function GetIsWritableMedia: Boolean;
function GetMountPath: UTF8String;
function GetRootLayer: TVirtualLayer;
procedure SetParentLayer(const AValue: TVirtualLayer);
function PathMountedInCurrentLayer(const APath: UTF8String): TVirtualLayer;
function BuildPathFromIndex(const ASplittedPath: TStringList; const Index: integer): UTF8String;
function FindMounted(const APath: UTF8String; out ARemainPath: UTF8String): TVirtualLayer; overload;
function FindMounted(const APath: UTF8String): TVirtualLayer; overload;
function PreviousPath(const APath: UTF8String): UTF8String;
function StripMountPoints(const APath: UTF8String): UTF8String;
protected
FParentLayer: TVirtualLayer;
FVirtualLayerStream: TStream;
FMountedInPath: UTF8String;
//Functions to be implemented in specializations
function intfOpenFile(const AFileName: UTF8String; const AMode: cardinal): TvlHandle; virtual; abstract;
function intfCloseFile(const Handle: TvlHandle): Boolean; virtual; abstract;
function intfFindList(const APath: UTF8String; const AMask: UTF8String): TVirtualLayer_FolderList; virtual; abstract;
function intfSeek(const AHandle: TvlHandle; const APosition: int64; const Origin: word): int64; virtual; abstract;
function intfRead(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64; virtual; abstract;
function intfWrite(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64; virtual; abstract;
function intfGetFileSize(const AHandle: TvlHandle): int64; virtual; abstract;
function intfSetFileSize(const AHandle: TvlHandle; const ANewFileSize: int64): Boolean; virtual; abstract;
function intfDeleteFile(const AFileName: UTF8String): boolean; virtual; abstract;
function intfGetFreeSpace(const APath: UTF8String): int64; virtual; abstract;
function intfIsWritableMedia(): Boolean; virtual; abstract;
function intfMakeFolder(const AFolder: UTF8String): Boolean; virtual; abstract;
function intfRemoveFolder(const AFolder: UTF8String): Boolean; virtual; abstract;
function intfCopy(const ASourceFileName,ATargetFileName: UTF8String): Boolean; virtual;
function intfMove(const ASourceFileName,ATargetFileName: UTF8String): Boolean; virtual;
procedure SplitPath(const APath: UTF8String;const ASplittedPath: TStringList);
function FileToVirtualLayer(const ATargetFileName: UTF8String;out TargetVL: TVirtualLayer): Boolean;
function AcrossLayersCopy(const ASourceFileName,ATargetFileName: UTF8String): Boolean;
function AcrossLayersMove(const ASourceFileName,ATargetFileName: UTF8String): Boolean;
function NormalizePath(const APath: UTF8String): UTF8String;
function RemoveRootPathDelimiter(const APath: UTF8String): UTF8String;
function Initialize(): boolean; virtual;
{$ifdef FPSUSELCL}
function IntfGetIcon(const APath: UTF8String): TIcon; virtual;
{$endif}
//Functions to be implemented in specializations
function intfOpenFile(const AFileName: UTF8String; const AMode: cardinal): TvlHandle; virtual; abstract;
function intfCloseFile(const Handle: TvlHandle): Boolean; virtual; abstract;
function intfFindList(const APath: UTF8String; const AMask: UTF8String): TVirtualLayer_FolderList; virtual; abstract;
function intfSeek(const AHandle: TvlHandle; const APosition: int64; const Origin: word): int64; virtual; abstract;
function intfRead(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64; virtual; abstract;
function intfWrite(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64; virtual; abstract;
function intfGetFileSize(const AHandle: TvlHandle): int64; virtual; abstract;
function intfSetFileSize(const AHandle: TvlHandle; const ANewFileSize: int64): Boolean; virtual; abstract;
function intfDeleteFile(const AFileName: UTF8String): boolean; virtual; abstract;
function intfGetFreeSpace(const APath: UTF8String): int64; virtual; abstract;
function intfIsWritableMedia(): Boolean; virtual; abstract;
function intfMakeFolder(const AFolder: UTF8String): Boolean; virtual; abstract;
function intfRemoveFolder(const AFolder: UTF8String): Boolean; virtual; abstract;
function intfCopy(const ASourceFileName,ATargetFileName: UTF8String): Boolean; virtual;
function intfMove(const ASourceFileName,ATargetFileName: UTF8String): Boolean; virtual;
procedure Lock(); virtual;
procedure Unlock(); virtual;
public
{$ifdef FPSUSELCL}
function IntfGetIcon(const APath: UTF8String): TIcon; virtual;
{$endif}
function MakeFolder(const AFolder: UTF8String): Boolean;
function RemoveFolder(const AFolder: UTF8String): Boolean;
function DeleteFile(const AFileName: UTF8String): Boolean;
function Read(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64;
function Write(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64;
function FindList(const APath: UTF8String; const AMask: UTF8String): TVirtualLayer_FolderList;
function OpenFile(const FileName: UTF8String; const Mode: cardinal): TvlHandle;
function CloseFile(const Handle: TvlHandle): Boolean;
function GetFileSize(const AHandle: TvlHandle): int64;
function SetFileSize(const AHandle: TvlHandle; const ANewSize: int64): Boolean;
function Seek(const AHandle: TvlHandle; const APosition: int64; const Origin: Word): int64;
function FileExists(const AFileName: UTF8String): Boolean; virtual;
function MoveFile(const ASourceFileName,ATargetFileName: UTF8String): Boolean; virtual;
function CopyFile(const ASourceFileName,ATargetFileName: UTF8String): Boolean; virtual;
function GetFreeSpace(const APath: UTF8String): int64;
function FindFirst(const APath: String;const Attr: LongInt;out Rlst: sysutils.TSearchRec): LongInt;
function FindNext(var Rlst: sysutils.TSearchRec): LongInt;
procedure FindClose(Rlst: sysutils.TSearchRec);
procedure Lock(); virtual;
procedure Unlock(); virtual;
public
procedure SplitFileNamePath(const AFullPath: UTF8String; out APath: UTF8String; out AFileName: UTF8String);
function PathToVirtualLayer(const APath: UTF8String): TVirtualLayer;
function CreateStream(const AFileName: UTF8String; const AMode: Cardinal): TVirtualLayer_Stream;
function Mount(const AMountPath: UTF8String; const AVirtualLayer: TVirtualLayer): Boolean;
function UnMount(const AMountPath: UTF8String; const FreeAssociatedVirtualLayer: Boolean=true): Boolean;
function MakeFolder(const AFolder: UTF8String): Boolean;
function RemoveFolder(const AFolder: UTF8String): Boolean;
function DeleteFile(const AFileName: UTF8String): Boolean;
function Read(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64;
function Write(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64;
function FindList(const APath: UTF8String; const AMask: UTF8String): TVirtualLayer_FolderList;
function OpenFile(const FileName: UTF8String; const Mode: cardinal): TvlHandle;
function CloseFile(const Handle: TvlHandle): Boolean;
function GetFileSize(const AHandle: TvlHandle): int64;
function SetFileSize(const AHandle: TvlHandle; const ANewSize: int64): Boolean;
function Seek(const AHandle: TvlHandle; const APosition: int64; const Origin: Word): int64;
function FileExists(const AFileName: UTF8String): Boolean; virtual;
function MoveFile(const ASourceFileName,ATargetFileName: UTF8String): Boolean; virtual;
function CopyFile(const ASourceFileName,ATargetFileName: UTF8String): Boolean; virtual;
function GetFreeSpace(const APath: UTF8String): int64;
function FindFirst(const APath: String;const Attr: LongInt;out Rlst: sysutils.TSearchRec): LongInt;
function FindNext(var Rlst: sysutils.TSearchRec): LongInt;
procedure FindClose(Rlst: sysutils.TSearchRec);
property FreeLayerStreamOnFree: Boolean read FFreeLayerStreamOnFree write FFreeLayerStreamOnFree;
property IsWritableMedia: Boolean read GetIsWritableMedia;
property MountPath: UTF8String read GetMountPath;
property RootLayer: TVirtualLayer read GetRootLayer;
property ParentLayer: TVirtualLayer read FParentLayer write SetParentLayer;
procedure SplitFileNamePath(const AFullPath: UTF8String; out APath: UTF8String; out AFileName: UTF8String);
function PathToVirtualLayer(const APath: UTF8String): TVirtualLayer;
function CreateStream(const AFileName: UTF8String; const AMode: Cardinal): TVirtualLayer_Stream;
function Mount(const AMountPath: UTF8String; const AVirtualLayer: TVirtualLayer): Boolean;
function UnMount(const AMountPath: UTF8String; const FreeAssociatedVirtualLayer: Boolean=true): Boolean;
{$ifdef FPSUSELCL}
function GetIcon(const APath: UTF8String): TIcon;
{$endif}
property FreeLayerStreamOnFree: Boolean read FFreeLayerStreamOnFree write FFreeLayerStreamOnFree;
property IsWritableMedia: Boolean read GetIsWritableMedia;
property MountPath: UTF8String read GetMountPath;
property RootLayer: TVirtualLayer read GetRootLayer;
property ParentLayer: TVirtualLayer read FParentLayer write SetParentLayer;
Constructor Create(const AVirtualLayerStream: TStream);
procedure PrepareDestroy(); virtual;
Destructor Destroy(); override;
end;
{$ifdef FPSUSELCL}
function GetIcon(const APath: UTF8String): TIcon;
{$endif}
Constructor Create(const AVirtualLayerStream: TStream);
procedure PrepareDestroy(); virtual;
Destructor Destroy(); override;
end;
implementation

View File

@ -67,57 +67,54 @@ uses
{.$ifdef FPSUSELCL}
Masks,
{.$endif}
uvirtuallayer_types
,uvirtuallayer
,uvirtuallayer_ole_helpers
,uvirtuallayer_ole_types
;
uvirtuallayer_types, uvirtuallayer,
uvirtuallayer_ole_helpers, uvirtuallayer_ole_types;
type
{ TVirtualLayer_wincompound }
{ TVirtualLayer_wincompound }
TVirtualLayer_OLE=class(TVirtualLayer)
private
procedure UseParameter(const Parameter);
procedure SwapEndian_Record(var D: TWCBFStructuredStorageHeader);
procedure SwapEndian_Record(var D: TWCBFStructuredStorageDirectoryEntry);
Procedure NotImplemented();
function ReadData(const Index: integer; const Buffer: PBYTE; const Size: int64): int64;
function GetStorageFirstSID(const APath: UTF8String): SID;
function GetStreamSID(const APath: UTF8String): SID;
function FindFreeOpenFile(): integer;
procedure DeleteSIDData(const ASID: SID);
function CreateNewSID(const AType: etagSTGTY): SID;
procedure InsertInDirectoryTree(const ASID,AMasterSID: SID);
OpenedStreams: array of TWCBFOpenStream;
FFATIndirect: TFATIndirect;
protected
function intfGetFreeSpace(const APath: UTF8String): int64; override;
function intfIsWritableMedia(): Boolean; override;
function intfFindList(const APath: UTF8String; const AMask: UTF8String): TVirtualLayer_FolderList; override;
TVirtualLayer_OLE=class(TVirtualLayer)
private
procedure UseParameter(const Parameter);
procedure SwapEndian_Record(var D: TWCBFStructuredStorageHeader);
procedure SwapEndian_Record(var D: TWCBFStructuredStorageDirectoryEntry);
Procedure NotImplemented();
function ReadData(const Index: integer; const Buffer: PBYTE; const Size: int64): int64;
function GetStorageFirstSID(const APath: UTF8String): SID;
function GetStreamSID(const APath: UTF8String): SID;
function FindFreeOpenFile(): integer;
procedure DeleteSIDData(const ASID: SID);
function CreateNewSID(const AType: etagSTGTY): SID;
procedure InsertInDirectoryTree(const ASID,AMasterSID: SID);
OpenedStreams: array of TWCBFOpenStream;
FFATIndirect: TFATIndirect;
protected
function intfGetFreeSpace(const APath: UTF8String): int64; override;
function intfIsWritableMedia(): Boolean; override;
function intfFindList(const APath: UTF8String; const AMask: UTF8String): TVirtualLayer_FolderList; override;
function intfOpenFile(const AFileName: UTF8String; const AMode: cardinal): TvlHandle; override;
function intfCloseFile(const Handle: TvlHandle): Boolean; override;
function intfRead(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64; override;
function intfSeek(const AHandle: TvlHandle; const APosition: int64; const Origin: word): int64; override;
function intfGetFileSize(const AHandle: TvlHandle): int64; override;
//Not implemented....
function intfWrite(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64; override;
function intfSetFileSize(const AHandle: TvlHandle; const ANewFileSize: int64): Boolean; override;
function intfDeleteFile(const AFileName: UTF8String): boolean; override;
function intfMakeFolder(const AFolder: UTF8String): Boolean; override;
function intfRemoveFolder(const AFolder: UTF8String): Boolean; override;
//..Not implemented
function intfOpenFile(const AFileName: UTF8String; const AMode: cardinal): TvlHandle; override;
function intfCloseFile(const Handle: TvlHandle): Boolean; override;
function intfRead(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64; override;
function intfSeek(const AHandle: TvlHandle; const APosition: int64; const Origin: word): int64; override;
function intfGetFileSize(const AHandle: TvlHandle): int64; override;
//Not implemented....
function intfWrite(const Handle: TvlHandle; const Buffer: PBYTE; const Size: int64): int64; override;
function intfSetFileSize(const AHandle: TvlHandle; const ANewFileSize: int64): Boolean; override;
function intfDeleteFile(const AFileName: UTF8String): boolean; override;
function intfMakeFolder(const AFolder: UTF8String): Boolean; override;
function intfRemoveFolder(const AFolder: UTF8String): Boolean; override;
//..Not implemented
FDirectory: array of TWCBFStructuredStorageDirectoryEntry;
FDirectory: array of TWCBFStructuredStorageDirectoryEntry;
procedure AfterConstruction; override;
public
procedure Format();
function Initialize():boolean; override;
destructor Destroy(); override;
end;
procedure AfterConstruction; override;
public
procedure Format();
function Initialize():boolean; override;
destructor Destroy(); override;
end;
implementation

View File

@ -127,7 +127,7 @@ implementation
const
{ Excel record IDs }
INT_EXCEL_ID_BOF = $0809;
INT_EXCEL_ID_BOUNDSHEET = $0085;
INT_EXCEL_ID_BOUNDSHEET = $0085; // Refered as SHEET in the OpenOffice docs
INT_EXCEL_ID_EOF = $000A;
INT_EXCEL_ID_DIMENSIONS = $0200;
INT_EXCEL_ID_FONT = $0031;
@ -455,8 +455,10 @@ end;
function TsSpreadBIFF5Writer.WriteBoundsheet(AStream: TStream; ASheetName: string): Int64;
var
Len: Byte;
LatinSheetName: string;
begin
Len := Length(ASheetName);
LatinSheetName := UTF8ToAnsi(ASheetName); // Should actually be UTF-8 to Latin 1 ISO
Len := Length(LatinSheetName);
{ BIFF Record header }
AStream.WriteWord(WordToLE(INT_EXCEL_ID_BOUNDSHEET));
@ -475,7 +477,7 @@ begin
{ Sheet name: Byte string, 8-bit length }
AStream.WriteByte(Len);
AStream.WriteBuffer(ASheetName[1], Len);
AStream.WriteBuffer(LatinSheetName[1], Len);
end;
{*******************************************************************