You've already forked lazarus-ccr
fpspreadsheet: Add BiffExplorer, a testing and debugging tool for xls files, to folder "reference"
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2938 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
BIN
components/fpspreadsheet/reference/BIFFExplorer/BIFFExplorer.ico
Normal file
BIN
components/fpspreadsheet/reference/BIFFExplorer/BIFFExplorer.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 134 KiB |
238
components/fpspreadsheet/reference/BIFFExplorer/BIFFExplorer.lpi
Normal file
238
components/fpspreadsheet/reference/BIFFExplorer/BIFFExplorer.lpi
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CONFIG>
|
||||||
|
<ProjectOptions>
|
||||||
|
<Version Value="9"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<General>
|
||||||
|
<SessionStorage Value="InProjectDir"/>
|
||||||
|
<MainUnit Value="0"/>
|
||||||
|
<Title Value="BIFFExplorer"/>
|
||||||
|
<ResourceType Value="res"/>
|
||||||
|
<UseXPManifest Value="True"/>
|
||||||
|
<XPManifest>
|
||||||
|
<DpiAware Value="True"/>
|
||||||
|
</XPManifest>
|
||||||
|
<Icon Value="0"/>
|
||||||
|
</General>
|
||||||
|
<i18n>
|
||||||
|
<EnableI18N LFM="False"/>
|
||||||
|
</i18n>
|
||||||
|
<VersionInfo>
|
||||||
|
<StringTable ProductVersion=""/>
|
||||||
|
</VersionInfo>
|
||||||
|
<BuildModes Count="3">
|
||||||
|
<Item1 Name="Release" Default="True"/>
|
||||||
|
<Item2 Name="Debug">
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<OtherUnitFiles Value="mrumenu"/>
|
||||||
|
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Parsing>
|
||||||
|
<SyntaxOptions>
|
||||||
|
<IncludeAssertionCode Value="True"/>
|
||||||
|
</SyntaxOptions>
|
||||||
|
</Parsing>
|
||||||
|
<CodeGeneration>
|
||||||
|
<Checks>
|
||||||
|
<IOChecks Value="True"/>
|
||||||
|
<RangeChecks Value="True"/>
|
||||||
|
<OverflowChecks Value="True"/>
|
||||||
|
<StackChecks Value="True"/>
|
||||||
|
</Checks>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<DebugInfoType Value="dsDwarf2Set"/>
|
||||||
|
<UseExternalDbgSyms Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<CompilerMessages>
|
||||||
|
<MsgFileName Value=""/>
|
||||||
|
</CompilerMessages>
|
||||||
|
<CustomOptions Value="-duse_new_ole"/>
|
||||||
|
<CompilerPath Value="$(CompPath)"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
</Item2>
|
||||||
|
<Item3 Name="Debug with heaptrace">
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<OtherUnitFiles Value="mrumenu"/>
|
||||||
|
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<Parsing>
|
||||||
|
<SyntaxOptions>
|
||||||
|
<IncludeAssertionCode Value="True"/>
|
||||||
|
</SyntaxOptions>
|
||||||
|
</Parsing>
|
||||||
|
<CodeGeneration>
|
||||||
|
<Checks>
|
||||||
|
<IOChecks Value="True"/>
|
||||||
|
<RangeChecks Value="True"/>
|
||||||
|
<OverflowChecks Value="True"/>
|
||||||
|
<StackChecks Value="True"/>
|
||||||
|
</Checks>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<DebugInfoType Value="dsStabs"/>
|
||||||
|
<UseHeaptrc Value="True"/>
|
||||||
|
</Debugging>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<CompilerMessages>
|
||||||
|
<MsgFileName Value=""/>
|
||||||
|
</CompilerMessages>
|
||||||
|
<CustomOptions Value="-duse_new_ole"/>
|
||||||
|
<CompilerPath Value="$(CompPath)"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
</Item3>
|
||||||
|
<SharedMatrixOptions Count="1">
|
||||||
|
<Item1 ID="897672969650" Value="-vd"/>
|
||||||
|
</SharedMatrixOptions>
|
||||||
|
</BuildModes>
|
||||||
|
<PublishOptions>
|
||||||
|
<Version Value="2"/>
|
||||||
|
</PublishOptions>
|
||||||
|
<RunParams>
|
||||||
|
<local>
|
||||||
|
<FormatVersion Value="1"/>
|
||||||
|
</local>
|
||||||
|
</RunParams>
|
||||||
|
<RequiredPackages Count="4">
|
||||||
|
<Item1>
|
||||||
|
<PackageName Value="laz_fpspreadsheet"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<PackageName Value="TurboPowerIPro"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<PackageName Value="virtualtreeview_package"/>
|
||||||
|
</Item3>
|
||||||
|
<Item4>
|
||||||
|
<PackageName Value="LCL"/>
|
||||||
|
</Item4>
|
||||||
|
</RequiredPackages>
|
||||||
|
<Units Count="10">
|
||||||
|
<Unit0>
|
||||||
|
<Filename Value="BIFFExplorer.lpr"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="BIFFExplorer"/>
|
||||||
|
</Unit0>
|
||||||
|
<Unit1>
|
||||||
|
<Filename Value="beabout.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="AboutForm"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<UnitName Value="beAbout"/>
|
||||||
|
</Unit1>
|
||||||
|
<Unit2>
|
||||||
|
<Filename Value="bebiffgrid.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="beBIFFGrid"/>
|
||||||
|
</Unit2>
|
||||||
|
<Unit3>
|
||||||
|
<Filename Value="bebiffutils.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="bebiffutils"/>
|
||||||
|
</Unit3>
|
||||||
|
<Unit4>
|
||||||
|
<Filename Value="behtml.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="behtml"/>
|
||||||
|
</Unit4>
|
||||||
|
<Unit5>
|
||||||
|
<Filename Value="bemain.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="MainForm"/>
|
||||||
|
<HasResources Value="True"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
<UnitName Value="beMain"/>
|
||||||
|
</Unit5>
|
||||||
|
<Unit6>
|
||||||
|
<Filename Value="beutils.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="beUtils"/>
|
||||||
|
</Unit6>
|
||||||
|
<Unit7>
|
||||||
|
<Filename Value="mrumanager.pp"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="mrumanager"/>
|
||||||
|
</Unit7>
|
||||||
|
<Unit8>
|
||||||
|
<Filename Value="bemain.lfm"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit8>
|
||||||
|
<Unit9>
|
||||||
|
<Filename Value="beabout.lfm"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
</Unit9>
|
||||||
|
</Units>
|
||||||
|
</ProjectOptions>
|
||||||
|
<CompilerOptions>
|
||||||
|
<Version Value="11"/>
|
||||||
|
<PathDelim Value="\"/>
|
||||||
|
<SearchPaths>
|
||||||
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||||
|
<OtherUnitFiles Value="mrumenu"/>
|
||||||
|
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||||
|
</SearchPaths>
|
||||||
|
<CodeGeneration>
|
||||||
|
<SmartLinkUnit Value="True"/>
|
||||||
|
<Optimizations>
|
||||||
|
<OptimizationLevel Value="3"/>
|
||||||
|
</Optimizations>
|
||||||
|
</CodeGeneration>
|
||||||
|
<Linking>
|
||||||
|
<Debugging>
|
||||||
|
<GenerateDebugInfo Value="False"/>
|
||||||
|
</Debugging>
|
||||||
|
<LinkSmart Value="True"/>
|
||||||
|
<Options>
|
||||||
|
<Win32>
|
||||||
|
<GraphicApplication Value="True"/>
|
||||||
|
</Win32>
|
||||||
|
</Options>
|
||||||
|
</Linking>
|
||||||
|
<Other>
|
||||||
|
<CompilerMessages>
|
||||||
|
<MsgFileName Value=""/>
|
||||||
|
</CompilerMessages>
|
||||||
|
<CustomOptions Value="-duse_new_ole"/>
|
||||||
|
<CompilerPath Value="$(CompPath)"/>
|
||||||
|
</Other>
|
||||||
|
</CompilerOptions>
|
||||||
|
<Debugging>
|
||||||
|
<Exceptions Count="3">
|
||||||
|
<Item1>
|
||||||
|
<Name Value="EAbort"/>
|
||||||
|
</Item1>
|
||||||
|
<Item2>
|
||||||
|
<Name Value="ECodetoolError"/>
|
||||||
|
</Item2>
|
||||||
|
<Item3>
|
||||||
|
<Name Value="EFOpenError"/>
|
||||||
|
</Item3>
|
||||||
|
</Exceptions>
|
||||||
|
</Debugging>
|
||||||
|
</CONFIG>
|
@ -0,0 +1,22 @@
|
|||||||
|
program BIFFExplorer;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
uses
|
||||||
|
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||||
|
cthreads,
|
||||||
|
{$ENDIF}{$ENDIF}
|
||||||
|
Interfaces, // this includes the LCL widgetset
|
||||||
|
Forms, virtualtreeview_package, laz_fpspreadsheet, beabout, bebiffgrid,
|
||||||
|
bebiffutils, behtml, beutils, mrumanager, beMain;
|
||||||
|
|
||||||
|
{$R *.res}
|
||||||
|
|
||||||
|
begin
|
||||||
|
RequireDerivedFormResource := True;
|
||||||
|
Application.Initialize;
|
||||||
|
Application.CreateForm(TMainForm, MainForm);
|
||||||
|
MainForm.BeforeRun;
|
||||||
|
Application.Run;
|
||||||
|
end.
|
||||||
|
|
BIN
components/fpspreadsheet/reference/BIFFExplorer/BIFFExplorer.res
Normal file
BIN
components/fpspreadsheet/reference/BIFFExplorer/BIFFExplorer.res
Normal file
Binary file not shown.
85
components/fpspreadsheet/reference/BIFFExplorer/beabout.lfm
Normal file
85
components/fpspreadsheet/reference/BIFFExplorer/beabout.lfm
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
object AboutForm: TAboutForm
|
||||||
|
Left = 338
|
||||||
|
Height = 512
|
||||||
|
Top = 153
|
||||||
|
Width = 642
|
||||||
|
Caption = 'About BIFF Explorer'
|
||||||
|
ClientHeight = 512
|
||||||
|
ClientWidth = 642
|
||||||
|
Color = clWindow
|
||||||
|
OnCreate = FormCreate
|
||||||
|
Position = poMainFormCenter
|
||||||
|
LCLVersion = '1.3'
|
||||||
|
object Panel1: TPanel
|
||||||
|
Left = 0
|
||||||
|
Height = 66
|
||||||
|
Top = 0
|
||||||
|
Width = 642
|
||||||
|
Align = alTop
|
||||||
|
BevelOuter = bvNone
|
||||||
|
ClientHeight = 66
|
||||||
|
ClientWidth = 642
|
||||||
|
Color = clWindow
|
||||||
|
ParentColor = False
|
||||||
|
TabOrder = 0
|
||||||
|
object IconImage: TImage
|
||||||
|
Left = 7
|
||||||
|
Height = 48
|
||||||
|
Top = 8
|
||||||
|
Width = 48
|
||||||
|
end
|
||||||
|
object LblTitle: TLabel
|
||||||
|
Left = 69
|
||||||
|
Height = 29
|
||||||
|
Top = 16
|
||||||
|
Width = 158
|
||||||
|
Caption = 'BIFF Explorer'
|
||||||
|
Font.CharSet = ANSI_CHARSET
|
||||||
|
Font.Color = clNavy
|
||||||
|
Font.Height = -24
|
||||||
|
Font.Name = 'Arial'
|
||||||
|
Font.Pitch = fpVariable
|
||||||
|
Font.Quality = fqDraft
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
object BtnClose: TButton
|
||||||
|
Left = 559
|
||||||
|
Height = 29
|
||||||
|
Top = 16
|
||||||
|
Width = 75
|
||||||
|
Anchors = [akTop, akRight]
|
||||||
|
Cancel = True
|
||||||
|
Caption = 'Close'
|
||||||
|
Default = True
|
||||||
|
ModalResult = 1
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object Bevel1: TBevel
|
||||||
|
Left = 0
|
||||||
|
Height = 6
|
||||||
|
Top = 66
|
||||||
|
Width = 642
|
||||||
|
Align = alTop
|
||||||
|
Shape = bsTopLine
|
||||||
|
end
|
||||||
|
object HTMLViewer: TIpHtmlPanel
|
||||||
|
Left = 0
|
||||||
|
Height = 440
|
||||||
|
Top = 72
|
||||||
|
Width = 642
|
||||||
|
Align = alClient
|
||||||
|
FixedTypeface = 'Courier New'
|
||||||
|
DefaultTypeFace = 'default'
|
||||||
|
DefaultFontSize = 9
|
||||||
|
FlagErrors = False
|
||||||
|
PrintSettings.MarginLeft = 0.5
|
||||||
|
PrintSettings.MarginTop = 0.5
|
||||||
|
PrintSettings.MarginRight = 0.5
|
||||||
|
PrintSettings.MarginBottom = 0.5
|
||||||
|
TabOrder = 1
|
||||||
|
OnHotClick = HTMLViewerHotClick
|
||||||
|
end
|
||||||
|
end
|
141
components/fpspreadsheet/reference/BIFFExplorer/beabout.pas
Normal file
141
components/fpspreadsheet/reference/BIFFExplorer/beabout.pas
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
unit beAbout;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, IpHtml, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
|
||||||
|
ExtCtrls, StdCtrls;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TAboutForm }
|
||||||
|
|
||||||
|
TAboutForm = class(TForm)
|
||||||
|
Bevel1: TBevel;
|
||||||
|
BtnClose: TButton;
|
||||||
|
IconImage: TImage;
|
||||||
|
HTMLViewer: TIpHtmlPanel;
|
||||||
|
LblTitle: TLabel;
|
||||||
|
Panel1: TPanel;
|
||||||
|
procedure FormCreate(Sender: TObject);
|
||||||
|
procedure HTMLViewerHotClick(Sender: TObject);
|
||||||
|
private
|
||||||
|
{ private declarations }
|
||||||
|
function CreateCredits: String;
|
||||||
|
public
|
||||||
|
{ public declarations }
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
AboutForm: TAboutForm;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$R *.lfm}
|
||||||
|
|
||||||
|
uses
|
||||||
|
LCLIntf, types, beHTML;
|
||||||
|
|
||||||
|
{ TAboutForm }
|
||||||
|
|
||||||
|
function TAboutForm.CreateCredits: String;
|
||||||
|
var
|
||||||
|
html: THTMLDocument;
|
||||||
|
clrs: THeaderColors = (clBlack, clBlack, clBlack, clBlack, clBlack);
|
||||||
|
begin
|
||||||
|
html := THTMLDocument.Create;
|
||||||
|
try
|
||||||
|
clrs[h3] := LblTitle.Font.Color;
|
||||||
|
clrs[h4] := LblTitle.Font.Color;
|
||||||
|
with html do begin
|
||||||
|
BeginDocument('Credits', clrs, false);
|
||||||
|
AddHeader(h3, 'Credits');
|
||||||
|
AddHeader(h4, 'Libraries');
|
||||||
|
BeginBulletList;
|
||||||
|
AddListItem(Hyperlink(
|
||||||
|
'Free Pascal',
|
||||||
|
'www.freepascal.org')
|
||||||
|
);
|
||||||
|
AddListItem(Hyperlink(
|
||||||
|
'Lazarus',
|
||||||
|
'www.lazarus.freepascal.org')
|
||||||
|
);
|
||||||
|
AddListItem(HyperLink(
|
||||||
|
'fpspreadsheet',
|
||||||
|
'http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/fpspreadsheet/')
|
||||||
|
);
|
||||||
|
EndBulletList;
|
||||||
|
|
||||||
|
AddEmptyLine;
|
||||||
|
|
||||||
|
AddHeader(h4, 'Icons');
|
||||||
|
BeginBulletList;
|
||||||
|
AddListItem(HyperLink(
|
||||||
|
'Fugue icons',
|
||||||
|
'http://p.yusukekamiyamane.com/')
|
||||||
|
+ ' (for toolbar icons)');
|
||||||
|
AddListItem(HyperLink(
|
||||||
|
'Nuvola icons',
|
||||||
|
'www.icon-king.com/projects/nuvola/') +
|
||||||
|
' (for application icon');
|
||||||
|
EndBulletList;
|
||||||
|
|
||||||
|
AddEmptyLine;
|
||||||
|
|
||||||
|
AddHeader(h4, 'Used documentation');
|
||||||
|
BeginBulletList;
|
||||||
|
AddListItem(Hyperlink(
|
||||||
|
'OpenOffice.org''s Documentation of the Microsoft Excel File Format',
|
||||||
|
'http://www.openoffice.org/sc/excelfileformat.pdf') +
|
||||||
|
' (see folder "fpspreadsheet/reference")'
|
||||||
|
);
|
||||||
|
AddListItem(Hyperlink(
|
||||||
|
'[MS-XLS]: Excel Binary File Format (.xls) Structure',
|
||||||
|
'http://msdn.microsoft.com/en-us/library/cc313154%28v=office.12%29.aspx'
|
||||||
|
));
|
||||||
|
AddListItem(HyperLink(
|
||||||
|
'Excel97-2007BinaryFileFormat(xls)Specification',
|
||||||
|
'http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/Excel97-2007BinaryFileFormat(xls)Specification.pdf'
|
||||||
|
));
|
||||||
|
EndBulletList;
|
||||||
|
|
||||||
|
EndDocument;
|
||||||
|
|
||||||
|
Result := Lines.Text;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
html.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TAboutForm.FormCreate(Sender: TObject);
|
||||||
|
var
|
||||||
|
ico: TIcon;
|
||||||
|
sz: TSize;
|
||||||
|
begin
|
||||||
|
ico := TIcon.Create;
|
||||||
|
try
|
||||||
|
ico.Assign(Application.Icon);
|
||||||
|
sz.cx := 48;
|
||||||
|
sz.cy := 48;
|
||||||
|
ico.Current := ico.GetBestIndexForSize(sz);
|
||||||
|
IconImage.Picture.Assign(ico);
|
||||||
|
finally
|
||||||
|
ico.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
HTMLViewer.SetHTMLFromStr(CreateCredits);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TAboutForm.HTMLViewerHotClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
OpenURL(HTMLViewer.HotURL);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
3469
components/fpspreadsheet/reference/BIFFExplorer/bebiffgrid.pas
Normal file
3469
components/fpspreadsheet/reference/BIFFExplorer/bebiffgrid.pas
Normal file
File diff suppressed because it is too large
Load Diff
708
components/fpspreadsheet/reference/BIFFExplorer/bebiffutils.pas
Normal file
708
components/fpspreadsheet/reference/BIFFExplorer/bebiffutils.pas
Normal file
@ -0,0 +1,708 @@
|
|||||||
|
unit beBIFFUtils;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils;
|
||||||
|
|
||||||
|
function BOFName(ACode: Word): String;
|
||||||
|
function CodePageName(AID: Word): String;
|
||||||
|
function RecTypeName(ARecType: Word): String;
|
||||||
|
function SheetFuncName(AIndex: Word): String;
|
||||||
|
function ErrorCodeName(ACode: Byte): String;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
function BOFName(ACode: Word): String;
|
||||||
|
begin
|
||||||
|
case ACode of
|
||||||
|
$0005: Result := 'Workbook globals';
|
||||||
|
$0006: Result := 'Visual Basic module';
|
||||||
|
$0010: Result := 'Sheet or dialog';
|
||||||
|
$0020: Result := 'Chart';
|
||||||
|
$0040: Result := 'Macro sheet';
|
||||||
|
$0100: Result := 'Workspace';
|
||||||
|
else Result := '';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CodePageName(AID: Word): String;
|
||||||
|
begin
|
||||||
|
case AID of
|
||||||
|
$0016: Result := 'ASCII';
|
||||||
|
$01B5: Result := 'IBM PC CP-437 (US)';
|
||||||
|
$02D0: Result := 'IBM PC CP-720 (OEM Arabic)';
|
||||||
|
$02E1: Result := 'IBM PC CP-737 (Greek)';
|
||||||
|
$0307: Result := 'IBM PC CP-775 (Baltic)';
|
||||||
|
$0352: Result := 'IBM PC CP-850 (Latin I)';
|
||||||
|
$0354: Result := 'IBM PC CP-852 (Latin II (Central European))';
|
||||||
|
$0357: Result := 'IBM PC CP-855 (Cyrillic)';
|
||||||
|
$0359: Result := 'IBM PC CP-857 (Turkish)';
|
||||||
|
$035A: Result := 'IBM PC CP-858 (Multilingual Latin I with Euro)';
|
||||||
|
$035C: Result := 'IBM PC CP-860 (Portuguese)';
|
||||||
|
$035D: Result := 'IBM PC CP-861 (Icelandic)';
|
||||||
|
$035E: Result := 'IBM PC CP-862 (Hebrew)';
|
||||||
|
$035F: Result := 'IBM PC CP-863 (Canadian (French))';
|
||||||
|
$0360: Result := 'IBM PC CP-864 (Arabic)';
|
||||||
|
$0361: Result := 'IBM PC CP-865 (Nordic)';
|
||||||
|
$0362: Result := 'IBM PC CP-866 (Cyrillic (Russian))';
|
||||||
|
$0365: Result := 'IBM PC CP-869 (Greek (Modern))';
|
||||||
|
$036A: Result := 'Windows CP-874 (Thai)';
|
||||||
|
$03A4: Result := 'Windows CP-932 (Japanese Shift-JIS)';
|
||||||
|
$03A8: Result := 'Windows CP-936 (Chinese Simplified GBK)';
|
||||||
|
$03B5: Result := 'Windows CP-949 (Korean (Wansung))';
|
||||||
|
$03B6: Result := 'Windows CP-950 (Chinese Traditional BIG5)';
|
||||||
|
$04B0: Result := 'UTF-16 (BIFF8)';
|
||||||
|
$04E2: Result := 'Windows CP-1250 (Latin II) (Central European)';
|
||||||
|
$04E3: Result := 'Windows CP-1251 (Cyrillic)';
|
||||||
|
$04E4: Result := 'Windows CP-1252 (Latin I) (BIFF4-BIFF5)';
|
||||||
|
$04E5: Result := 'Windows CP-1253 (Greek)';
|
||||||
|
$04E6: Result := 'Windows CP-1254 (Turkish)';
|
||||||
|
$04E7: Result := 'Windows CP-1255 (Hebrew)';
|
||||||
|
$04E8: Result := 'Windows CP-1256 (Arabic)';
|
||||||
|
$04E9: Result := 'Windows CP-1257 (Baltic)';
|
||||||
|
$04EA: Result := 'Windows CP-1258 (Vietnamese)';
|
||||||
|
$0551: Result := 'Windows CP-1361 (Korean (Johab))';
|
||||||
|
$2710: Result := 'Apple Roman';
|
||||||
|
$8000: Result := 'Apple Roman';
|
||||||
|
$8001: Result := 'Windows CP-1252 (Latin I) (BIFF2-BIFF3)';
|
||||||
|
else Result := '';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ErrorCodeName(ACode: Byte): String;
|
||||||
|
begin
|
||||||
|
case ACode of
|
||||||
|
$00: Result := '#NULL! - Intersection of two cell ranges is empty';
|
||||||
|
$07: Result := '#DIV/0! - Division by zero';
|
||||||
|
$0F: Result := '#VALUE! - Wrong type of operand';
|
||||||
|
$17: Result := '#REF! - Illegal or deleted cell reference';
|
||||||
|
$1D: Result := '#NAME? - Wrong function or range name';
|
||||||
|
$24: Result := '#NUM! - Value range overflow';
|
||||||
|
$2A: Result := '#N/A - Argument or function not available';
|
||||||
|
else Result := '(unknown)';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function RecTypeName(ARecType: Word): String;
|
||||||
|
begin
|
||||||
|
case ARecType of
|
||||||
|
$0000: Result := 'Dimension';
|
||||||
|
$0001: Result := 'Blank';
|
||||||
|
$0002: Result := 'Integer';
|
||||||
|
$0003: Result := 'Number';
|
||||||
|
$0004: Result := 'Label';
|
||||||
|
$0005: Result := 'BoolErr';
|
||||||
|
$0006: Result := 'Formula';
|
||||||
|
$0007: Result := 'String';
|
||||||
|
$0008: Result := 'Row';
|
||||||
|
$0009: Result := 'BOF';
|
||||||
|
$000A: Result := 'EOF: End of file';
|
||||||
|
$000B: Result := 'Index';
|
||||||
|
$000C: Result := 'CALCCOUNT: Iteration count';
|
||||||
|
$000D: Result := 'CALCMODE: Calculation mode';
|
||||||
|
$000E: Result := 'PRECISION: Precision';
|
||||||
|
$000F: Result := 'REFMODE: Reference mode';
|
||||||
|
$0010: Result := 'DELTA: Iteration increment';
|
||||||
|
$0011: Result := 'ITERATION: Iteration mode';
|
||||||
|
$0012: Result := 'PROTECT: Protection flag';
|
||||||
|
$0013: Result := 'PASSWORD: Protection password';
|
||||||
|
$0014: Result := 'HEADER: Print header on each page';
|
||||||
|
$0015: Result := 'FOOTER: Print footer on each page';
|
||||||
|
$0016: Result := 'EXTERNCOUNT: Number of external references';
|
||||||
|
$0017: Result := 'EXTERNSHEET: External reference';
|
||||||
|
$0018: Result := 'DefinedName';
|
||||||
|
$0019: Result := 'WINDOWPROTECT: Windows are protected';
|
||||||
|
$001A: Result := 'VERTICALPAGEBREAKS: Explicit column page breaks';
|
||||||
|
$001B: Result := 'HORIZONALPAGEBREAKS: Explicit row page breaks';
|
||||||
|
$001C: Result := 'NOTE: Comment associated with a cell';
|
||||||
|
$001D: Result := 'SELECTION: current selection';
|
||||||
|
$001E: Result := 'Format';
|
||||||
|
$001F: Result := 'BuiltInFmtCount';
|
||||||
|
$0020: Result := 'ColumnDefault';
|
||||||
|
$0021: Result := 'Array';
|
||||||
|
$0022: Result := '1904: 1904 date system';
|
||||||
|
$0023: Result := 'ExternalName';
|
||||||
|
$0024: Result := 'ColWidth';
|
||||||
|
$0025: Result := 'DefaultRowHeight';
|
||||||
|
$0026: Result := 'LEFTMARGIN: Left margin measurement';
|
||||||
|
$0027: Result := 'RIGHTMARGIN: Right margin measurement';
|
||||||
|
$0028: Result := 'TOPMARGIN: Top margin measurement';
|
||||||
|
$0029: Result := 'BOTTOMMARGIN: Bottom margin measurement';
|
||||||
|
$002A: Result := 'PRINTHEADERS: Print row/column labels';
|
||||||
|
$002B: Result := 'PRINTGRIDLINES: Print gridlines flag';
|
||||||
|
$002F: Result := 'FILEPASS: File is password-protected';
|
||||||
|
$0031: Result := 'FONT: Font and font formatting information';
|
||||||
|
$0032: Result := 'Font2';
|
||||||
|
$0033: Result := 'PRINTSIZE: Printed size of chart';
|
||||||
|
$0036: Result := 'DataTable';
|
||||||
|
$0037: Result := 'DateTable2';
|
||||||
|
$003C: Result := 'CONTINUE: Continues long records';
|
||||||
|
$003D: Result := 'WINDOW1: Window information';
|
||||||
|
$003E: Result := 'Window2';
|
||||||
|
$0040: Result := 'BACKUP: Save backup version of the file';
|
||||||
|
$0041: Result := 'PANE: Number of panes and their position';
|
||||||
|
$0042: Result := 'CODEPAGE: Default code page'; // also: CODENAME: VBE object name ???
|
||||||
|
$0043: Result := 'XF: Extended f';
|
||||||
|
$0044: Result := 'IXFE';
|
||||||
|
$0045: Result := 'FontColor';
|
||||||
|
$004D: Result := 'PLS: Environment-specific print record';
|
||||||
|
$0050: Result := 'DCON: Data consolidation information';
|
||||||
|
$0051: Result := 'DCONREF: Data consolidation references';
|
||||||
|
$0055: Result := 'DEFCOLWIDTH: Default width for columns';
|
||||||
|
$0056: Result := 'BuiltInFmtCount';
|
||||||
|
$0059: Result := 'XCT: CRN record count';
|
||||||
|
$005A: Result := 'CRN: Non-resident operands';
|
||||||
|
$005B: Result := 'FILESHARING: File-sharing information';
|
||||||
|
$005C: Result := 'WRITEACCESS: Write access user name';
|
||||||
|
$005E: Result := 'UNCALCED: Recalculation status';
|
||||||
|
$005F: Result := 'SAVERECALC: Recalculate before saving';
|
||||||
|
$0060: Result := 'TEMPLATE: Workbook is a template';
|
||||||
|
$0063: Result := 'OBJPROTECT: Objects are protected';
|
||||||
|
$007D: Result := 'COLINFO: Column formatting information';
|
||||||
|
$007E: Result := 'RK: Cell value, RK number';
|
||||||
|
$007F: Result := 'IMDATA: Image data';
|
||||||
|
$0080: Result := 'GUTS: Size of row and column gutters';
|
||||||
|
$0081: Result := 'SHEETPR: Additional workspace information';
|
||||||
|
$0082: Result := 'GRIDSET: State change of Gridlines option';
|
||||||
|
$0083: Result := 'HCENTER: Center between horizontal margins';
|
||||||
|
$0084: Result := 'VCENTER: Center between vertical margins';
|
||||||
|
$0085: Result := 'BOUNDSSHEET: Sheet information';
|
||||||
|
$0086: Result := 'WRITEPROT: Workbook is write-protected';
|
||||||
|
$0087: Result := 'ADDIN: Workbook is an add-in macro';
|
||||||
|
$0088: Result := 'EDG: Edition globals';
|
||||||
|
$0089: Result := 'PUB: Publisher';
|
||||||
|
$008C: Result := 'COUNTRY: Default country and WIN.INI country';
|
||||||
|
$008D: Result := 'HIDEOBJ: Object display options';
|
||||||
|
$0090: Result := 'SORT: Sorting options';
|
||||||
|
$0091: Result := 'SUB: Subscriber';
|
||||||
|
$0092: Result := 'PALETTE: Color palette definition';
|
||||||
|
$0094: Result := 'LHRECORD: .WK? file conversion information';
|
||||||
|
$0095: Result := 'LHNGRAPH: Named graph information';
|
||||||
|
$0096: Result := 'SOUND: Sound note';
|
||||||
|
$0098: Result := 'LPR: Sheet was printed using LINE.PRINT()';
|
||||||
|
$0099: Result := 'STANDARDWIDTH: Standard column width';
|
||||||
|
$009A: Result := 'FNGROUPNAME: Function group name';
|
||||||
|
$009B: Result := 'FILTERMODE: Sheet contains filtered list';
|
||||||
|
$009C: Result := 'FNGROUPCOUNT: Built-in function group count';
|
||||||
|
$009D: Result := 'AUTOFILTERINFO: Drop-down arrow count';
|
||||||
|
$009E: Result := 'AUTOFILTER: AutoFilter data';
|
||||||
|
$00A0: Result := 'SCL: Window zoom magnification';
|
||||||
|
$00A1: Result := 'SETUP: PageSetup';
|
||||||
|
$00A9: Result := 'COORDLIST: Polygon object vertex coordinates';
|
||||||
|
$00AB: Result := 'GCW: Global column width flags';
|
||||||
|
$00AE: Result := 'SCENMAN: Scenario output data';
|
||||||
|
$00AF: Result := 'SCENARIO: Scenario data';
|
||||||
|
$00B0: Result := 'SXVIEW: View definition';
|
||||||
|
$00B1: Result := 'SXVD: View fields';
|
||||||
|
$00B2: Result := 'SXVI: View item';
|
||||||
|
$00B4: Result := 'SXIVD: Row/column field IDs';
|
||||||
|
$00B5: Result := 'SXLI: Line item array';
|
||||||
|
$00B6: Result := 'SXPI: Page item';
|
||||||
|
$00B8: Result := 'DOCROUTE: Routing slip information';
|
||||||
|
$00B9: Result := 'RECIPNAME: Recipient name';
|
||||||
|
$00BC: Result := 'SHRFMLA: Shared formula';
|
||||||
|
$00BD: Result := 'MULRK: Multiple RK cells';
|
||||||
|
$00BE: Result := 'MULBLANK: Multiple blank cells';
|
||||||
|
$00C1: Result := 'MMS: ADDMENU/DELMENU record group count';
|
||||||
|
$00C2: Result := 'ADDMENU: Menu addition';
|
||||||
|
$00C3: Result := 'DELMENU: Menu deletion';
|
||||||
|
$00C5: Result := 'SXDI: Data item';
|
||||||
|
$00C6: Result := 'SXDB: Pivot table cache data';
|
||||||
|
$00CD: Result := 'SXSTRING: String';
|
||||||
|
$00D0: Result := 'SXTBL: Multiple consolidation source info';
|
||||||
|
$00D1: Result := 'SXBRGIITM: Page item name count';
|
||||||
|
$00D2: Result := 'SXTBPG: Page item indexex';
|
||||||
|
$00D3: Result := 'OBPROJ: Visual Basic project';
|
||||||
|
$00D5: Result := 'SXIDSTM: Stream ID';
|
||||||
|
$00D6: Result := 'RSTRING: Cell with character formatting';
|
||||||
|
$00D7: Result := 'DBCELL: Stream offsets';
|
||||||
|
$00DA: Result := 'BOOKBOOL: Workbook option flag';
|
||||||
|
$00DC: Result := 'PARAMQRY: Query parameters'; // also: SXEXT: External source information
|
||||||
|
$00DD: Result := 'SCENPROTECT: Scenario Protection';
|
||||||
|
$00DE: Result := 'OLESIZE: Size of OLE object';
|
||||||
|
$00DF: Result := 'UDDESC: Description format for chart autoformat';
|
||||||
|
$00E0: Result := 'XF: Extended format';
|
||||||
|
$00E1: Result := 'INTERFACEHDR: Beginning of user interface records';
|
||||||
|
$00E2: Result := 'INTERFACEEND: End of user interface records';
|
||||||
|
$00E3: Result := 'SXVS: View source';
|
||||||
|
$00E5: Result := 'MEGECELLS: Merged cells';
|
||||||
|
$00E9: Result := 'Bitmap';
|
||||||
|
$00EA: Result := 'TABIDCONF: Sheet Tab ID of conflict history';
|
||||||
|
$00EB: Result := 'MSODRAWINGGROUP: Microsoft Office drawing group';
|
||||||
|
$00EC: Result := 'MSODRAWING: Microsoft Office drawing';
|
||||||
|
$00ED: Result := 'MSODRAWINGSELECTION: Microsoft Office drawing selection';
|
||||||
|
$00EF: Result := 'PhoneticPR';
|
||||||
|
$00F0: Result := 'SXRULE: PivotTable rule data';
|
||||||
|
$00F1: Result := 'SXEX: PivotTable view extended information';
|
||||||
|
$00F2: Result := 'SXFILT: PivotTable rule filter';
|
||||||
|
$00F4: Result := 'SXDXF: PivotTable formatting';
|
||||||
|
$00F5: Result := 'SXITM: PivotTable item indexes';
|
||||||
|
$00F6: Result := 'SXNAME: PivotTable name';
|
||||||
|
$00F7: Result := 'SXSELECT: PivotTable selection information';
|
||||||
|
$00F8: Result := 'SXPAIR: PivotTable name pair';
|
||||||
|
$00F9: Result := 'SXFMLA: PivotTable parsed expression';
|
||||||
|
$00FB: Result := 'SXFORMAT: PivotTable format record';
|
||||||
|
$00FC: Result := 'SST: Shared string table';
|
||||||
|
$00FD: Result := 'LABELSST: Cell value, string constant/SST';
|
||||||
|
$00FF: Result := 'EXTSST: extended shared string table';
|
||||||
|
$013D: Result := 'TABID: Sheet tab index array';
|
||||||
|
$015F: Result := 'LabelRanges';
|
||||||
|
$0160: Result := 'USESELFS: Natural language formulas flag';
|
||||||
|
$0161: Result := 'DSF: Double stream file';
|
||||||
|
$0162: Result := 'XL5MODIFY: Flag for DSF';
|
||||||
|
$01AE: Result := 'SUPBOOK: Supporting workbook';
|
||||||
|
$01AF: Result := 'PROT4REV: Shared workbook protection flag';
|
||||||
|
$01B0: Result := 'CONDFMT: Conditional formatting range information';
|
||||||
|
$01B1: Result := 'CF: Conditional formatting conditions';
|
||||||
|
$01B2: Result := 'DVAL: Data validation information';
|
||||||
|
$01B5: Result := 'DCONBIN: Data consolidation information';
|
||||||
|
$01B6: Result := 'TXO: Text object';
|
||||||
|
$01B7: Result := 'REFRESHALL: Refresh flag';
|
||||||
|
$01B8: Result := 'HLINK: Hyperlink';
|
||||||
|
$01BA: Result := 'CODENAME: Name of the workbook object';
|
||||||
|
$01BB: Result := 'SXFDBTYPE: SQL datatype identifier';
|
||||||
|
$01BC: Result := 'PROT4REVPASS: Shared workbook protection password';
|
||||||
|
$01BE: Result := 'DV: Data validation criteria';
|
||||||
|
$01C0: Result := 'EXCEL9FILE: Excel 9 file';
|
||||||
|
$01C1: Result := 'RECALCID: Recalc information';
|
||||||
|
$0200: Result := 'DIMENSIONS: Cell table size';
|
||||||
|
$0201: Result := 'BLANK: Cell Value, blank cell';
|
||||||
|
$0203: Result := 'NUMBER: Cell value, floating-point cell';
|
||||||
|
$0204: Result := 'LABEL: Cell value, string constant';
|
||||||
|
$0205: Result := 'BOOLERR: Cell Value, boolean or error';
|
||||||
|
$0206: Result := 'Formula';
|
||||||
|
$0207: Result := 'STRING: String value of a formula';
|
||||||
|
$0208: Result := 'ROW: Describes a row';
|
||||||
|
$0209: Result := 'BOF';
|
||||||
|
$020B: Result := 'INDEX: Index record';
|
||||||
|
$0218: Result := 'NAME: Defined name';
|
||||||
|
$0221: Result := 'ARRAY: Array-entered formula';
|
||||||
|
$0223: Result := 'EXTERNNAME: Externally referenced name';
|
||||||
|
$0225: Result := 'DEFAULTROWHEIGHT: Default row height';
|
||||||
|
$0231: Result := 'FONT: Font description';
|
||||||
|
$0236: Result := 'TABLE: Data table';
|
||||||
|
$023E: Result := 'WINDOW2: Sheet window information';
|
||||||
|
$0243: Result := 'XF';
|
||||||
|
$027E: Result := 'RK';
|
||||||
|
$0293: Result := 'STYLE: Style information';
|
||||||
|
$0406: Result := 'FORMULA: Cell formula';
|
||||||
|
$0409: Result := 'BOF';
|
||||||
|
$041E: Result := 'FORMAT: Number format';
|
||||||
|
$0443: Result := 'XF';
|
||||||
|
$04BC: Result := 'SharedFormula';
|
||||||
|
$0800: Result := 'HLINKTOOLTOP: Hyperlink tooltip';
|
||||||
|
$0801: Result := 'WEBPUB: Web publish item';
|
||||||
|
$0802: Result := 'QSISXTAG: PivotTable and query table extensions';
|
||||||
|
$0803: Result := 'DBQUERYEXT: Database query extensions';
|
||||||
|
$0804: Result := 'EXTSTRING: FRT string';
|
||||||
|
$0805: Result := 'TXTQUERY: Text query information';
|
||||||
|
$0806: Result := 'QSIR: Query table formatting';
|
||||||
|
$0807: Result := 'QSIF: Query table field formatting';
|
||||||
|
$0809: Result := 'BOF: Beginning of file';
|
||||||
|
$080A: Result := 'OLEDBCONN: OLE database connection';
|
||||||
|
$080B: Result := 'WOPT: Web options';
|
||||||
|
$080C: Result := 'SXVIEWEX: Pivot table OLAP extensions';
|
||||||
|
$080D: Result := 'SXTH: Pivot table OLAP hierarchy';
|
||||||
|
$080E: Result := 'SXPIEX: OLAP page item extensions';
|
||||||
|
$080F: Result := 'SXVDTEX: View dimension OLAP extensions';
|
||||||
|
$0810: Result := 'SXVIEWX9: Pivot table extensions';
|
||||||
|
$0812: Result := 'CONTINUEFRT: Continued FRT';
|
||||||
|
$0813: Result := 'REALTIMEDATA: Real-time data (RTD)';
|
||||||
|
$0850: Result := 'CHARTFRTINFO: Future record identifiers';
|
||||||
|
$0852: Result := 'STARTBLOCK: Beginning of a collection of records';
|
||||||
|
$0853: Result := 'ENDBLOCK: End of a collection of records';
|
||||||
|
$0862: Result := 'SHEETEXT: Extra sheet info';
|
||||||
|
$0863: Result := 'BOOKEXT: Extra book info';
|
||||||
|
$0864: Result := 'SXADDL: Pivot table additional info';
|
||||||
|
$0865: Result := 'CRASHRECERR: Crash recovery error';
|
||||||
|
$0866: Result := 'HFPICTURE: Header/footer picture';
|
||||||
|
$0867: Result := 'FEATHEADR: Shared feature header';
|
||||||
|
$0868: Result := 'FEAT: Shared feature record';
|
||||||
|
$086A: Result := 'DATALABEXT: Chart data label extension';
|
||||||
|
$086B: Result := 'DATALABEXTCONTENTS: Chart data label extension contents';
|
||||||
|
$086C: Result := 'CELLWATCH: Cell watch';
|
||||||
|
$086D: Result := 'FEATINFO: Shared feature info record';
|
||||||
|
$0871: Result := 'FEATHEADR11: Shared feature header 11';
|
||||||
|
$0872: Result := 'FEAT11: Shared feature 11 record';
|
||||||
|
$0873: Result := 'FEATINFO11: Shared feature info 11 record';
|
||||||
|
$0874: Result := 'DROPDOWNOBJIDS: Drop down opbject';
|
||||||
|
$0875: Result := 'CONTINUEFRT11: Continue FRT 11';
|
||||||
|
$0876: Result := 'DCONN: Data connection';
|
||||||
|
$0877: Result := 'LIST12: Extra table data introduced in Excel 2007';
|
||||||
|
$0878: Result := 'FEAT12: Shared feature 12 record';
|
||||||
|
$0879: Result := 'CONDFMT12: Conditional formatting range information 12';
|
||||||
|
$087A: Result := 'CF12: Conditional formatting condition 12';
|
||||||
|
$087B: Result := 'CFEX: Conditional formatting extension';
|
||||||
|
$087C: Result := 'XFCRC: XF extension checksum';
|
||||||
|
$087D: Result := 'XFEXT: XF extension';
|
||||||
|
$087E: Result := 'EZFILTER12: Autofilter data introduced in Excel 2007';
|
||||||
|
$087F: Result := 'CONTINUEFRT12: Continue FRT 12';
|
||||||
|
$0881: Result := 'SXADDL12: Additional workbook connections information';
|
||||||
|
$0884: Result := 'MDTINFO: Information about a metadata type';
|
||||||
|
$0885: Result := 'MDXSTR: MDX metadata string';
|
||||||
|
$0886: Result := 'MDXTUPLE: Tuple MDX metadata';
|
||||||
|
$0887: Result := 'MDXSET: Set MDX metadata';
|
||||||
|
$0888: Result := 'MDXPROP: Member property MDX metadata';
|
||||||
|
$0889: Result := 'MDXKPI: Key performance indicator MDX metadata';
|
||||||
|
$088A: Result := 'MDTB: Block of metadata records';
|
||||||
|
$088B: Result := 'PLV: Page layout view settings in Excel 2007';
|
||||||
|
$088C: Result := 'COMPAR12: Compatibility checker 12';
|
||||||
|
$088D: Result := 'DXF: Differential XF';
|
||||||
|
$088E: Result := 'TABLESTYLES: Table styles';
|
||||||
|
$088F: Result := 'TABLESTYLE: Table style';
|
||||||
|
$0890: Result := 'TABLESTYLEELEMENT: Table style element';
|
||||||
|
$0892: Result := 'STYLEEXT: Named cell style extension';
|
||||||
|
$0893: Result := 'NAMEPUBLISH: Publish to Excel server data for name';
|
||||||
|
$0894: Result := 'NAMECMT: Name comment';
|
||||||
|
$0895: Result := 'SORTDATA12: Sort data 12';
|
||||||
|
$0896: Result := 'THEME: Theme';
|
||||||
|
$0897: Result := 'GUIDTYPELIB: VB project typelib GUID';
|
||||||
|
$0898: Result := 'FNGRP12: Function group';
|
||||||
|
$0899: Result := 'NAMEFNGRP12: Extra function group';
|
||||||
|
$089A: Result := 'MTRSETTINGS: Multi-threaded calculation settings';
|
||||||
|
$089B: Result := 'COMPRESSPICTURES: Automatic picture compression mode';
|
||||||
|
$089C: Result := 'HEADERFOOTER: Header footer';
|
||||||
|
$089E: Result := 'CRTMLFRT: Additional properties for chart elements';
|
||||||
|
$08A3: Result := 'FORCEFULLCALCULATION: Force full calculation settings';
|
||||||
|
$08A4: Result := 'SHAPEPROPSSTREAM: Shape formatting properties for chart elements';
|
||||||
|
$08A5: Result := 'TEXTPROPSSTREAM: Additional text properties for text in entire chart';
|
||||||
|
$08A7: Result := 'CRTLAYOUT12A: Layout information for a plot area';
|
||||||
|
$08C1: Result := 'LISTOBJ: List object';
|
||||||
|
$08C2: Result := 'LISTFIELD: List field';
|
||||||
|
$08C3: Result := 'LISTDV: List data validation';
|
||||||
|
$08C4: Result := 'LISTCONDFMT: List conditional formatting';
|
||||||
|
$08C5: Result := 'LIST CF: List cell formatting';
|
||||||
|
$08C6: Result := 'FMQRY: Filemaker queries';
|
||||||
|
$08C7: Result := 'FMSQRY: Filemaker queries';
|
||||||
|
$08C8: Result := 'PLV: Page layout view in Mac Excel 11';
|
||||||
|
$08C9: Result := 'LNEXT: Extenstion information for borders in Mac Office 11';
|
||||||
|
$08CA: Result := 'MKREXT: Extension information for markers in Mac Office 11';
|
||||||
|
$08CB: Result := 'CRTCOOPT: Color options for chart series in Mac Office 11';
|
||||||
|
$1001: Result := 'UNITS: ignored';
|
||||||
|
$1002: Result := 'CHART: Position and size of chart area';
|
||||||
|
$1003: Result := 'SERIES: Properties of the data for a series, a trendline, or error bars';
|
||||||
|
$1004: Result := 'CHSOURCELINK: Source of data series';
|
||||||
|
$1006: Result := 'DATAFORMAT: Formatting properties for data point or series';
|
||||||
|
$1007: Result := 'CHLINEFORMAT: Formatting attributes of line or border';
|
||||||
|
$1009: Result := 'MARKERFORMAT: Color, size, and shape of data markers';
|
||||||
|
$100A: Result := 'AREAFORMAT: Patterns and colors in filled chart region';
|
||||||
|
$100B: Result := 'PIEFORMAT: Distance of a data point(s) from pie';
|
||||||
|
$100C: Result := 'ATTACHEDLABEL: Properties of series data label';
|
||||||
|
$100D: Result := 'CHSTRING: Category name of series, or text for text box in chart';
|
||||||
|
$1014: Result := 'CHARTFORMAT: Properties of a chart group';
|
||||||
|
$1015: Result := 'LEGEND: Properties of a legend';
|
||||||
|
$1016: Result := 'SERIESLIST: Specifies the series for the chart';
|
||||||
|
$1017: Result := 'BAR: identifies a bar/column chart group';
|
||||||
|
$1018: Result := 'LINE: identifies a line chart group';
|
||||||
|
$1019: Result := 'PIE: identifies a pie/doughnut chart group';
|
||||||
|
$101A: Result := 'AREA: identifies an area chart group';
|
||||||
|
$101B: Result := 'SCATTER: identifies scatter or bubble chart group';
|
||||||
|
$101D: Result := 'AXIS: Properties of an axis';
|
||||||
|
$101E: Result := 'TICK: Attributes of axis labels and ticks';
|
||||||
|
$101F: Result := 'VALUERANGE: Properties of value axis';
|
||||||
|
$1021: Result := 'CHAXISLINE: Part of the axis specified by the LINEFORMAT record';
|
||||||
|
$1022: Result := 'CRTLINK: not used';
|
||||||
|
$1024: Result := 'DEFAULTTEXT: Text elements formatted by TEXT record';
|
||||||
|
$1025: Result := 'TEXT: Properties of an attached label';
|
||||||
|
$1026: Result := 'FONTX: Font for a given text element';
|
||||||
|
$1027: Result := 'OBJECTLINK: specifies object on chart, or entire chart, to which TEXT record is linked.';
|
||||||
|
$1032: Result := 'CHFRAME: Border and area formatting of chart';
|
||||||
|
$1033: Result := 'CHBEGIN: Indicates begin of a chart record block';
|
||||||
|
$1034: Result := 'CHEND: Indicates end of a chart record block';
|
||||||
|
$1035: Result := 'PLOTAREA: empty --> see FRAME record specifying plot area properties';
|
||||||
|
$103A: Result := 'CHART3D: plot area of the chart group is rendered in a 3-D';
|
||||||
|
$103C: Result := 'PICF: Layout of a picture attached to a picture-filled chart elemen';
|
||||||
|
$103D: Result := 'DROPBAR: attributes of the up/down bars between multiple series of line chart group';
|
||||||
|
$103E: Result := 'RADAR: identifies a radar chart group';
|
||||||
|
$103F: Result := 'SURF: identifies a surface chart group';
|
||||||
|
$1040: Result := 'RADARAREA: identifies a filled radar chart group';
|
||||||
|
$1041: Result := 'AXISPARENT: Properties of an axis group';
|
||||||
|
$1043: Result := 'LEGENDEXCEPTION: Information on legend item changed from default';
|
||||||
|
$1044: Result := 'SHTPROPS: Chart properties defined by the Chart Sheet Substream ABNF';
|
||||||
|
$1045: Result := 'SERTOCRT: Specifies chart group for the current series';
|
||||||
|
$1046: Result := 'AXESUSED: Number of axis groups on the chart';
|
||||||
|
$1048: Result := 'SBASEREF: Location of a PivotTable view referenced by a chart';
|
||||||
|
$104A: Result := 'SERPARENT: Series to which the current trendline or error bar corresponds';
|
||||||
|
$104B: Result := 'SERAUXTREND: Specifies a trendline';
|
||||||
|
$104E: Result := 'IFMTRECORD: Number format to use for the text on an axis';
|
||||||
|
$104F: Result := 'POS: Size/position for legend, attached label, or plot area';
|
||||||
|
$1050: Result := 'ALRUNS: Rich Text Formatting within chart titles, trendline, and data labels';
|
||||||
|
$1051: Result := 'BRAI: Reference to data used in chart';
|
||||||
|
$105B: Result := 'SERAUXERRBAR: Error bar properties';
|
||||||
|
$105C: Result := 'CLRTCLIENT: Custom color palette for chart';
|
||||||
|
$105D: Result := 'SERFMT: Properties of series data points, markers, or lines';
|
||||||
|
$105F: Result := 'CHART3DBARSHAPE: Shape of the data points in bar or column chart group';
|
||||||
|
$1060: Result := 'FBI: Scalable font information (chart)';
|
||||||
|
$1061: Result := 'BOPPOP: Chart group is a bar or a pie of pie chart';
|
||||||
|
$1062: Result := 'AXCEXT: Additional extension properties of a date axis';
|
||||||
|
$1063: Result := 'DAT: Chart Sheet Substream ABNF for data table within chart area';
|
||||||
|
$1064: Result := 'PLOTGROWTH: Scale factors for font scaling';
|
||||||
|
$1065: Result := 'SIINDEX: Specifies data of a chart';
|
||||||
|
$1066: Result := 'GELFRAME: Properties of a fill pattern for parts of a chart';
|
||||||
|
$1067: Result := 'BOPPOPCUSTOM: Series data points contained in the secondary bar/pie';
|
||||||
|
$1068: Result := 'FBI2: Scalable font information (chart)';
|
||||||
|
else
|
||||||
|
Result := '<unknown>';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SheetFuncName(AIndex: Word): String;
|
||||||
|
begin
|
||||||
|
case AIndex of
|
||||||
|
0 : result := 'COUNT';
|
||||||
|
1 : Result := 'IF';
|
||||||
|
2 : Result := 'ISNA';
|
||||||
|
3 : Result := 'ISERROR';
|
||||||
|
4 : Result := 'SUM';
|
||||||
|
5 : Result := 'AVERAGE';
|
||||||
|
6 : Result := 'MIN';
|
||||||
|
7 : Result := 'MAX';
|
||||||
|
8 : Result := 'ROW';
|
||||||
|
9 : Result := 'COLUMN';
|
||||||
|
10 : Result := 'NA';
|
||||||
|
11 : Result := 'NPV';
|
||||||
|
12 : Result := 'STDEV';
|
||||||
|
13 : Result := 'DOLLAR';
|
||||||
|
14 : Result := 'FIXED';
|
||||||
|
15 : Result := 'SIN';
|
||||||
|
16 : Result := 'COS';
|
||||||
|
17 : Result := 'TAN';
|
||||||
|
18 : Result := 'ATAN';
|
||||||
|
19 : Result := 'PI';
|
||||||
|
20 : Result := 'SQRT';
|
||||||
|
21 : Result := 'EXP';
|
||||||
|
22 : Result := 'LN';
|
||||||
|
23 : Result := 'LOG10';
|
||||||
|
24 : Result := 'ABS';
|
||||||
|
25 : Result := 'INT';
|
||||||
|
26 : Result := 'SIGN';
|
||||||
|
27 : Result := 'ROUND';
|
||||||
|
28 : Result := 'LOOKUP';
|
||||||
|
29 : Result := 'INDEX';
|
||||||
|
30 : Result := 'REPT';
|
||||||
|
31 : Result := 'MID';
|
||||||
|
32 : Result := 'LEN';
|
||||||
|
33 : Result := 'VALUE';
|
||||||
|
34 : Result := 'TRUE';
|
||||||
|
35 : Result := 'FALSE';
|
||||||
|
36 : Result := 'AND';
|
||||||
|
37 : Result := 'OR';
|
||||||
|
38 : Result := 'NOT';
|
||||||
|
39 : Result := 'MOD';
|
||||||
|
40 : Result := 'DCOUNT';
|
||||||
|
41 : Result := 'DSUM';
|
||||||
|
42 : Result := 'DAVERAGE';
|
||||||
|
43 : Result := 'DMIN';
|
||||||
|
44 : Result := 'DMAX';
|
||||||
|
45 : Result := 'DSTDEV';
|
||||||
|
46 : Result := 'VAR';
|
||||||
|
47 : Result := 'DVAR';
|
||||||
|
48 : Result := 'TEXT';
|
||||||
|
49 : Result := 'LINEST';
|
||||||
|
50 : Result := 'TREND';
|
||||||
|
51 : Result := 'LOGEST';
|
||||||
|
52 : Result := 'GROWTH';
|
||||||
|
56 : Result := 'PV';
|
||||||
|
57 : Result := 'FV';
|
||||||
|
58 : Result := 'NPER';
|
||||||
|
59 : Result := 'PMT';
|
||||||
|
60 : Result := 'RATE';
|
||||||
|
61 : Result := 'MIRR';
|
||||||
|
62 : Result := 'IRR';
|
||||||
|
63 : Result := 'RAND';
|
||||||
|
64 : Result := 'MATCH';
|
||||||
|
65 : Result := 'DATE';
|
||||||
|
66 : Result := 'TIME';
|
||||||
|
67 : Result := 'DAY';
|
||||||
|
68 : Result := 'MONTH';
|
||||||
|
69 : Result := 'YEAR';
|
||||||
|
70 : Result := 'WEEKDAY';
|
||||||
|
71 : Result := 'HOUR';
|
||||||
|
72 : Result := 'MINUTE';
|
||||||
|
73 : Result := 'SECOND';
|
||||||
|
74 : Result := 'NOW';
|
||||||
|
75 : Result := 'AREAS';
|
||||||
|
76 : Result := 'ROWS';
|
||||||
|
77 : Result := 'COLUMNS';
|
||||||
|
78 : Result := 'OFFSET';
|
||||||
|
82 : Result := 'SEARCH';
|
||||||
|
83 : Result := 'TRANSPOSE';
|
||||||
|
86 : Result := 'TYPE';
|
||||||
|
97 : Result := 'ATAN2';
|
||||||
|
98 : Result := 'ASIN';
|
||||||
|
99 : Result := 'ACOS';
|
||||||
|
100 : Result := 'CHOOSE';
|
||||||
|
101 : Result := 'HLOOKUP';
|
||||||
|
102 : Result := 'VLOOKUP';
|
||||||
|
105 : Result := 'ISREF';
|
||||||
|
109 : Result := 'LOG';
|
||||||
|
111 : Result := 'CHAR';
|
||||||
|
112 : Result := 'LOWER';
|
||||||
|
113 : Result := 'UPPER';
|
||||||
|
114 : Result := 'PROPER';
|
||||||
|
115 : Result := 'LEFT';
|
||||||
|
116 : Result := 'RIGHT';
|
||||||
|
117 : Result := 'EXACT';
|
||||||
|
118 : Result := 'TRIM';
|
||||||
|
119 : Result := 'REPLACE';
|
||||||
|
120 : Result := 'SUBSTITUTE';
|
||||||
|
121 : Result := 'CODE';
|
||||||
|
124 : Result := 'FIND';
|
||||||
|
125 : Result := 'CELL';
|
||||||
|
126 : Result := 'ISERR';
|
||||||
|
127 : Result := 'ISTEXT';
|
||||||
|
128 : Result := 'ISNUMBER';
|
||||||
|
129 : Result := 'ISBLANK';
|
||||||
|
130 : Result := 'T';
|
||||||
|
131 : Result := 'N';
|
||||||
|
140 : Result := 'DATEVALUE';
|
||||||
|
141 : Result := 'TIMEVALUE';
|
||||||
|
142 : Result := 'SLN';
|
||||||
|
143 : Result := 'SYD';
|
||||||
|
144 : Result := 'DDB';
|
||||||
|
148 : Result := 'INDIRECT';
|
||||||
|
162 : Result := 'CLEAN';
|
||||||
|
163 : Result := 'MDETERM';
|
||||||
|
164 : Result := 'MINVERSE';
|
||||||
|
165 : Result := 'MMULT';
|
||||||
|
167 : Result := 'IPMT';
|
||||||
|
168 : Result := 'PPMT';
|
||||||
|
169 : Result := 'COUNTA';
|
||||||
|
183 : Result := 'PRODUCT';
|
||||||
|
184 : Result := 'FACT';
|
||||||
|
189 : Result := 'DPRODUCT';
|
||||||
|
190 : Result := 'ISNONTEXT';
|
||||||
|
193 : Result := 'STDEVP';
|
||||||
|
194 : Result := 'VARP';
|
||||||
|
195 : Result := 'DSTDEVP';
|
||||||
|
196 : Result := 'DVARP';
|
||||||
|
197 : Result := 'TRUNC';
|
||||||
|
198 : Result := 'ISLOGICAL';
|
||||||
|
199 : Result := 'DCOUNTA';
|
||||||
|
204 : Result := 'YEN/USDOLLAR';
|
||||||
|
205 : Result := 'FINDB';
|
||||||
|
206 : Result := 'SEARCHB';
|
||||||
|
207 : Result := 'REPLACEB';
|
||||||
|
208 : Result := 'LEFTB';
|
||||||
|
209 : Result := 'RIGHTB';
|
||||||
|
210 : Result := 'MIDB';
|
||||||
|
211 : Result := 'LENB';
|
||||||
|
212 : Result := 'ROUNDUP';
|
||||||
|
213 : Result := 'ROUNDDOWN';
|
||||||
|
214 : Result := 'ASC';
|
||||||
|
215 : Result := 'JIS / DBCS';
|
||||||
|
216 : Result := 'RANK';
|
||||||
|
219 : Result := 'ADDRESS';
|
||||||
|
220 : Result := 'DAYS360';
|
||||||
|
221 : Result := 'TODAY';
|
||||||
|
222 : Result := 'VDB';
|
||||||
|
227 : Result := 'MEDIAN';
|
||||||
|
228 : Result := 'SUMPRODUCT';
|
||||||
|
229 : Result := 'SINH';
|
||||||
|
230 : Result := 'COSH';
|
||||||
|
231 : Result := 'TANH';
|
||||||
|
232 : Result := 'ASINH';
|
||||||
|
233 : Result := 'ACOSH';
|
||||||
|
234 : Result := 'ATANH';
|
||||||
|
235 : Result := 'DGET';
|
||||||
|
244 : Result := 'INFO';
|
||||||
|
247 : Result := 'DB';
|
||||||
|
252 : Result := 'FREQUENCY';
|
||||||
|
261 : Result := 'ERROR.TYPE';
|
||||||
|
269 : Result := 'AVEDEV';
|
||||||
|
270 : Result := 'BETADIST';
|
||||||
|
271 : Result := 'GAMMALN';
|
||||||
|
272 : Result := 'BETAINV';
|
||||||
|
273 : Result := 'BINOMDIST';
|
||||||
|
274 : Result := 'CHIDIST';
|
||||||
|
275 : Result := 'CHIINV';
|
||||||
|
276 : Result := 'COMBIN';
|
||||||
|
277 : Result := 'CONFIDENCE';
|
||||||
|
278 : Result := 'CRITBINOM';
|
||||||
|
279 : Result := 'EVEN';
|
||||||
|
280 : Result := 'EXPONDIST';
|
||||||
|
281 : Result := 'FDIST';
|
||||||
|
282 : Result := 'FINV';
|
||||||
|
283 : Result := 'FISHER';
|
||||||
|
284 : Result := 'FISHERINV';
|
||||||
|
285 : Result := 'FLOOR';
|
||||||
|
286 : Result := 'GAMMADIST';
|
||||||
|
287 : Result := 'GAMMAINV';
|
||||||
|
288 : Result := 'CEILING';
|
||||||
|
289 : Result := 'HYPGEOMDIST';
|
||||||
|
290 : Result := 'LOGNORMDIST';
|
||||||
|
291 : Result := 'LOGINV';
|
||||||
|
292 : Result := 'NEGBINOMDIST';
|
||||||
|
293 : Result := 'NORMDIST';
|
||||||
|
294 : Result := 'NORMSDIST';
|
||||||
|
295 : Result := 'NORMINV';
|
||||||
|
296 : Result := 'NORMSINV';
|
||||||
|
297 : Result := 'STANDARDIZE';
|
||||||
|
298 : Result := 'ODD';
|
||||||
|
299 : Result := 'PERMUT';
|
||||||
|
300 : Result := 'POISSON';
|
||||||
|
301 : Result := 'TDIST';
|
||||||
|
302 : Result := 'WEIBULL';
|
||||||
|
303 : Result := 'SUMXMY2';
|
||||||
|
304 : Result := 'SUMX2MY2';
|
||||||
|
305 : Result := 'SUMX2PY2';
|
||||||
|
306 : Result := 'CHITEST';
|
||||||
|
307 : Result := 'CORREL';
|
||||||
|
308 : Result := 'COVAR';
|
||||||
|
309 : Result := 'FORECAST';
|
||||||
|
310 : Result := 'FTEST';
|
||||||
|
311 : Result := 'INTERCEPT';
|
||||||
|
312 : Result := 'PEARSON';
|
||||||
|
313 : Result := 'RSQ';
|
||||||
|
314 : Result := 'STEYX';
|
||||||
|
315 : Result := 'SLOPE';
|
||||||
|
316 : Result := 'TTEST';
|
||||||
|
317 : Result := 'PROB';
|
||||||
|
318 : Result := 'DEVSQ';
|
||||||
|
319 : Result := 'GEOMEAN';
|
||||||
|
320 : Result := 'HARMEAN';
|
||||||
|
321 : Result := 'SUMSQ';
|
||||||
|
322 : Result := 'KURT';
|
||||||
|
323 : Result := 'SKEW';
|
||||||
|
324 : Result := 'ZTEST';
|
||||||
|
325 : Result := 'LARGE';
|
||||||
|
326 : Result := 'SMALL';
|
||||||
|
327 : Result := 'QUARTILE';
|
||||||
|
328 : Result := 'PERCENTILE';
|
||||||
|
329 : Result := 'PERCENTRANK';
|
||||||
|
330 : Result := 'MODE';
|
||||||
|
331 : Result := 'TRIMMEAN';
|
||||||
|
332 : Result := 'TINV';
|
||||||
|
336 : Result := 'CONCATENATE';
|
||||||
|
337 : Result := 'POWER';
|
||||||
|
342 : Result := 'RADIANS';
|
||||||
|
343 : Result := 'DEGREES';
|
||||||
|
344 : Result := 'SUBTOTAL';
|
||||||
|
345 : Result := 'SUMIF';
|
||||||
|
346 : Result := 'COUNTIF';
|
||||||
|
347 : Result := 'COUNTBLANK';
|
||||||
|
350 : Result := 'ISPMT';
|
||||||
|
351 : Result := 'DATEDIF';
|
||||||
|
352 : Result := 'DATESTRING';
|
||||||
|
353 : Result := 'NUMBERSTRING';
|
||||||
|
354 : Result := 'ROMAN';
|
||||||
|
358 : Result := 'GETPIVOTDATA';
|
||||||
|
359 : Result := 'HYPERLINK';
|
||||||
|
360 : Result := 'PHONETIC';
|
||||||
|
361 : Result := 'AVERAGEA';
|
||||||
|
362 : Result := 'MAXA';
|
||||||
|
363 : Result := 'MINA';
|
||||||
|
364 : Result := 'STDEVPA';
|
||||||
|
365 : Result := 'VARPA';
|
||||||
|
366 : Result := 'STDEVA';
|
||||||
|
367 : Result := 'VARA';
|
||||||
|
else Result := 'unknown';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
245
components/fpspreadsheet/reference/BIFFExplorer/behtml.pas
Normal file
245
components/fpspreadsheet/reference/BIFFExplorer/behtml.pas
Normal file
@ -0,0 +1,245 @@
|
|||||||
|
unit beHTML;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, Graphics;
|
||||||
|
|
||||||
|
type
|
||||||
|
THTMLHeader = (h1, h2, h3, h4, h5);
|
||||||
|
THeaderColors = Array[THTMLHeader] of TColor;
|
||||||
|
|
||||||
|
THTMLDocument = class
|
||||||
|
private
|
||||||
|
FLines: TStrings;
|
||||||
|
FRawMode: Boolean;
|
||||||
|
FIndent: Integer;
|
||||||
|
function Indent: String;
|
||||||
|
function Raw(const AText: String): String;
|
||||||
|
function ColorToHTML(AColor: TColor): String;
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure AddEmptyLine;
|
||||||
|
procedure AddListItem(const AText: String);
|
||||||
|
procedure AddHeader(AHeader: THTMLHeader; const AText: String);
|
||||||
|
procedure AddParagraph(const AText: String);
|
||||||
|
procedure BeginDocument(const ATitle: String; const AHeaderColors: THeaderColors;
|
||||||
|
ARawMode: Boolean=false);
|
||||||
|
procedure BeginBulletList;
|
||||||
|
procedure BeginNumberedList;
|
||||||
|
function Bold(const AText: String): String;
|
||||||
|
procedure EndDocument;
|
||||||
|
procedure EndBulletList;
|
||||||
|
procedure EndNumberedList;
|
||||||
|
function Hyperlink(const AText, ALink: String): String;
|
||||||
|
function Italic(const AText: String): String;
|
||||||
|
property Lines: TStrings read FLines;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
StrUtils, LCLIntf;
|
||||||
|
|
||||||
|
constructor THTMLDocument.Create;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
FLines := TStringList.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor THTMLDocument.Destroy;
|
||||||
|
begin
|
||||||
|
FLines.Free;
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure THTMLDocument.AddHeader(AHeader: THTMLHeader; const AText: String);
|
||||||
|
begin
|
||||||
|
if FRawMode then
|
||||||
|
FLines.Add(Raw(AText))
|
||||||
|
else
|
||||||
|
FLines.Add(Format('%s<h%d>%s</h%d>', [Indent, ord(AHeader)+1, AText, ord(AHeader)+1]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
(*
|
||||||
|
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<!-- HTML Codes by Quackit.com -->
|
||||||
|
<title>
|
||||||
|
Title appears in the browser's title bar...</title>
|
||||||
|
<meta name="keywords" content="Separate keywords or phrases with a comma (example: html code generator, generate html, ...)">
|
||||||
|
<meta name="description" content="Make it nice and short, but descriptive. The description may appear in search engines' search results pages...">
|
||||||
|
<style type="text/css">
|
||||||
|
body {background-color:ffffff;background-image:url(http://);background-repeat:no-repeat;background-position:top left;background-attachment:fixed;}
|
||||||
|
h4{font-family:Arial;color:003366;}
|
||||||
|
p {font-family:Cursive;font-size:14px;font-style:normal;font-weight:normal;color:000000;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h4>Heading goes here...</h4>
|
||||||
|
<p>Enter your paragraph text here...</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
*)
|
||||||
|
|
||||||
|
procedure THTMLDocument.BeginDocument(const ATitle: String;
|
||||||
|
const AHeaderColors: THeaderColors; ARawMode: Boolean = false);
|
||||||
|
begin
|
||||||
|
FRawMode := ARawMode;
|
||||||
|
FLines.Clear;
|
||||||
|
if not FRawMode then begin
|
||||||
|
FLines.Add('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');
|
||||||
|
FLines.Add('<html>');
|
||||||
|
FLines.Add(' <head>');
|
||||||
|
FLines.Add(' <meta http-equiv="content-type" content="text/html; charset=UTF-8">');
|
||||||
|
FLines.Add(' <title>' + ATitle + '</title>');
|
||||||
|
FLines.Add(' <style type="text/css">');
|
||||||
|
FLines.Add(Format(
|
||||||
|
' h1{color:%s;}', [ColorToHTML(AHeaderColors[h1])]));
|
||||||
|
FLines.Add(Format(
|
||||||
|
' h2{color:%s;}', [ColorToHTML(AHeaderColors[h2])]));
|
||||||
|
FLines.Add(Format(
|
||||||
|
' h3{color:%s;}', [ColorToHTML(AHeaderColors[h3])]));
|
||||||
|
FLines.Add(Format(
|
||||||
|
' h4{color:%s;}', [ColorToHTML(AHeaderColors[h4])]));
|
||||||
|
FLines.Add(Format(
|
||||||
|
' h5{color:%s;}', [ColorToHTML(AHeaderColors[h5])]));
|
||||||
|
FLines.Add(' </style>');
|
||||||
|
FLines.Add(' </head>');
|
||||||
|
FLines.Add(' <body>');
|
||||||
|
FIndent := 4;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure THTMLDocument.BeginBulletList;
|
||||||
|
begin
|
||||||
|
if not FRawMode then begin
|
||||||
|
FLines.Add(Indent + '<ul>');
|
||||||
|
inc(FIndent, 2);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure THTMLDocument.BeginNumberedList;
|
||||||
|
begin
|
||||||
|
if not FRawMode then begin
|
||||||
|
FLines.Add(Indent + '<ol>');
|
||||||
|
inc(FIndent, 2);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure THTMLDocument.AddEmptyLine;
|
||||||
|
begin
|
||||||
|
if FRawMode then
|
||||||
|
FLines.Add('')
|
||||||
|
else
|
||||||
|
FLines.Add('<br>');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure THTMLDocument.AddListItem(const AText: String);
|
||||||
|
begin
|
||||||
|
if FRawMode then
|
||||||
|
FLines.Add('- ' + Raw(AText))
|
||||||
|
else
|
||||||
|
FLines.Add(Indent + '<li>' + AText + '</li>');
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure THTMLDocument.AddParagraph(const AText: String);
|
||||||
|
begin
|
||||||
|
if FRawMode then
|
||||||
|
FLines.Add(Raw(AText))
|
||||||
|
else
|
||||||
|
FLines.Add(Indent + '<p>' + AText + '</p>');
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THTMLDocument.Bold(const AText: String): String;
|
||||||
|
begin
|
||||||
|
if FRawMode then
|
||||||
|
Result := AText
|
||||||
|
else
|
||||||
|
Result := '<b>' + AText + '</b>';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THTMLDocument.ColorToHTML(AColor: TColor): String;
|
||||||
|
var
|
||||||
|
tmpRGB: LongInt;
|
||||||
|
begin
|
||||||
|
tmpRGB := ColorToRGB(AColor) ;
|
||||||
|
Result := Format('#%.2x%.2x%.2x', [
|
||||||
|
GetRValue(tmpRGB),
|
||||||
|
GetGValue(tmpRGB),
|
||||||
|
GetBValue(tmpRGB)
|
||||||
|
]) ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure THTMLDocument.EndDocument;
|
||||||
|
begin
|
||||||
|
if not FRawMode then begin
|
||||||
|
FLines.Add(' </body>');
|
||||||
|
FLines.Add('</html>');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure THTMLDocument.EndBulletList;
|
||||||
|
begin
|
||||||
|
if not FRawMode then begin
|
||||||
|
dec(FIndent, 2);
|
||||||
|
FLines.Add(Indent + '</ul>');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure THTMLDocument.EndNumberedList;
|
||||||
|
begin
|
||||||
|
if not FRawMode then begin
|
||||||
|
dec(FIndent, 2);
|
||||||
|
FLines.Add(Indent + '</ol>');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THTMLDocument.Hyperlink(const AText, ALink: String): String;
|
||||||
|
begin
|
||||||
|
if FRawMode then
|
||||||
|
Result := Format('%s (%s)', [AText, ALink])
|
||||||
|
else
|
||||||
|
Result := Format('<a href="%s">%s</a>', [ALink, AText]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THTMLDocument.Indent: String;
|
||||||
|
begin
|
||||||
|
Result := DupeString(' ', FIndent);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THTMLDocument.Italic(const AText: String): String;
|
||||||
|
begin
|
||||||
|
if FRawMode then
|
||||||
|
Result := AText
|
||||||
|
else
|
||||||
|
Result := '<i>' + AText + '</i>';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THTMLDocument.Raw(const AText: String): String;
|
||||||
|
var
|
||||||
|
i, n: Integer;
|
||||||
|
begin
|
||||||
|
Result := '';
|
||||||
|
if AText = '' then
|
||||||
|
exit;
|
||||||
|
n := Length(AText);
|
||||||
|
i := 1;
|
||||||
|
while (i <= n) do begin
|
||||||
|
if AText[i] = '<' then
|
||||||
|
repeat
|
||||||
|
inc(i);
|
||||||
|
until (i = n) or (AText[i] = '>')
|
||||||
|
else
|
||||||
|
Result := Result + AText[i];
|
||||||
|
inc(i);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
1255
components/fpspreadsheet/reference/BIFFExplorer/bemain.lfm
Normal file
1255
components/fpspreadsheet/reference/BIFFExplorer/bemain.lfm
Normal file
File diff suppressed because it is too large
Load Diff
1144
components/fpspreadsheet/reference/BIFFExplorer/bemain.pas
Normal file
1144
components/fpspreadsheet/reference/BIFFExplorer/bemain.pas
Normal file
File diff suppressed because it is too large
Load Diff
66
components/fpspreadsheet/reference/BIFFExplorer/beutils.pas
Normal file
66
components/fpspreadsheet/reference/BIFFExplorer/beutils.pas
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
unit beUtils;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, IniFiles, Forms;
|
||||||
|
|
||||||
|
function CreateIni : TCustomIniFile;
|
||||||
|
procedure ReadFormFromIni(ini: TCustomIniFile; ASection: String; AForm: TCustomForm);
|
||||||
|
procedure WriteFormToIni(ini: TCustomIniFile; ASection: String; AForm: TCustomForm);
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
function CreateIni : TCustomIniFile;
|
||||||
|
var
|
||||||
|
cfg : string;
|
||||||
|
begin
|
||||||
|
cfg := GetAppConfigDir(false);
|
||||||
|
if not DirectoryExists(cfg) then
|
||||||
|
CreateDir(cfg);
|
||||||
|
result := TMemIniFile.Create(GetAppConfigFile(false));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ReadFormFromIni(ini: TCustomIniFile; ASection: String; AForm: TCustomForm);
|
||||||
|
var
|
||||||
|
L,T,W,H: Integer;
|
||||||
|
isMax: Boolean;
|
||||||
|
begin
|
||||||
|
L := ini.ReadInteger(ASection, 'Left', AForm.Left);
|
||||||
|
T := Ini.ReadInteger(ASection, 'Top', AForm.Top);
|
||||||
|
W := ini.ReadInteger(ASection, 'Width', AForm.Width);
|
||||||
|
H := ini.ReadInteger(ASection, 'Height', AForm.Height);
|
||||||
|
isMax := ini.ReadBool(ASection, 'Maximized', AForm.WindowState = wsMaximized);
|
||||||
|
if W > Screen.Width then W := Screen.Width;
|
||||||
|
if H > Screen.Height then H := Screen.Height;
|
||||||
|
if L < 0 then L := 0;
|
||||||
|
if T < 0 then T := 0;
|
||||||
|
if L + W > Screen.Width then L := Screen.Width - W;
|
||||||
|
if T + H > Screen.Height then T := Screen.Height - H;
|
||||||
|
AForm.Left := L;
|
||||||
|
AForm.Top := T;
|
||||||
|
AForm.Width := W;
|
||||||
|
AForm.Height := H;
|
||||||
|
if IsMax then
|
||||||
|
AForm.WindowState := wsMaximized
|
||||||
|
else
|
||||||
|
AForm.WindowState := wsNormal;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure WriteFormToIni(ini: TCustomIniFile; ASection: String; AForm: TCustomForm);
|
||||||
|
begin
|
||||||
|
ini.WriteBool(ASection, 'Maximized', (AForm.WindowState = wsMaximized));
|
||||||
|
if AForm.WindowState = wsNormal then begin
|
||||||
|
ini.WriteInteger(ASection, 'Left', AForm.Left);
|
||||||
|
ini.WriteInteger(ASection, 'Top', AForm.Top);
|
||||||
|
ini.WriteInteger(ASection, 'Width', AForm.Width);
|
||||||
|
ini.WriteInteger(ASection, 'Height', AForm.Height);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
485
components/fpspreadsheet/reference/BIFFExplorer/mrumanager.pp
Normal file
485
components/fpspreadsheet/reference/BIFFExplorer/mrumanager.pp
Normal file
@ -0,0 +1,485 @@
|
|||||||
|
{ MRU (Most Recent Used) menu item manager
|
||||||
|
|
||||||
|
Copyright (C) 2011 Michael Van Canneyt (michael@freepascal.org)
|
||||||
|
Modifications by Werner Pamler
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or (at your
|
||||||
|
option) any later version with the following modification:
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent modules,and
|
||||||
|
to copy and distribute the resulting executable under terms of your choice,
|
||||||
|
provided that you also meet, for each linked independent module, the terms
|
||||||
|
and conditions of the license of that module. An independent module is a
|
||||||
|
module which is not derived from or based on this library. If you modify
|
||||||
|
this library, you may extend this exception to your version of the library,
|
||||||
|
but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
exception statement from your version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public License
|
||||||
|
along with this library; if not, write to the Free Software Foundation,
|
||||||
|
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
modified by wp
|
||||||
|
}
|
||||||
|
unit mrumanager;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, inifiles, menus;
|
||||||
|
|
||||||
|
Type
|
||||||
|
{ TRecentMenuItem }
|
||||||
|
|
||||||
|
TRecentMenuItem = Class(TMenuItem)
|
||||||
|
Private
|
||||||
|
FFileName : string;
|
||||||
|
Public
|
||||||
|
Property FileName : String Read FFileName;
|
||||||
|
end;
|
||||||
|
TRecentMenuItemClass = Class of TRecentMenuItem;
|
||||||
|
|
||||||
|
{ TMRUMenuManager }
|
||||||
|
|
||||||
|
TOnRecentFileEvent = Procedure(Sender : TObject; Const AFileName : String) of object;
|
||||||
|
|
||||||
|
TMRUMenuManager = Class(TComponent)
|
||||||
|
Private
|
||||||
|
FIniFileName: String;
|
||||||
|
FIniSection: String;
|
||||||
|
FOnRecent: TOnRecentFileEvent;
|
||||||
|
FRecent : TStrings;
|
||||||
|
FMaxRecent : Integer;
|
||||||
|
FMenuCaptionMask : string;
|
||||||
|
FMIRecent : TMenuItem;
|
||||||
|
FPMRecent : TPopupMenu;
|
||||||
|
FMaxItemLength : integer;
|
||||||
|
procedure SetIniFileName(const AValue:string);
|
||||||
|
procedure SetIniSection(const AValue:string);
|
||||||
|
procedure SetMaxItemLength(const AValue:integer);
|
||||||
|
procedure SetMenuCaptionMask(const AValue:string);
|
||||||
|
procedure SetMIRecent(const AValue: TMenuItem);
|
||||||
|
procedure SetPMRecent(const AValue: TPopupMenu);
|
||||||
|
procedure SetRecent(const AValue: TStrings);
|
||||||
|
protected
|
||||||
|
// Overrides.
|
||||||
|
procedure Loaded; override;
|
||||||
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
||||||
|
// Return default name and section if either is empty.
|
||||||
|
procedure GetFileNameAndSection(Var AFileName,ASection : String); virtual;
|
||||||
|
// Override if you want to load additional values.
|
||||||
|
procedure LoadFromIni(Ini: TCustomIniFile; ASection: String); virtual;
|
||||||
|
// Override if you want to write additional values.
|
||||||
|
procedure SaveToIni(Ini: TCustomIniFile; ASection: String); virtual;
|
||||||
|
// Called when menu item is clicked.
|
||||||
|
procedure DoOnRecentClick(Sender: TObject); virtual;
|
||||||
|
// Override this if you want to create a custom class of menu itel.
|
||||||
|
function CreateMenuItem(AOwner: TComponent): TRecentMenuItem; virtual;
|
||||||
|
// Create a menu caption. Default is index followed by filename.
|
||||||
|
// Override if you want to customize.
|
||||||
|
Function CreateMenuCaption(AIndex : Integer; Const AFileName : String) : String; virtual;
|
||||||
|
Public
|
||||||
|
Constructor Create(AOwner : TComponent);override;
|
||||||
|
Destructor Destroy; override;
|
||||||
|
// Load files from ini file AFileName in section ASection. Calls ShowRecentFiles
|
||||||
|
// Need for explicit call only when IniFileName='' and IniSection='' and class created at run-time
|
||||||
|
procedure LoadRecentFilesFromIni(const AFileName: string=''; const ASection: String='');
|
||||||
|
// Saves files to ini file AFileName in section ASection.
|
||||||
|
procedure SaveRecentFilesToIni(const AFileName: string=''; const ASection: String='');
|
||||||
|
// Add a filename to the list of files.
|
||||||
|
// If an existing file is added, it is moved first in the list.
|
||||||
|
// If MaxRecent is attained, the last one is removed.
|
||||||
|
// Calls ShowRecentFiles.
|
||||||
|
procedure AddToRecent(AFileName: String);
|
||||||
|
// Re-populate the menu.
|
||||||
|
procedure ShowRecentFiles;
|
||||||
|
Published
|
||||||
|
// Max. items to be kept in the list.
|
||||||
|
Property MaxRecent : Integer Read FMaxRecent write FMaxRecent;
|
||||||
|
// Menu item to create a submenu under. Existing items will be removed.
|
||||||
|
Property MenuItem : TMenuItem Read FMIRecent Write SetMIRecent;
|
||||||
|
// Popupmenu attached to a toolbar button. Existing items will be removed.
|
||||||
|
Property PopupMenu : TPopupMenu Read FPMRecent Write SetPMRecent;
|
||||||
|
// Default ini filename.
|
||||||
|
Property IniFileName : String Read FIniFileName Write SetIniFileName;
|
||||||
|
// Default ini section.
|
||||||
|
Property IniSection : String Read FIniSection Write SetIniSection;
|
||||||
|
// Maximum length of recent menu item
|
||||||
|
Property MaxItemLength : integer Read FMaxItemLength Write SetMaxItemLength default 80;
|
||||||
|
// Format mask for MenuCaption: first placeholder must be %d, second %s, e.g. '%d - %s'
|
||||||
|
Property MenuCaptionMask : string read FMenuCaptionMask Write SetMenuCaptionMask;
|
||||||
|
// Recent items. If adding manually to the list, ShowRecentFiles must be called manually.
|
||||||
|
Property Recent : TStrings Read FRecent Write SetRecent;
|
||||||
|
// Called when the user clicks an recent meu item.
|
||||||
|
Property OnRecentFile : TOnRecentFileEvent Read FOnRecent Write FOnRecent;
|
||||||
|
end;
|
||||||
|
EMRUManager = Class(Exception);
|
||||||
|
|
||||||
|
Const
|
||||||
|
DefaultIniFile = 'recent.ini';
|
||||||
|
DefaultSection = 'Global';
|
||||||
|
KeyMaxRecent = 'MaxRecent';
|
||||||
|
KeyCount = 'Count';
|
||||||
|
KeyFile = 'File%d';
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
Resourcestring
|
||||||
|
SErrFailedToCreateDir = 'Failed to create directory "%s"';
|
||||||
|
|
||||||
|
const
|
||||||
|
DEFAULT_MASK = '%d. %s';
|
||||||
|
|
||||||
|
function MinimizeFileName(const AFileName:string; AMaxLen:integer) : string;
|
||||||
|
|
||||||
|
procedure SplitPath(const APath:String; Parts: TStrings);
|
||||||
|
{ Splits the provided path into constituent folder names }
|
||||||
|
var
|
||||||
|
i, j : Integer;
|
||||||
|
begin
|
||||||
|
if APath = '' then exit;
|
||||||
|
if not Assigned(Parts) then exit;
|
||||||
|
|
||||||
|
i := Length(APath);
|
||||||
|
j := i;
|
||||||
|
while (i >= 1) do begin
|
||||||
|
if APath[i] = DirectorySeparator then begin
|
||||||
|
Parts.Insert(0, copy(APath, i+1, j-i));
|
||||||
|
j := i;
|
||||||
|
end;
|
||||||
|
dec(i);
|
||||||
|
end;
|
||||||
|
Parts.Insert(0, copy(APath, 1, j));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function AddStringsFromTo(AList:TStrings; FromIndex,ToIndex:integer) : string;
|
||||||
|
var
|
||||||
|
i : integer;
|
||||||
|
begin
|
||||||
|
result := '';
|
||||||
|
for i:=FromIndex to ToIndex do
|
||||||
|
result := result + AList[i];
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Parts : TStringList;
|
||||||
|
i : integer;
|
||||||
|
tmp : string;
|
||||||
|
begin
|
||||||
|
result := AFileName;
|
||||||
|
if Length(AFileName) > AMaxLen then begin
|
||||||
|
Parts := TStringList.Create;
|
||||||
|
try
|
||||||
|
SplitPath(AFileName, Parts);
|
||||||
|
i := Parts.Count div 2;
|
||||||
|
while (i < Parts.Count) do begin
|
||||||
|
tmp := Format('%s...%s%s', [
|
||||||
|
AddStringsFromTo(Parts, 0, i-1),
|
||||||
|
DirectorySeparator,
|
||||||
|
AddStringsFromTo(Parts, i+1, Parts.Count-1)
|
||||||
|
]);
|
||||||
|
if Length(tmp) < AMaxLen then begin
|
||||||
|
result := tmp;
|
||||||
|
exit;
|
||||||
|
end else
|
||||||
|
Parts.Delete(i);
|
||||||
|
i := Parts.Count div 2;
|
||||||
|
end;
|
||||||
|
result := ExtractFileName(AFileName);
|
||||||
|
finally
|
||||||
|
Parts.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.AddToRecent(AFileName : String);
|
||||||
|
|
||||||
|
Var
|
||||||
|
I,J : Integer;
|
||||||
|
B : Boolean;
|
||||||
|
|
||||||
|
begin
|
||||||
|
AFileName:=ExpandFileName(AFileName);
|
||||||
|
With FRecent do
|
||||||
|
begin
|
||||||
|
J:=IndexOf(AFileName);
|
||||||
|
If (J<>-1) then
|
||||||
|
begin
|
||||||
|
if (J>0) then
|
||||||
|
Exchange(0,J)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
While (Count>=FMaxRecent) do
|
||||||
|
Delete(Count-1);
|
||||||
|
Insert(0,AFileName)
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
ShowRecentFiles;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TMRUMenuManager.CreateMenuItem(AOwner :TComponent) : TRecentMenuItem;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=TRecentMenuItem.Create(AOwner);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TMRUMenuManager.CreateMenuCaption(AIndex: Integer;
|
||||||
|
const AFileName: String): String;
|
||||||
|
var
|
||||||
|
fn : string;
|
||||||
|
mask : string;
|
||||||
|
begin
|
||||||
|
if FMaxItemLength > 0 then
|
||||||
|
fn := MinimizeFileName(AFileName, FMaxItemLength)
|
||||||
|
else
|
||||||
|
fn := AFileName;
|
||||||
|
if FMenuCaptionMask = '' then
|
||||||
|
mask := DEFAULT_MASK
|
||||||
|
else
|
||||||
|
mask := FMenuCaptionMask;
|
||||||
|
Result:=Format(mask, [AIndex+1,fn]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.ShowRecentFiles;
|
||||||
|
|
||||||
|
Var
|
||||||
|
I : Integer;
|
||||||
|
M : TRecentMenuItem;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if Assigned(FMIRecent) then begin
|
||||||
|
FMIRecent.clear;
|
||||||
|
For I:=0 to FRecent.Count-1 do
|
||||||
|
begin
|
||||||
|
M:=CreateMenuItem(Self.Owner);
|
||||||
|
M.Caption:=CreateMenuCaption(I,FRecent[i]);
|
||||||
|
M.FFileName:=FRecent[i];
|
||||||
|
M.OnClick:=@DoOnRecentClick;
|
||||||
|
FMIRecent.Add(M);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if Assigned(FPMRecent) then begin
|
||||||
|
FPMRecent.Items.Clear;
|
||||||
|
for i:=0 to FRecent.Count-1 do
|
||||||
|
begin
|
||||||
|
M := CreateMenuItem(Self.Owner);
|
||||||
|
M.Caption := CreateMenuCaption(I, Recent[i]);
|
||||||
|
M.FFileName := FRecent[i];
|
||||||
|
M.OnClick := @DoOnRecentClick;
|
||||||
|
FPMRecent.Items.Add(M);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.LoadFromIni(Ini : TCustomIniFile; ASection : String);
|
||||||
|
|
||||||
|
Var
|
||||||
|
I,Count : Integer;
|
||||||
|
FN : String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
FRecent.Clear;
|
||||||
|
FMaxRecent:=Ini.ReadInteger(ASection,KeyMaxRecent,10);
|
||||||
|
Count:=Ini.ReadInteger(ASection,KeyCount,0);
|
||||||
|
For I:=1 to Count do
|
||||||
|
begin
|
||||||
|
FN:=Ini.ReadString(ASection,Format(KeyFile,[i]),'');
|
||||||
|
If (FN<>'') then
|
||||||
|
FRecent.Add(FN);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.GetFileNameAndSection(var AFileName, ASection: String);
|
||||||
|
|
||||||
|
begin
|
||||||
|
if (AFileName='') then
|
||||||
|
begin
|
||||||
|
AFileName:=GetAppConfigDir(False);
|
||||||
|
AFileName:=IncludeTrailingPathDelimiter(AFileName)+DefaultIniFile;
|
||||||
|
end;
|
||||||
|
if (ASection='') then
|
||||||
|
ASection:=DefaultSection;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.LoadRecentFilesFromIni(Const AFileName : string = ''; Const ASection : String = '');
|
||||||
|
|
||||||
|
Var
|
||||||
|
DN,FN,Sec : String;
|
||||||
|
Ini : TIniFile;
|
||||||
|
|
||||||
|
begin
|
||||||
|
FN:=AFileName;
|
||||||
|
Sec:=ASection;
|
||||||
|
GetFileNameAndSection(FN,Sec);
|
||||||
|
DN:=ExtractFilePath(FN);
|
||||||
|
If ForceDirectories(DN) then
|
||||||
|
begin
|
||||||
|
If FileExists(FN) then
|
||||||
|
begin
|
||||||
|
Ini:=TIniFile.Create(FN);
|
||||||
|
try
|
||||||
|
LoadFromIni(Ini,Sec);
|
||||||
|
finally
|
||||||
|
Ini.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
ShowRecentFiles;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.SaveToIni(Ini : TCustomIniFile; ASection : String);
|
||||||
|
|
||||||
|
Var
|
||||||
|
I : Integer;
|
||||||
|
begin
|
||||||
|
Ini.EraseSection(ASection);
|
||||||
|
Ini.WriteInteger(ASection,KeyMaxRecent,FMaxRecent);
|
||||||
|
Ini.WriteInteger(ASection,KeyCount,FRecent.Count);
|
||||||
|
For I:=0 to FRecent.Count-1 do
|
||||||
|
Ini.WriteString(ASection,Format(KeyFile,[i+1]),FRecent[i]);
|
||||||
|
Ini.UpdateFile;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.SaveRecentFilesToIni(Const AFileName : string = ''; Const ASection : String = '');
|
||||||
|
|
||||||
|
Var
|
||||||
|
DN,FN,Sec : String;
|
||||||
|
Ini : TMemIniFile;
|
||||||
|
|
||||||
|
begin
|
||||||
|
FN:=AFileName;
|
||||||
|
Sec:=ASection;
|
||||||
|
GetFileNameAndSection(FN,Sec);
|
||||||
|
DN:=ExtractFilePath(FN);
|
||||||
|
If not ForceDirectories(DN) then
|
||||||
|
Raise EMRUManager.CreateFmt(SErrFailedToCreateDir,[DN]);
|
||||||
|
Ini:=TMemIniFile.Create(FN);
|
||||||
|
try
|
||||||
|
SaveToIni(Ini,Sec);
|
||||||
|
finally
|
||||||
|
Ini.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.SetIniFileName(const AValue:string);
|
||||||
|
begin
|
||||||
|
if AValue <> FIniFileName then begin
|
||||||
|
FIniFileName := AValue;
|
||||||
|
LoadRecentFilesFromIni(FIniFileName, FIniSection);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.SetIniSection(const AValue:string);
|
||||||
|
begin
|
||||||
|
if AValue <> FIniSection then begin
|
||||||
|
FIniSection := AValue;
|
||||||
|
LoadRecentFilesFromini(FIniFileName, FIniSection);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.SetMaxItemLength(const AValue:integer);
|
||||||
|
begin
|
||||||
|
if FMaxItemLength <> AValue then begin
|
||||||
|
FMaxItemLength := AValue;
|
||||||
|
ShowRecentFiles;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.SetMenuCaptionMask(const AValue:string);
|
||||||
|
begin
|
||||||
|
if FMenuCaptionMask <> AValue then begin
|
||||||
|
FMenuCaptionMask := AValue;
|
||||||
|
ShowRecentFiles;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.SetMIRecent(const AValue: TMenuItem);
|
||||||
|
begin
|
||||||
|
if FMIRecent=AValue then exit;
|
||||||
|
If Assigned(FMIRecent) then
|
||||||
|
FMIRecent.RemoveFreeNotification(Self);
|
||||||
|
FMIRecent:=AValue;
|
||||||
|
If Assigned(FMIRecent) then
|
||||||
|
FMIRecent.FreeNotification(Self);
|
||||||
|
ShowRecentFiles;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.SetPMRecent(const AValue: TPopupMenu);
|
||||||
|
begin
|
||||||
|
if FPMRecent=AValue then exit;
|
||||||
|
if Assigned(FPMRecent) then
|
||||||
|
FPMRecent.RemoveFreeNotification(self);
|
||||||
|
FPMRecent := AValue;
|
||||||
|
if Assigned(FPMRecent) then
|
||||||
|
FPMRecent.FreeNotification(self);
|
||||||
|
ShowRecentFiles;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.SetRecent(const AValue: TStrings);
|
||||||
|
begin
|
||||||
|
if FRecent=AValue then exit;
|
||||||
|
FRecent.Assign(AValue);
|
||||||
|
ShowRecentFiles;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.loaded;
|
||||||
|
begin
|
||||||
|
inherited loaded;
|
||||||
|
if (FRecent.Count>0) and (assigned(FMIRecent) or assigned(FPMRecent))then
|
||||||
|
LoadRecentFilesFromIni(FIniFileName, FIniSection);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TMRUMenuManager.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
FRecent:=TStringList.Create;
|
||||||
|
FMaxItemLength := 80;
|
||||||
|
FMenuCaptionMask := DEFAULT_MASK;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TMRUMenuManager.Destroy;
|
||||||
|
begin
|
||||||
|
SaveRecentFilesToIni(FIniFileName, FIniSection);
|
||||||
|
FreeAndNil(FRecent);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.Notification(AComponent: TComponent;
|
||||||
|
Operation: TOperation);
|
||||||
|
begin
|
||||||
|
inherited Notification(AComponent, Operation);
|
||||||
|
if (Operation = opRemove) then begin
|
||||||
|
if AComponent = FMIRecent then FMIRecent := nil;
|
||||||
|
if AComponent = FPMRecent then FPMRecent := nil;
|
||||||
|
end;
|
||||||
|
{ original code - I think this is not correct:
|
||||||
|
inherited Notification(AComponent, Operation);
|
||||||
|
if (Operation=opRemove) and ((AComponent=FMIRecent) or (AComponent=FPMRecent)) then
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TMRUMenuManager.DoOnRecentClick(Sender: TObject);
|
||||||
|
Var
|
||||||
|
FN : String;
|
||||||
|
begin
|
||||||
|
With (Sender as TRecentMenuItem) do
|
||||||
|
FN:=FileName;
|
||||||
|
if (FN<>'') and (OnRecentFile<>Nil) then
|
||||||
|
OnRecentFile(Self,FN);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
18
components/fpspreadsheet/reference/BIFFExplorer/readme.txt
Normal file
18
components/fpspreadsheet/reference/BIFFExplorer/readme.txt
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
BIFF Explorer
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
"BIFF Explorer" is a tool to peek into the internal structure of a binary
|
||||||
|
Excel file in biff format.
|
||||||
|
|
||||||
|
It displays a list of the BIFF records contained in the xls file along with
|
||||||
|
name and explanation as described in various documentation files (see "About").
|
||||||
|
Selecting one of the records loads its bytes into a simple hex viewer; for the
|
||||||
|
most important records I tried to decipher the contents of the hex values and
|
||||||
|
display their meaning in a grid and a memo (page "Analysis"). For the other
|
||||||
|
records select a byte in the hex viewer, and the program will display the
|
||||||
|
contents of that byte and the following ones as integer, double, string
|
||||||
|
(page "Values").
|
||||||
|
|
||||||
|
For compiling, note that the program requires the package "VirtualTreeview-new"
|
||||||
|
from ccr (which in turn requires the package "lclextensions" from
|
||||||
|
http://code.google.com/p/luipack/downloads/list).
|
Reference in New Issue
Block a user