fpspreadsheet: First working ole file generation

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@652 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2009-01-06 20:29:56 +00:00
parent 99057104e2
commit 5d89c8cf03
2 changed files with 118 additions and 76 deletions

View File

@ -30,7 +30,7 @@
<PackageName Value="laz_fpspreadsheet"/> <PackageName Value="laz_fpspreadsheet"/>
</Item1> </Item1>
</RequiredPackages> </RequiredPackages>
<Units Count="19"> <Units Count="21">
<Unit0> <Unit0>
<Filename Value="excel5demo.lpr"/> <Filename Value="excel5demo.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -38,7 +38,7 @@
<CursorPos X="16" Y="16"/> <CursorPos X="16" Y="16"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="96"/> <UsageCount Value="112"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
@ -46,69 +46,69 @@
<UnitName Value="fpspreadsheet"/> <UnitName Value="fpspreadsheet"/>
<CursorPos X="32" Y="414"/> <CursorPos X="32" Y="414"/>
<TopLine Value="388"/> <TopLine Value="388"/>
<UsageCount Value="20"/> <UsageCount Value="19"/>
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="..\xlsbiff5.pas"/> <Filename Value="..\xlsbiff5.pas"/>
<UnitName Value="xlsbiff5"/> <UnitName Value="xlsbiff5"/>
<CursorPos X="16" Y="320"/> <CursorPos X="16" Y="320"/>
<TopLine Value="300"/> <TopLine Value="300"/>
<UsageCount Value="20"/> <UsageCount Value="19"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
<Filename Value="..\..\..\..\..\FPC220\source\packages\base\winunits\activex.pp"/> <Filename Value="..\..\..\..\..\FPC220\source\packages\base\winunits\activex.pp"/>
<UnitName Value="ActiveX"/> <UnitName Value="ActiveX"/>
<CursorPos X="27" Y="29"/> <CursorPos X="27" Y="29"/>
<TopLine Value="6"/> <TopLine Value="6"/>
<UsageCount Value="4"/> <UsageCount Value="3"/>
</Unit3> </Unit3>
<Unit4> <Unit4>
<Filename Value="..\fpolestorage.pas"/> <Filename Value="..\fpolestorage.pas"/>
<UnitName Value="fpolestorage"/> <UnitName Value="fpolestorage"/>
<CursorPos X="1" Y="1"/> <CursorPos X="1" Y="1"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="40"/> <UsageCount Value="39"/>
</Unit4> </Unit4>
<Unit5> <Unit5>
<Filename Value="..\..\..\..\..\FPC220\source\rtl\inc\objpash.inc"/> <Filename Value="..\..\..\..\..\FPC220\source\rtl\inc\objpash.inc"/>
<CursorPos X="21" Y="141"/> <CursorPos X="21" Y="141"/>
<TopLine Value="131"/> <TopLine Value="131"/>
<UsageCount Value="4"/> <UsageCount Value="3"/>
</Unit5> </Unit5>
<Unit6> <Unit6>
<Filename Value="..\xlsbiff2.pas"/> <Filename Value="..\xlsbiff2.pas"/>
<UnitName Value="xlsbiff2"/> <UnitName Value="xlsbiff2"/>
<CursorPos X="20" Y="277"/> <CursorPos X="20" Y="277"/>
<TopLine Value="260"/> <TopLine Value="260"/>
<UsageCount Value="13"/> <UsageCount Value="12"/>
</Unit6> </Unit6>
<Unit7> <Unit7>
<Filename Value="..\..\..\..\..\FPC220\source\rtl\objpas\classes\classesh.inc"/> <Filename Value="..\..\..\..\..\FPC220\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="22" Y="1602"/> <CursorPos X="22" Y="1602"/>
<TopLine Value="1598"/> <TopLine Value="1598"/>
<UsageCount Value="6"/> <UsageCount Value="5"/>
</Unit7> </Unit7>
<Unit8> <Unit8>
<Filename Value="..\..\..\..\..\FPC220\source\rtl\win32\buildrtl.pp"/> <Filename Value="..\..\..\..\..\FPC220\source\rtl\win32\buildrtl.pp"/>
<UnitName Value="buildrtl"/> <UnitName Value="buildrtl"/>
<CursorPos X="29" Y="5"/> <CursorPos X="29" Y="5"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="4"/> <UsageCount Value="3"/>
</Unit8> </Unit8>
<Unit9> <Unit9>
<Filename Value="..\..\..\..\..\FPC220\source\rtl\objpas\fgl.pp"/> <Filename Value="..\..\..\..\..\FPC220\source\rtl\objpas\fgl.pp"/>
<UnitName Value="fgl"/> <UnitName Value="fgl"/>
<CursorPos X="15" Y="86"/> <CursorPos X="15" Y="86"/>
<TopLine Value="55"/> <TopLine Value="55"/>
<UsageCount Value="13"/> <UsageCount Value="12"/>
</Unit9> </Unit9>
<Unit10> <Unit10>
<Filename Value="..\..\..\..\..\lazarus\lcl\interfaces\win32\win32wsstdctrls.pp"/> <Filename Value="..\..\..\..\..\lazarus\lcl\interfaces\win32\win32wsstdctrls.pp"/>
<UnitName Value="Win32WSStdCtrls"/> <UnitName Value="Win32WSStdCtrls"/>
<CursorPos X="11" Y="737"/> <CursorPos X="11" Y="737"/>
<TopLine Value="713"/> <TopLine Value="713"/>
<EditorIndex Value="6"/> <EditorIndex Value="8"/>
<UsageCount Value="37"/> <UsageCount Value="45"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit10> </Unit10>
<Unit11> <Unit11>
@ -116,29 +116,29 @@
<UnitName Value="Win32WSControls"/> <UnitName Value="Win32WSControls"/>
<CursorPos X="13" Y="206"/> <CursorPos X="13" Y="206"/>
<TopLine Value="199"/> <TopLine Value="199"/>
<UsageCount Value="7"/> <UsageCount Value="6"/>
</Unit11> </Unit11>
<Unit12> <Unit12>
<Filename Value="..\..\..\..\..\lazarus\components\sqlite\registersqlite3.pas"/> <Filename Value="..\..\..\..\..\lazarus\components\sqlite\registersqlite3.pas"/>
<UnitName Value="registersqlite3"/> <UnitName Value="registersqlite3"/>
<CursorPos X="15" Y="5"/> <CursorPos X="15" Y="5"/>
<TopLine Value="1"/> <TopLine Value="1"/>
<UsageCount Value="6"/> <UsageCount Value="5"/>
</Unit12> </Unit12>
<Unit13> <Unit13>
<Filename Value="..\..\..\..\..\lazarus\ideintf\componenteditors.pas"/> <Filename Value="..\..\..\..\..\lazarus\ideintf\componenteditors.pas"/>
<UnitName Value="ComponentEditors"/> <UnitName Value="ComponentEditors"/>
<CursorPos X="54" Y="353"/> <CursorPos X="54" Y="353"/>
<TopLine Value="330"/> <TopLine Value="330"/>
<EditorIndex Value="5"/> <EditorIndex Value="7"/>
<UsageCount Value="35"/> <UsageCount Value="43"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit13> </Unit13>
<Unit14> <Unit14>
<Filename Value="..\..\..\..\..\FPC220\source\rtl\objpas\classes\cregist.inc"/> <Filename Value="..\..\..\..\..\FPC220\source\rtl\objpas\classes\cregist.inc"/>
<CursorPos X="17" Y="124"/> <CursorPos X="17" Y="124"/>
<TopLine Value="121"/> <TopLine Value="121"/>
<UsageCount Value="6"/> <UsageCount Value="5"/>
</Unit14> </Unit14>
<Unit15> <Unit15>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="..\..\xlsbiff5.pas"/>
@ -146,7 +146,7 @@
<CursorPos X="28" Y="62"/> <CursorPos X="28" Y="62"/>
<TopLine Value="59"/> <TopLine Value="59"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<UsageCount Value="33"/> <UsageCount Value="41"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit15> </Unit15>
<Unit16> <Unit16>
@ -155,7 +155,7 @@
<CursorPos X="1" Y="49"/> <CursorPos X="1" Y="49"/>
<TopLine Value="30"/> <TopLine Value="30"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<UsageCount Value="33"/> <UsageCount Value="41"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit16> </Unit16>
<Unit17> <Unit17>
@ -164,139 +164,155 @@
<CursorPos X="1" Y="69"/> <CursorPos X="1" Y="69"/>
<TopLine Value="57"/> <TopLine Value="57"/>
<EditorIndex Value="3"/> <EditorIndex Value="3"/>
<UsageCount Value="33"/> <UsageCount Value="41"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit17> </Unit17>
<Unit18> <Unit18>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<UnitName Value="fpolestorage"/> <UnitName Value="fpolestorage"/>
<CursorPos X="1" Y="471"/> <CursorPos X="1" Y="316"/>
<TopLine Value="458"/> <TopLine Value="308"/>
<EditorIndex Value="4"/> <EditorIndex Value="4"/>
<UsageCount Value="33"/> <UsageCount Value="41"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit18> </Unit18>
<Unit19>
<Filename Value="..\..\..\..\..\lazarus26\fpc\2.2.2\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="17" Y="724"/>
<TopLine Value="714"/>
<EditorIndex Value="5"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit19>
<Unit20>
<Filename Value="..\..\..\..\..\lazarus26\fpc\2.2.2\source\rtl\objpas\classes\streams.inc"/>
<CursorPos X="1" Y="159"/>
<TopLine Value="151"/>
<EditorIndex Value="6"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit20>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="..\..\..\..\..\lazarus\lcl\interfaces\win32\win32wsstdctrls.pp"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="737" Column="11" TopLine="713"/> <Caret Line="51" Column="25" TopLine="34"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="..\..\..\..\..\lazarus\ideintf\componenteditors.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="353" Column="54" TopLine="330"/> <Caret Line="157" Column="21" TopLine="151"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="excel5demo.lpr"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="49" Column="12" TopLine="30"/> <Caret Line="155" Column="5" TopLine="136"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="365" Column="37" TopLine="354"/> <Caret Line="65" Column="3" TopLine="58"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="38" Column="20" TopLine="21"/> <Caret Line="25" Column="11" TopLine="16"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="60" Column="54" TopLine="49"/> <Caret Line="194" Column="15" TopLine="60"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpsutils.pas"/>
<Caret Line="44" Column="24" TopLine="32"/> <Caret Line="45" Column="5" TopLine="26"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="51" Column="25" TopLine="34"/> <Caret Line="150" Column="5" TopLine="131"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="157" Column="21" TopLine="151"/> <Caret Line="191" Column="5" TopLine="172"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="155" Column="5" TopLine="136"/> <Caret Line="49" Column="15" TopLine="39"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="65" Column="3" TopLine="58"/> <Caret Line="331" Column="45" TopLine="326"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="25" Column="11" TopLine="16"/> <Caret Line="24" Column="27" TopLine="19"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="194" Column="15" TopLine="60"/> <Caret Line="247" Column="1" TopLine="229"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="..\..\fpsutils.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="45" Column="5" TopLine="26"/> <Caret Line="224" Column="5" TopLine="205"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="150" Column="5" TopLine="131"/> <Caret Line="231" Column="1" TopLine="219"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="191" Column="5" TopLine="172"/> <Caret Line="377" Column="5" TopLine="358"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="49" Column="15" TopLine="39"/> <Caret Line="225" Column="1" TopLine="211"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="331" Column="45" TopLine="326"/> <Caret Line="246" Column="12" TopLine="237"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="24" Column="27" TopLine="19"/> <Caret Line="79" Column="16" TopLine="78"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="247" Column="1" TopLine="229"/> <Caret Line="87" Column="16" TopLine="77"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="224" Column="5" TopLine="205"/> <Caret Line="218" Column="24" TopLine="207"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="231" Column="1" TopLine="219"/> <Caret Line="235" Column="30" TopLine="224"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="377" Column="5" TopLine="358"/> <Caret Line="80" Column="28" TopLine="68"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="225" Column="1" TopLine="211"/> <Caret Line="40" Column="5" TopLine="31"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="246" Column="12" TopLine="237"/> <Caret Line="472" Column="49" TopLine="461"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="79" Column="16" TopLine="78"/> <Caret Line="405" Column="5" TopLine="386"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="87" Column="16" TopLine="77"/> <Caret Line="404" Column="14" TopLine="401"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="218" Column="24" TopLine="207"/> <Caret Line="79" Column="42" TopLine="72"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="235" Column="30" TopLine="224"/> <Caret Line="78" Column="31" TopLine="67"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="80" Column="28" TopLine="68"/> <Caret Line="314" Column="39" TopLine="296"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>

