You've already forked lazarus-ccr
fpspreadsheet: Remove BIFFExplorer (has been moved to application)
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4518 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
Binary file not shown.
Before Width: | Height: | Size: 134 KiB |
@@ -1,224 +0,0 @@
|
|||||||
<?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="\"/>
|
|
||||||
<Target>
|
|
||||||
<Filename Value="bin\$(TargetCPU)-$(TargetOS)\BiffExplorer"/>
|
|
||||||
</Target>
|
|
||||||
<SearchPaths>
|
|
||||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
|
||||||
<OtherUnitFiles Value="mrumenu"/>
|
|
||||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
|
||||||
</SearchPaths>
|
|
||||||
<Linking>
|
|
||||||
<Debugging>
|
|
||||||
<DebugInfoType Value="dsDwarf2Set"/>
|
|
||||||
<UseExternalDbgSyms Value="True"/>
|
|
||||||
</Debugging>
|
|
||||||
<Options>
|
|
||||||
<Win32>
|
|
||||||
<GraphicApplication Value="True"/>
|
|
||||||
</Win32>
|
|
||||||
</Options>
|
|
||||||
</Linking>
|
|
||||||
<Other>
|
|
||||||
<CustomOptions Value="-duse_new_ole"/>
|
|
||||||
</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>
|
|
||||||
<CustomOptions Value="-duse_new_ole"/>
|
|
||||||
</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="5">
|
|
||||||
<Item1>
|
|
||||||
<PackageName Value="KControlsLaz"/>
|
|
||||||
</Item1>
|
|
||||||
<Item2>
|
|
||||||
<PackageName Value="laz_fpspreadsheet"/>
|
|
||||||
</Item2>
|
|
||||||
<Item3>
|
|
||||||
<PackageName Value="TurboPowerIPro"/>
|
|
||||||
</Item3>
|
|
||||||
<Item4>
|
|
||||||
<PackageName Value="virtualtreeview_package"/>
|
|
||||||
</Item4>
|
|
||||||
<Item5>
|
|
||||||
<PackageName Value="LCL"/>
|
|
||||||
</Item5>
|
|
||||||
</RequiredPackages>
|
|
||||||
<Units Count="11">
|
|
||||||
<Unit0>
|
|
||||||
<Filename Value="BIFFExplorer.lpr"/>
|
|
||||||
<IsPartOfProject Value="True"/>
|
|
||||||
</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"/>
|
|
||||||
</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"/>
|
|
||||||
</Unit7>
|
|
||||||
<Unit8>
|
|
||||||
<Filename Value="bemain.lfm"/>
|
|
||||||
<IsPartOfProject Value="True"/>
|
|
||||||
</Unit8>
|
|
||||||
<Unit9>
|
|
||||||
<Filename Value="beabout.lfm"/>
|
|
||||||
<IsPartOfProject Value="True"/>
|
|
||||||
</Unit9>
|
|
||||||
<Unit10>
|
|
||||||
<Filename Value="betypes.pas"/>
|
|
||||||
<IsPartOfProject Value="True"/>
|
|
||||||
<UnitName Value="beTypes"/>
|
|
||||||
</Unit10>
|
|
||||||
</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>
|
|
||||||
<CustomOptions Value="-duse_new_ole"/>
|
|
||||||
</Other>
|
|
||||||
</CompilerOptions>
|
|
||||||
<Debugging>
|
|
||||||
<Exceptions Count="4">
|
|
||||||
<Item1>
|
|
||||||
<Name Value="EAbort"/>
|
|
||||||
</Item1>
|
|
||||||
<Item2>
|
|
||||||
<Name Value="ECodetoolError"/>
|
|
||||||
</Item2>
|
|
||||||
<Item3>
|
|
||||||
<Name Value="EFOpenError"/>
|
|
||||||
</Item3>
|
|
||||||
<Item4>
|
|
||||||
<Name Value="EStreamError"/>
|
|
||||||
</Item4>
|
|
||||||
</Exceptions>
|
|
||||||
</Debugging>
|
|
||||||
</CONFIG>
|
|
@@ -1,22 +0,0 @@
|
|||||||
program BIFFExplorer;
|
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
|
||||||
|
|
||||||
uses
|
|
||||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
|
||||||
cthreads,
|
|
||||||
{$ENDIF}{$ENDIF}
|
|
||||||
Interfaces, // this includes the LCL widgetset
|
|
||||||
Forms, virtualtreeview_package, laz_fpspreadsheet, kcontrolslaz, beabout,
|
|
||||||
bebiffgrid, bebiffutils, behtml, beutils, mrumanager, beMain, beTypes;
|
|
||||||
|
|
||||||
{$R *.res}
|
|
||||||
|
|
||||||
begin
|
|
||||||
RequireDerivedFormResource := True;
|
|
||||||
Application.Initialize;
|
|
||||||
Application.CreateForm(TMainForm, MainForm);
|
|
||||||
MainForm.BeforeRun;
|
|
||||||
Application.Run;
|
|
||||||
end.
|
|
||||||
|
|
Binary file not shown.
@@ -1,68 +0,0 @@
|
|||||||
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.7'
|
|
||||||
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
|
|
||||||
end
|
|
@@ -1,153 +0,0 @@
|
|||||||
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;
|
|
||||||
LblTitle: TLabel;
|
|
||||||
Panel1: TPanel;
|
|
||||||
procedure FormCreate(Sender: TObject);
|
|
||||||
procedure HTMLViewerHotClick(Sender: TObject);
|
|
||||||
private
|
|
||||||
{ private declarations }
|
|
||||||
FHTMLViewer: TIpHtmlPanel;
|
|
||||||
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/')
|
|
||||||
);
|
|
||||||
AddListItem(Hyperlink(
|
|
||||||
'KControls',
|
|
||||||
'http://www.tkweb.eu/en/delphicomp/kcontrols.html')
|
|
||||||
);
|
|
||||||
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;
|
|
||||||
|
|
||||||
AddEmptyLine;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
FHTMLViewer := TIpHtmlPanel.Create(self);
|
|
||||||
FHTMLViewer.Parent := self;
|
|
||||||
FHTMLViewer.Align := alClient;
|
|
||||||
FHTMLViewer.DefaultFontSize := 9;
|
|
||||||
FHTMLViewer.OnHotClick := @HTMLViewerHotClick;
|
|
||||||
|
|
||||||
FHTMLViewer.SetHTMLFromStr(CreateCredits);
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
procedure TAboutForm.HTMLViewerHotClick(Sender: TObject);
|
|
||||||
begin
|
|
||||||
OpenURL((Sender as TIpHtmlPanel).HotURL);
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
end.
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@@ -1,801 +0,0 @@
|
|||||||
unit beBIFFUtils;
|
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
uses
|
|
||||||
Classes, SysUtils;
|
|
||||||
|
|
||||||
function BOFName(ACode: Word): String;
|
|
||||||
function CodePageName(AID: Word): String;
|
|
||||||
function PaperSizeName(ACode: 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 PaperSizeName(ACode: Word): String;
|
|
||||||
begin
|
|
||||||
case ACode of
|
|
||||||
0: Result := 'Undefined';
|
|
||||||
1: Result := 'Letter (8.5" x 11")';
|
|
||||||
2: Result := 'Letter small (8.5" x 11")';
|
|
||||||
3: Result := 'Tabloid (11" x 17")';
|
|
||||||
4: Result := 'Ledger (17" x 11")';
|
|
||||||
5: Result := 'Legal (8.5" x 14")';
|
|
||||||
6: Result := 'Statement (5.5" x 8.5")';
|
|
||||||
7: Result := 'Executive (7.25" x 10.5")';
|
|
||||||
8: Result := 'A3 (297mm x 420mm)';
|
|
||||||
9: Result := 'A4 (210mm x 297mm)';
|
|
||||||
10: Result := 'A4 small (210mm x 297mm)';
|
|
||||||
11: Result := 'A5 (148mm x 210mm)';
|
|
||||||
12: Result := 'B4 (JIS) (257mm x 364mm)';
|
|
||||||
13: Result := 'B5 (JIS) (182mm x 257mm)';
|
|
||||||
14: Result := 'Folio (8.5" x 13")';
|
|
||||||
15: Result := 'Quarto (215mm x 275mm)';
|
|
||||||
16: Result := '10x14 (10" x 14")';
|
|
||||||
17: Result := '11x17 (11" x 17")';
|
|
||||||
18: Result := 'Note (8.5" x 11")';
|
|
||||||
19: Result := 'Envelope #9 (3 7/8" x 8 7/8")';
|
|
||||||
20: Result := 'Envelope #10 (4 1/8" x 9 1/2")';
|
|
||||||
21: Result := 'Envelope #11 (4 1/2" x 10 3/8")';
|
|
||||||
22: Result := 'Envelope #12 (4 3/4" x 11")';
|
|
||||||
23: Result := 'Envelope #14 (5" x 11.5")';
|
|
||||||
24: Result := 'C (17" x 22")';
|
|
||||||
25: Result := 'D (22" x 34")';
|
|
||||||
26: Result := 'E (34" x 44")';
|
|
||||||
27: Result := 'Envelope DL (110mm x 220mm)';
|
|
||||||
28: Result := 'Envelope C5 (162mm x 229mm)';
|
|
||||||
29: Result := 'Envelope C3 (324mm x 458mm)';
|
|
||||||
30: Result := 'Envelope C4 (229mm x 324mm)';
|
|
||||||
31: Result := 'Envelope C6 (114mm x 162mm)';
|
|
||||||
32: Result := 'Envelope C6/C5 (114mm x 229mm)';
|
|
||||||
33: Result := 'B4 (ISO) (250mm x 353mm)';
|
|
||||||
34: Result := 'B5 (ISO) (176mm x 250mm)';
|
|
||||||
35: Result := 'B6 (ISO) (125mm x 176mm)';
|
|
||||||
36: Result := 'Envelope Italy (110mm x 230mm)';
|
|
||||||
37: Result := 'Envelope Monarch (3 7/8" x 7 1/2")';
|
|
||||||
38: Result := '6 3/4 Envelope (3 5/8" x 6 1/2")';
|
|
||||||
39: Result := 'US Standard Fanfold (14 7/8" x 11")';
|
|
||||||
40: Result := 'German Std. Fanfold (8.5" x 12")';
|
|
||||||
41: Result := 'German Legal Fanfold (8.5" x 13")';
|
|
||||||
42: Result := 'B4 (ISO) (250mm x 353mm)';
|
|
||||||
43: Result := 'Japanese Postcard (100mm x 148mm)';
|
|
||||||
44: Result := '9x11 (9" x 11")';
|
|
||||||
45: Result := '10x11 (10" x 11")';
|
|
||||||
46: Result := '15x11 (15" x 11")';
|
|
||||||
47: Result := 'Envelope Invite (220mm x 220mm)';
|
|
||||||
48: Result := 'Undefined';
|
|
||||||
49: Result := 'Undefined';
|
|
||||||
50: Result := 'Letter Extra (9.5" x 12")';
|
|
||||||
51: Result := 'Legal Extra (9.5" x 15")';
|
|
||||||
52: Result := 'Tabloid Extra (11 11/16" x 18")';
|
|
||||||
53: Result := 'A4 Extra (235mm x 322mm)';
|
|
||||||
54: Result := 'Letter Transverse (8.5" x 11")';
|
|
||||||
55: Result := 'A4 Transverse (210mm x 297mm)';
|
|
||||||
56: Result := 'Letter Extra Transv. (9.5" x 12")';
|
|
||||||
57: Result := 'Super A/A4 (227mm x 356mm)';
|
|
||||||
58: Result := 'Super B/A3 (305mm x 487mm)';
|
|
||||||
59: Result := 'Letter Plus (8.5" x 12 11/16")';
|
|
||||||
60: Result := 'A4 Plus (210mm x 330mm)';
|
|
||||||
61: Result := 'A5 Transverse (148mm x 210mm)';
|
|
||||||
62: Result := 'B5 (JIS) Transverse (182mm x 257mm)';
|
|
||||||
63: Result := 'A3 Extra (322mm x 445mm)';
|
|
||||||
64: Result := 'A5 Extra (174mm x 235mm)';
|
|
||||||
65: Result := 'B5 (ISO) Extra (201mm x 276mm)';
|
|
||||||
66: Result := 'A2 (420mm s 594mm)';
|
|
||||||
67: Result := 'A3 Transverse (297mm x 420mm)';
|
|
||||||
68: Result := 'A3 Extra Transverse (322mm x 445mm)';
|
|
||||||
69: Result := 'Dbl. Japanese Postcard (200mm x 148mm)';
|
|
||||||
70: Result := 'A6 (105mm x 148mm)';
|
|
||||||
75: Result := 'Letter Rotated (11" x 8.5")';
|
|
||||||
76: Result := 'A3 Rotated (420mm x 297mm)';
|
|
||||||
77: Result := 'A4 Rotated (297mm x 210mm)';
|
|
||||||
78: Result := 'A5 Rotated (210mm x 148mm)';
|
|
||||||
79: Result := 'B4 (JIS) Rotated (364mm x 257mm)';
|
|
||||||
80: Result := 'B5 (JIS) Rotated (257mm x 182mm)';
|
|
||||||
81: Result := 'Japanese Postcard Rot. (148mm x 100mm)';
|
|
||||||
82: Result := 'Dbl. Jap. Postcard Rot. (148mm x 200mm)';
|
|
||||||
83: Result := 'A6 Rotated (148mm x 105mm)';
|
|
||||||
88: Result := 'B6 (JIS) (128mm x 182mm)';
|
|
||||||
89: Result := 'B6 (JIS) Rotated (182mm x 128mm)';
|
|
||||||
90: Result := '2x11 (12" x 11")';
|
|
||||||
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: Begin of file';
|
|
||||||
$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: Name and token array of an internal defined name';
|
|
||||||
$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: Number format record';
|
|
||||||
$001F: Result := 'FORMATCOUNT: Count of number formats';
|
|
||||||
$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: Window information';
|
|
||||||
$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 format';
|
|
||||||
$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';
|
|
||||||
$005D: Result := 'OBJ: Properties of an object in a sheet';
|
|
||||||
$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 := 'PAGESETUP: 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 := 'MERGEDCELLS: List of 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 := 'EXTERNBOOK (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: Formula';
|
|
||||||
$0207: Result := 'STRING: String value of a formula';
|
|
||||||
$0208: Result := 'ROW: Describes a row';
|
|
||||||
$0209: Result := 'BOF: Begin of file';
|
|
||||||
$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: Extended format';
|
|
||||||
$027E: Result := 'RK: Cell value, RK number';
|
|
||||||
$0293: Result := 'STYLE: Style information';
|
|
||||||
$0406: Result := 'FORMULA: Cell formula';
|
|
||||||
$0409: Result := 'BOF: Begin of file';
|
|
||||||
$041E: Result := 'FORMAT: Number format';
|
|
||||||
$0443: Result := 'XF: Extended format';
|
|
||||||
$04BC: Result := 'SHAREDFMLA: Shared formula';
|
|
||||||
$0800: Result := 'HLINKTOOLTIP: 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.
|
|
||||||
|
|
@@ -1,245 +0,0 @@
|
|||||||
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.
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,30 +0,0 @@
|
|||||||
unit beTypes;
|
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
uses
|
|
||||||
Classes, SysUtils;
|
|
||||||
|
|
||||||
const
|
|
||||||
BIFFNODE_TXO_CONTINUE1 = 1;
|
|
||||||
BIFFNODE_TXO_CONTINUE2 = 2;
|
|
||||||
BIFFNODE_SST_CONTINUE = 3;
|
|
||||||
|
|
||||||
type
|
|
||||||
{ Virtual tree node data }
|
|
||||||
TBiffNodeData = record //class
|
|
||||||
Offset: Integer;
|
|
||||||
RecordID: Integer;
|
|
||||||
RecordName: String;
|
|
||||||
RecordDescription: String;
|
|
||||||
Index: Integer;
|
|
||||||
Tag: Integer;
|
|
||||||
end;
|
|
||||||
PBiffNodeData = ^TBiffNodeData;
|
|
||||||
|
|
||||||
implementation
|
|
||||||
|
|
||||||
end.
|
|
||||||
|
|
@@ -1,165 +0,0 @@
|
|||||||
unit beUtils;
|
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
uses
|
|
||||||
Classes, SysUtils, IniFiles, Forms,
|
|
||||||
fpstypes, fpspreadsheet;
|
|
||||||
|
|
||||||
function CreateIni : TCustomIniFile;
|
|
||||||
procedure ReadFormFromIni(ini: TCustomIniFile; ASection: String; AForm: TCustomForm);
|
|
||||||
procedure WriteFormToIni(ini: TCustomIniFile; ASection: String; AForm: TCustomForm);
|
|
||||||
|
|
||||||
function GetFileFormatName(AFormat: TsSpreadsheetFormat): String;
|
|
||||||
function GetFormatFromFileHeader(const AFileName: TFileName;
|
|
||||||
out SheetType: TsSpreadsheetFormat): Boolean;
|
|
||||||
|
|
||||||
|
|
||||||
implementation
|
|
||||||
|
|
||||||
uses
|
|
||||||
uvirtuallayer_ole;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
function GetFileFormatName(AFormat: TsSpreadsheetFormat): string;
|
|
||||||
begin
|
|
||||||
case AFormat of
|
|
||||||
sfExcel2 : Result := 'BIFF2';
|
|
||||||
{ Excel3/4 not supported fpspreadsheet
|
|
||||||
sfExcel3 : Result := 'BIFF3';
|
|
||||||
sfExcel4 : Result := 'BIFF4';
|
|
||||||
}
|
|
||||||
sfExcel5 : Result := 'BIFF5';
|
|
||||||
sfExcel8 : Result := 'BIFF8';
|
|
||||||
sfooxml : Result := 'OOXML';
|
|
||||||
sfOpenDocument : Result := 'Open Document';
|
|
||||||
sfCSV : Result := 'CSV';
|
|
||||||
sfWikiTable_Pipes : Result := 'WikiTable Pipes';
|
|
||||||
sfWikiTable_WikiMedia : Result := 'WikiTable WikiMedia';
|
|
||||||
else Result := '-unknown format-';
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function GetFormatFromFileHeader(const AFileName: TFileName;
|
|
||||||
out SheetType: TsSpreadsheetFormat): Boolean;
|
|
||||||
const
|
|
||||||
BIFF2_HEADER: array[0..3] of byte = (
|
|
||||||
$09,$00, $04,$00); // they are common to all BIFF2 files that I've seen
|
|
||||||
BIFF58_HEADER: array[0..7] of byte = (
|
|
||||||
$D0,$CF, $11,$E0, $A1,$B1, $1A,$E1);
|
|
||||||
|
|
||||||
function ValidOLEStream(AStream: TStream; AName: String): Boolean;
|
|
||||||
var
|
|
||||||
fsOLE: TVirtualLayer_OLE;
|
|
||||||
begin
|
|
||||||
AStream.Position := 0;
|
|
||||||
fsOLE := TVirtualLayer_OLE.Create(AStream);
|
|
||||||
try
|
|
||||||
fsOLE.Initialize;
|
|
||||||
Result := fsOLE.FileExists('/'+AName);
|
|
||||||
finally
|
|
||||||
fsOLE.Free;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
var
|
|
||||||
buf: packed array[0..7] of byte = (0,0,0,0,0,0,0,0);
|
|
||||||
stream: TStream;
|
|
||||||
i: Integer;
|
|
||||||
ok: Boolean;
|
|
||||||
begin
|
|
||||||
Result := false;
|
|
||||||
stream := TFileStream.Create(AFileName, fmOpenRead + fmShareDenyNone);
|
|
||||||
try
|
|
||||||
// Read first 8 bytes
|
|
||||||
stream.ReadBuffer(buf, 8);
|
|
||||||
|
|
||||||
// Check for Excel 2
|
|
||||||
ok := true;
|
|
||||||
for i:=0 to High(BIFF2_HEADER) do
|
|
||||||
if buf[i] <> BIFF2_HEADER[i] then
|
|
||||||
begin
|
|
||||||
ok := false;
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
if ok then
|
|
||||||
begin
|
|
||||||
SheetType := sfExcel2;
|
|
||||||
Exit(True);
|
|
||||||
end;
|
|
||||||
|
|
||||||
// Check for Excel 5 or 8
|
|
||||||
for i:=0 to High(BIFF58_HEADER) do
|
|
||||||
if buf[i] <> BIFF58_HEADER[i] then
|
|
||||||
exit;
|
|
||||||
|
|
||||||
// Now we know that the file is a Microsoft compound document.
|
|
||||||
|
|
||||||
// We check for Excel 5 in which the stream is named "Book"
|
|
||||||
if ValidOLEStream(stream, 'Book') then begin
|
|
||||||
SheetType := sfExcel5;
|
|
||||||
exit(True);
|
|
||||||
end;
|
|
||||||
|
|
||||||
// Now we check for Excel 8 which names the stream "Workbook"
|
|
||||||
if ValidOLEStream(stream, 'Workbook') then begin
|
|
||||||
SheetType := sfExcel8;
|
|
||||||
exit(True);
|
|
||||||
end;
|
|
||||||
|
|
||||||
finally
|
|
||||||
stream.Free;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
end.
|
|
||||||
|
|
@@ -1,485 +0,0 @@
|
|||||||
{ 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.
|
|
||||||
|
|
@@ -1,20 +0,0 @@
|
|||||||
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 following packages
|
|
||||||
from ccr
|
|
||||||
- "KControls"
|
|
||||||
- "lclextensions"
|
|
||||||
- "VirtualTreeview-new"
|
|
Reference in New Issue
Block a user