View File

@ -37,7 +37,7 @@ unit fpolestorage;
interface interface
{$ifdef Windows} {$ifdef Windows}
{$define FPOLESTORAGE_USE_COM} {.$define FPOLESTORAGE_USE_COM}
{$endif} {$endif}
uses uses
@ -79,6 +79,7 @@ type
EntryType, EntryColor: Byte; AIsStorage: Boolean; EntryType, EntryColor: Byte; AIsStorage: Boolean;
AStreamSize: Cardinal); AStreamSize: Cardinal);
procedure WriteShortSectorAllocationTable(AStream: TStream); procedure WriteShortSectorAllocationTable(AStream: TStream);
procedure WriteUserStream(ADest, ASource: TStream);
public public
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
@ -127,6 +128,8 @@ begin
{ 8 16 Unique identifier (UID) of this file (not of interest in the following, may be all 0) } { 8 16 Unique identifier (UID) of this file (not of interest in the following, may be all 0) }
AStream.WriteDWord(0); AStream.WriteDWord(0);
AStream.WriteDWord(0); AStream.WriteDWord(0);
AStream.WriteDWord(0);
AStream.WriteDWord(0);
{ 24 2 Revision number of the file format (most used is 003EH) } { 24 2 Revision number of the file format (most used is 003EH) }
AStream.WriteWord(WordToLE($003E)); AStream.WriteWord(WordToLE($003E));
@ -272,7 +275,9 @@ begin
storage, 7.1), 1 otherwise storage, 7.1), 1 otherwise
} }
AStream.WriteWord(WordToLE(Length(AName) * 2)); if AName = #0 then AStream.WriteWord($0000)
else AStream.WriteWord(WordToLE(Length(AName) * 2));
AStream.WriteByte(EntryType); AStream.WriteByte(EntryType);
AStream.WriteByte(EntryColor); AStream.WriteByte(EntryColor);
@ -280,7 +285,7 @@ begin
AStream.WriteDWord(DWordToLE($FFFFFFFF)); AStream.WriteDWord(DWordToLE($FFFFFFFF));
if AIsStorage then AStream.WriteDWord(DWordToLE($00000001)) if AIsStorage then AStream.WriteDWord(DWordToLE($00000001))
else AStream.WriteDWord(DWordToLE($FFFFFFFF));; else AStream.WriteDWord(DWordToLE($FFFFFFFF));
{00000450H 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 {00000450H 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
@ -296,7 +301,17 @@ begin
a valid time stamp, but fill up this space with zero bytes. a valid time stamp, but fill up this space with zero bytes.
} }
for i := 1 to ($474 - $450) do AStream.WriteByte($00); AStream.WriteDWord(0);
AStream.WriteDWord(0);
AStream.WriteDWord(0);
AStream.WriteDWord(0);
AStream.WriteDWord(0);
AStream.WriteDWord(0);
AStream.WriteDWord(0);
AStream.WriteDWord(0);
AStream.WriteDWord(0);
{Root Storage #1 {Root Storage #1
00000470H XX XX XX XX 03 00 00 00 40 03 00 00 00 00 00 00 00000470H XX XX XX XX 03 00 00 00 40 03 00 00 00 00 00 00
@ -335,7 +350,7 @@ procedure TOLEStorage.WriteDirectoryStream(AStream: TStream);
begin begin
WriteDirectoryEntry(AStream, 'Root Entry'#0, WriteDirectoryEntry(AStream, 'Root Entry'#0,
INT_OLE_DIR_ENTRY_TYPE_ROOT_STORAGE, INT_OLE_DIR_COLOR_RED, INT_OLE_DIR_ENTRY_TYPE_ROOT_STORAGE, INT_OLE_DIR_COLOR_RED,
True, $00000340); True, $00000340);
WriteDirectoryEntry(AStream, 'Book'#0, WriteDirectoryEntry(AStream, 'Book'#0,
INT_OLE_DIR_ENTRY_TYPE_USER_STREAM, INT_OLE_DIR_COLOR_BLACK, INT_OLE_DIR_ENTRY_TYPE_USER_STREAM, INT_OLE_DIR_COLOR_BLACK,
@ -396,6 +411,18 @@ begin
for i := 1 to ($A00 - $840) do AStream.WriteByte($FF); for i := 1 to ($A00 - $840) do AStream.WriteByte($FF);
end; end;
procedure TOLEStorage.WriteUserStream(ADest, ASource: TStream);
var
i, PadSize: Integer;
begin
ADest.CopyFrom(ASource, 0);
// Pad the sector with zeroes
PadSize := INT_OLE_SECTOR_SIZE - (ASource.Size mod INT_OLE_SECTOR_SIZE);
for i := 1 to PadSize do ADest.WriteByte($00);
end;
constructor TOLEStorage.Create; constructor TOLEStorage.Create;
begin begin
inherited Create; inherited Create;
@ -461,15 +488,14 @@ begin
// Record 0, the SAT // Record 0, the SAT
WriteSectorAllocationTable(AFileStream); WriteSectorAllocationTable(AFileStream);
// Records 1 and 2, the directory stream // Record 1, the directory stream
WriteDirectoryStream(AFileStream);
WriteDirectoryStream(AFileStream); WriteDirectoryStream(AFileStream);
// Record 3, the Short SAT // Record 2, the Short SAT
WriteShortSectorAllocationTable(AFileStream); WriteShortSectorAllocationTable(AFileStream);
// Records 4 and on, the user data // Records 3 and on, the user data
AFileStream.CopyFrom(FOLEDocument.Streams[0]); WriteUserStream(AFileStream, FOLEDocument.Streams[0]);
finally finally
AFileStream.Free; AFileStream.Free;
end; end;