* Added two way comunication to LHelpControl

* Made using lhelp easier so that it's only needed to install ChmHelpPkg and copy chms to docs/html
* lhelp will be built by ChmHelpPkg if it doesn't exist
* added helpful msg when F1 is pushed and no chms can be found

git-svn-id: trunk@21688 -
This commit is contained in:
andrew 2009-09-13 18:34:50 +00:00
parent efdffe51ba
commit 08ed127d0f
13 changed files with 797 additions and 555 deletions

6
.gitattributes vendored
View File

@ -57,9 +57,9 @@ components/chmhelp/lhelp/images/table_open.png -text
components/chmhelp/lhelp/lhelp.ico -text svneol=unset#image/icon
components/chmhelp/lhelp/lhelp.lpi svneol=native#text/plain
components/chmhelp/lhelp/lhelp.lpr svneol=native#text/plain
components/chmhelp/lhelp/lhelp.manifest -text svneol=native#text/plain
components/chmhelp/lhelp/lhelp.rc -text svneol=native#text/plain
components/chmhelp/lhelp/lhelpcore.lfm -text svneol=native#text/plain
components/chmhelp/lhelp/lhelp.manifest svneol=native#text/plain
components/chmhelp/lhelp/lhelp.rc svneol=native#text/plain
components/chmhelp/lhelp/lhelpcore.lfm svneol=native#text/plain
components/chmhelp/lhelp/lhelpcore.lrs svneol=native#text/pascal
components/chmhelp/lhelp/lhelpcore.pas svneol=native#text/plain
components/chmhelp/lhelp/lnethttpdataprovider.pas svneol=native#text/plain

View File

@ -2,15 +2,17 @@
<CONFIG>
<ProjectOptions>
<PathDelim Value="\"/>
<Version Value="6"/>
<Version Value="7"/>
<General>
<Flags>
<LRSInOutputDirectory Value="False"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
<TargetFileExt Value=""/>
</General>
<PublishOptions>
<Version Value="2"/>
<DestinationDirectory Value="$(TestDir)\publishedproject\"/>
<IgnoreBinaries Value="False"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
@ -19,7 +21,7 @@
<local>
<FormatVersion Value="1"/>
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
<Display Use="True" Value="192.168.0.250:0"/>
<Display Value="192.168.0.250:0"/>
</local>
</RunParams>
<RequiredPackages Count="2">
@ -38,9 +40,9 @@
</Unit0>
<Unit1>
<Filename Value="unit1.pas"/>
<ComponentName Value="Form1"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="unit1.lrs"/>
<ComponentName Value="Form1"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/>
</Unit1>
</Units>

View File

@ -1,30 +1,34 @@
object Form1: TForm1
Left = 610
Height = 300
Top = 247
Width = 400
ActiveControl = Button1
Caption = 'Form1'
ClientHeight = 300
ClientWidth = 400
OnCreate = FormCreate
PixelsPerInch = 90
HorzScrollBar.Page = 399
VertScrollBar.Page = 299
Left = 610
Height = 300
Top = 247
Width = 400
OnDestroy = FormDestroy
LCLVersion = '0.9.27'
object Label1: TLabel
Left = 93
Height = 18
Top = 73
Width = 110
Caption = 'Response is here'
ParentColor = False
end
object Button1: TButton
Caption = 'Click to load a chm'
OnClick = Button1Click
TabOrder = 0
Left = 36
Height = 25
Top = 20
Width = 284
Caption = 'Click to load a chm'
OnClick = Button1Click
TabOrder = 0
end
object OpenDialog1: TOpenDialog
Title = 'Open existing file'
FilterIndex = 0
Title = 'Open existing file'
left = 28
top = 127
end

View File

@ -1,11 +1,13 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TForm1','FORMDATA',[
'TPF0'#6'TForm1'#5'Form1'#13'ActiveControl'#7#7'Button1'#7'Caption'#6#5'Form1'
+#12'ClientHeight'#3','#1#11'ClientWidth'#3#144#1#8'OnCreate'#7#10'FormCreate'
+#13'PixelsPerInch'#2'Z'#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'
+#3'+'#1#4'Left'#3'b'#2#6'Height'#3','#1#3'Top'#3#247#0#5'Width'#3#144#1#0#7
+'TButton'#7'Button1'#7'Caption'#6#19'Click to load a chm'#7'OnClick'#7#12'Bu'
+'tton1Click'#8'TabOrder'#2#0#4'Left'#2'$'#6'Height'#2#25#3'Top'#2#20#5'Width'
+#3#28#1#0#0#11'TOpenDialog'#11'OpenDialog1'#5'Title'#6#18'Open existing file'
+#11'FilterIndex'#2#0#5'Title'#6#18'Open existing file'#4'left'#2#28#3'top'#2
+''#0#0#0
'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'b'#2#6'Height'#3','#1#3'Top'#3#247#0#5'Wi'
+'dth'#3#144#1#13'ActiveControl'#7#7'Button1'#7'Caption'#6#5'Form1'#12'Client'
+'Height'#3','#1#11'ClientWidth'#3#144#1#8'OnCreate'#7#10'FormCreate'#9'OnDes'
+'troy'#7#11'FormDestroy'#10'LCLVersion'#6#6'0.9.27'#0#6'TLabel'#6'Label1'#4
+'Left'#2']'#6'Height'#2#18#3'Top'#2'I'#5'Width'#2'n'#7'Caption'#6#16'Respons'
+'e is here'#11'ParentColor'#8#0#0#7'TButton'#7'Button1'#4'Left'#2'$'#6'Heigh'
+'t'#2#25#3'Top'#2#20#5'Width'#3#28#1#7'Caption'#6#19'Click to load a chm'#7
+'OnClick'#7#12'Button1Click'#8'TabOrder'#2#0#0#0#11'TOpenDialog'#11'OpenDial'
+'og1'#11'FilterIndex'#2#0#4'left'#2#28#3'top'#2''#0#0#0
]);

View File

@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, LHelpControl,
Buttons;
Buttons, StdCtrls;
type
@ -14,9 +14,11 @@ type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ private declarations }
public
@ -31,16 +33,38 @@ implementation
{ TForm1 }
function ResponseToString(Ares: TLHelpResponse): String;
begin
case Ares of
srNoAnswer: Result := 'NoAnswer';
srSuccess: Result := 'Success';
srInvalidFile:Result := 'InvalidFileName';
srInvalidURL:Result := 'InvalidURL';
srInvalidContext:Result := 'InvalidContext';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Res: TLHelpResponse;
begin
if not OpenDialog1.Execute then exit;
Help.StartHelpServer('letstestagain', '../lhelp/lhelp --display=192.168.0.250:0');
Help.OpenFile(OpenDialog1.FileName);
if Help.ServerRunning = false then
Help.StartHelpServer('letstestagain', '../lhelp/lhelp');
Res :=Help.OpenFile(OpenDialog1.FileName);
Label1.Caption := ResponseToString(Res);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Help := TLHelpConnection.Create;
Help.ProcessWhileWaiting := @Application.ProcessMessages;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Help.Free;
end;
initialization

View File

@ -55,15 +55,15 @@
</Unit2>
<Unit3>
<Filename Value="chmpopup.pas"/>
<ComponentName Value="HelpPopupForm"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="HelpPopupForm"/>
<UnitName Value="ChmPopup"/>
</Unit3>
<Unit4>
<Filename Value="lhelpcore.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="HelpForm"/>
<HasResources Value="True"/>
<IsPartOfProject Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="lhelpcore"/>
</Unit4>

View File

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

View File

@ -1,7 +1,7 @@
#define RT_MANIFEST 24
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2
#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3
#define RT_MANIFEST 24
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2
#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "lhelp.manifest"
MAINICON ICON "lhelp.ico"

View File

@ -1,439 +1,439 @@
object HelpForm: THelpForm
Left = 322
Height = 535
Top = 239
Width = 758
ActiveControl = Panel1
Caption = 'LHelp'
ClientHeight = 510
ClientWidth = 758
Icon.Data = {
7E04000000000100010010100000010020006804000016000000280000001000
0000200000000100200000000000000400006400000064000000000000000000
0000FFFFFF002775B87D4C81A7AE7498ADBD7699AEBD779AAFBD789BAFBD799C
B1BD7A9DB2BD7C9EB3BE7D9FB3BD7E9FB4BD80A1B5BD81A1B5BD5883A2AF205F
A1162364A6312C8AD2FCEFF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBCBCBFF5C8495EE1558
A30E2F74AF7C248BDBFFE3E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5D3D3FF598397E1326A
9D31306BA162108FFCFF1F8FE6FF3CA2D8FF42B0D9FF49BBD9FF4DC4D9FF51CA
DAFF56CCD9FF58CADAFF5AC6DAFF5BBFDAFF5CB7DAFF5EAEDBFF66A9D9FF3169
9D5827639F39148CF1FF0796EEFF11BBFDFF12D3FEFF18EBFEFF1FF5FFFF1CD4
FFFF20E0FFFF23F7FFFF1EF5FFFF17E8FEFF11CFFEFF0BB6FDFF47ACECFC1558
A30D1558A3131E8EE7FD08A1F2FF1DC7FEFF15DFFEFF1CF5FFFF16C1FFFF016A
FFFF0471FFFF22DFFFFF22F7FFFF1BF5FFFF14DBFEFF0DBFFEFF56ACDEE7FFFF
FF00FFFFFF002389DDF4069CF5FF26C2FDFF12D6FEFF13F2FEFF08CAFFFF0070
FFFF0176FFFF07E6FFFF10FAFFFF15ECFEFF12D2FEFF11BAFDFF5EA2D0BFFFFF
FF00FFFFFF002988D4E9028BF8FF2CB3FCFF08CFFEFF03F7FFFF01FEFFFF00CA
FFFF00E9FFFF00FFFFFF01FDFFFF05EFFFFF0AC0FDFF2CB0FCFF457EB073FFFF
FF00FFFFFF002C6EAB413087CCC22E9DDAD40BEAF6F301FDFEFE00FFFFFF0083
FFFF00D0FFFF00FFFFFF00FFFFFF04FAFDFC23D5EFEB4FA1D9D41D5DA115FFFF
FF00FFFFFF00FFFFFF0000FFFF0600FFFF4D00FFFFEA00FFFFFF00FFFFFF008D
FFFF008EFFFF00EFFFFF00FFFFFF00FFFFFC00FFFFCB00FFFF16FFFFFF00FFFF
FF00FFFFFF00FFFFFF0000FFFF0A00FFFF6E00FFFFF100FFFFFF00FFFFFF00E2
FFFF0078FFFF007FFFFF00DAFFFF00FFFFFF00FFFFE600FFFF2300FFFF02FFFF
FF00FFFFFF00FFFFFF0000FFFF0800FFFF5C00FFFFEE00FFFFFF00FFFFFF00FF
FFFF00C6FFFF006AFFFF0077FFFF00DBFFFE00FFFFDA00FFFF19FFFFFF00FFFF
FF00FFFFFF00FFFFFF0000FFFF0300FFFF3000F5FFDF008FFFFF00A0FFFF00FB
FFFF00F7FFFF007BFFFF0066FFFF00A3FFFC00FFFFA700FFFF10FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0000FFFF0E00FFFF7D008DFFF90066FFFF007B
FFFF0077FFFF0066FFFF0067FFFF00BCFFE700FFFF3D00FFFF05FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0000FFFF0100FFFF1700CDFF960088FFF6006B
FFFE0067FFFF007CFFFC0096FFE900F8FF5200FFFF0AFFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000FFFF0100FFFF0E00FDFF3100D2
FF7000C5FF8D00F3FF5100FFFF1F00FFFF0700FFFF01FFFFFF00FFFFFF00FFFF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000
}
Menu = MainMenu1
OnClose = FormClose
OnCreate = FormCreate
Position = poScreenCenter
ShowInTaskBar = stAlways
LCLVersion = '0.9.27'
object Panel1: TPanel
Left = 0
Height = 32
Top = 0
Width = 758
Align = alTop
ClientHeight = 32
ClientWidth = 758
TabOrder = 0
object ForwardBttn: TSpeedButton
Left = 65
Height = 30
Top = 1
Width = 32
Align = alLeft
Color = clBtnFace
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000000000000002
65000200000000000000000000000000000049332A0069463900694639003F2D
25001B531D000000000000000000000000000000000000000000000000005900
00000000000000000000000000004B342B0069463900EBB49200EBB492006946
390047332C000000000000000000000000000000000000000000DA0400000058
D800D447000000000000002EB70069463900EBB49200EBB49200EBB49200EBB4
920069463900000000000000000000000000000000000000000000A72A004B34
2B00694639006946390069463900EBB49200EBB49200EBB49200EBB492009898
98FF989898FF6946390069463900694639004B342B00000000004B342B006746
3A00FCE2D200EBB49200EBB49200EBB4920065606100EBB49200EBB492000000
00FF000000FF989898FFEBB49200EBB4920067463A004B342B004B342B006946
3900FDE6D800989898FF989898FF989898FF989898FF989898FF989898FF0000
00FFFBB276FF000000FF989898FFEBB49200694639004B342B00FC0400006946
3900000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FFF9B377FFF9B377FF000000FF989898FF69463900DD4D000000001B000000
FF00000000FFFAB780FFFAB47EFFFFB983FFFFBA7FFFFFB983FFFFC087FFFBB7
7CFFF3B379FFFFBD82FFFFC58BFF000000FF989898FF226C26000000FF00469E
4A00000000FFF6B27DFFFAB47EFFFFBE85FFFFC087FFFFBD82FFFFBD82FFF3B3
79FFF3B379FFFFC087FFFFCB93FFFFC790FF000000FFE81B00003AAC3D006946
3900000000FFF9B580FFFFB983FFFFBE85FFFFC087FFFFBE85FFFAB780FFFAB7
80FFFCBF87FFFFC890FFFFC790FF000000FF69463900000076004B342B006946
3900000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FFFFC087FFFFC790FF000000FFFDE6D800694639004B342B004B342B006746
3A00FDE6D800FDE6D800FDE6D800FDE6D800FDE6D800FDE6D800FDE6D8000000
00FFFFC790FF000000FFFDE6D800FDE6D800664539004B342B00000000009134
2B00694639006946390069463900F3C0A000FAE1D100FDE6D800FDE6D8000000
00FF000000FF6946390069463900694639004B342B00000000000000FF000000
0000000000003AB740000000000069463900FDE6D800FDE6D800FDE6D800FDE6
D8006946390047332C0084967E0000000000000000000000000008000000FFFF
FF00FFFFFF00FFFFFF00FFFFFF0091342A0069463900FDE6D800FDE6D8006946
390047332C003EAB440000000000000000000000000000000000A0CAB500985D
8B000000000000000000B07522006780280037221A005E392A00683B2C009129
1B000000000038AB3E000000000068BC74000000000000000000
}
NumGlyphs = 0
OnClick = ForwardToolBtnClick
end
object BackBttn: TSpeedButton
Left = 33
Height = 30
Top = 1
Width = 32
Align = alLeft
Color = clBtnFace
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000004A4E4C005357
5500535755005357550053575500535755005357550053575500535755005357
5500535755005357550053575500535755004A4E4C000000000053575500B5C5
C400B6C7C600B6C7C600B6C7C600B6C7C600B6C7C600B6C7C600B6C6C500B6C6
C500B5C6C500B5C6C500B5C6C500AFC0BF00535755000000000053575500BCCC
CB00A4BAB900A4BAB900A4BAB900989898FF989898FFA4BAB900A4BAB900A4BA
B900A4BAB900A4BAB900A4BAB900B5C7C600535755000000000053575500BFCE
CD00A4BAB900A4BAB900989898FF000000FF000000FF989898FFA4BAB900A4BA
B900A4BAB900A4BAB900A4BAB900BDCCCB00535755000000000053575500C0CE
CD00A4BAB900989898FF000000FFFBB276FF000000FF989898FF989898FF9898
98FF989898FF989898FF989898FF989898FF989898FF0000000053575500C1CF
CE00989898FF000000FFF9B378FFFBB276FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF989898FF00000000535755009898
98FF000000FFFFC68FFFFFBC81FFF6B479FFFBB77CFFFCBF87FFFFBA7FFFFFBC
81FFFFBA7FFFFAB77EFFF9B580FF000000FF989898FF00000000535755000000
00FFFFC690FFFFCB93FFFDC28AFFF5B378FFF5B378FFFFBC81FFFFBC81FFFFBF
86FFFCBF87FFFAB77EFFF6B27DFF000000FF989898FF0000000053575500CAD7
D600000000FFFFC690FFFFC68FFFFCBF87FFFAB77EFFFAB77EFFFCBF87FFFFBF
86FFFCBF87FFFFB983FFF9B580FF000000FF989898FF00000000535755006C70
6E00565A5800000000FFFFCB93FFFDC28AFF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF535755000000000053575500A6B8
B500788A8800788A8800000000FFFFC68FFF000000FF595D5B00565A5800565A
5800565A5800565A5800595D5B006C706E00535755000000000053575500A3B5
B3007E928F007E928F007E918F00000000FF000000FF93A4A20095A4A30096A5
A30096A5A30096A5A30096A5A300919F9D00535755000000000053575500AABD
BB00889D9A00879C9A00869B99009FB0AF005357550053575500535755005357
5500535755005357550053575500535755004A4E4C000000000053575500B2C3
C100B5C5C300B5C5C300B5C5C300ACBAB9005357550000000000000000000000
00000000000000000000000000000000000000000000000000005819D700985D
8B00000000000000000053575500535755005659580000000000000000000000
0000000000000000000000000000000000000000000000000000
}
NumGlyphs = 0
OnClick = BackToolBtnClick
end
object HomeBttn: TSpeedButton
Left = 1
Height = 30
Top = 1
Width = 32
Align = alLeft
Color = clBtnFace
Glyph.Data = {
36090000424D3609000000000000360000002800000018000000180000000100
2000000000000009000064000000640000000000000000000000E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00000000FF0000
00FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00000000FF000000FFE4E7EA00000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FFE4E7EA00000000FF000000FF0000
00FF000000FF000000FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA001C1C1CFF859D87FF7F9486FF859F8EFF859D87FF6784
6FFF57775FFF42634EFF374F3FFF2B3D31FF000000FF7F9486FF7B8F7FFF5E7B
67FF3F5646FF637767FF3B5242FF000000FFE4E7EA00E4E7EA00E4E7EA000000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FFE4E7EA00000000FFE4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FFA5A5A5FF08123DFF3753D7FF5A67
C7FF43539FFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9595
95FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00694639003F2D
2500E4E7EA00E4E7EA00E4E7EA00000000FFBFBFBFFF000000FF677FE7FF5A67
C7FF3D4E96FF000000FFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFF8C8C
8CFF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00000000FF000000FFEFEFEFFF000000FF96A7EFFF4B5E
CFFF3F4F97FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF
BFFF000000FFE4E7EA00E4E7EA00E4E7EA0049332A0069463900EBB49200EBB4
9200EBB4920069463900000000FF000000FFFFFFFFFF000000FF95A7EFFF3D56
CFFF161D37FF000000FFC6C6C6FF949494FF5F5F5FFF5F5F5FFF868686FF7B7B
7BFF000000FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA004B342B006746
3A00FCE2D200EBB49200000000FF858585FFFFFFFFFF000000FF96A7EFFF3B53
D6FF3F4F97FF000000FFFFFFFFFF000000FF000000FF000000FF000000FF0000
00FF6F6F6FFF000000FF69463900EBB49200EBB49200EBB4920031313100EBB4
920031313100EBB49200000000FFADADADFFFFFFFFFF000000FF8F9EEFFF6F84
DFFF43539FFF000000FFFFFFFFFF000000FFCECECEFFFFFFFFFFFFFFFFFF0000
00FF636363FF000000FFEBB49200EBB49200694639004B342B00E4E7EA00E4E7
EA0069463900FDE6D800000000FFD6D6D6FFFFFFFFFF000000FF000000FF0000
00FF000000FF000000FFFFFFFFFF000000FFBDBDBDFFFFFFFFFFFFFFFFFF0000
00FF6F6F6FFF000000FFFDE6D80031313100EBB4920031313100EFBFA1000000
00FF000000FF000000FF000000FFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF949494FFC7C7C7FFEFEFEFFF0000
00FF7F7F7FFF000000FF000000FF000000FF000000FFE4E7EA004B342B006946
3900000000FF232323FFAFAFAFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBF
BFFFBFBFBFFFBFBFBFFFBFBFBFFF000000FF000000FF000000FF000000FF0000
00FF949494FF6F6F6FFF252525FF000000FF31313100F9DBC900FDE6D800FDE6
D800F3C0A000000000FF1F1F1FFFC6C6C6FFC6C6C6FFCECECEFFFFFFFFFFAFAF
AFFFFFFFFFFFBFBFBFFFFFFFFFFFBFBFBFFFFFFFFFFFBDBDBDFFFFFFFFFFD7D7
D7FF7F7F7FFF1C1C1CFF000000FFFDE6D800664539004B342B00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00000000FF212121FF737373FFA7A7A7FFD6D6D6FF9E9E
9EFFFFFFFFFFBDBDBDFFFFFFFFFFBDBDBDFFFFFFFFFFBDBDBDFFFFFFFFFF6363
63FF1D1D1DFF000000FF69463900F3C0A000FAE1D100FDE6D800683B2C009129
1B00E4E7EA00E4E7EA00E4E7EA00000000FF232323FF525252FFB7B7B7FF9494
94FFD6D6D6FF9E9E9EFFFFFFFFFFBDBDBDFFFFFFFFFFBDBDBDFF878787FF1717
17FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FF000000FF1C1C1CFF464646FF6767
67FFBFBFBFFF7F7F7FFFD6D6D6FFBDBDBDFFFFFFFFFF4F4F4FFF272727FF0000
00FFE4E7EA00E4E7EA00E4E7EA00E4E7EA0037221A005E392A00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FF3D4F97FF000000FF232323FF3131
31FFA5A5A5FF676767FFADADADFFBDBDBDFF5A5A5AFF141414FF000000FFE4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FF3B4F94FF4356A5FF000000FF1818
18FF474747FF575757FF8D8D8DFF393939FF191919FF000000FFE4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FF5A67C7FF374B96FF000000FF0000
00FF2B2B2BFF333333FF353535FF252525FF000000FFE4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FF000000FF000000FF000000FFE4E7
EA00000000FF212121FF2D2D2DFF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00000000FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA005840D50060EE
7A000000000000000000E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00
}
NumGlyphs = 0
OnClick = HomeToolBtnClick
end
end
object PageControl: TPageControl
Left = 0
Height = 478
Top = 32
Width = 758
Align = alClient
TabOrder = 1
TabPosition = tpBottom
OnChange = PageControlChange
OnEnter = PageControlEnter
OnPageChanged = PageControlChange
end
object MainMenu1: TMainMenu
top = 124
object FileMenuItem: TMenuItem
Caption = '&File'
object FileMenuOpenItem: TMenuItem
Caption = '&Open...'
ShortCut = 16463
OnClick = FileMenuOpenItemClick
end
object FileMenuOpenURLItem: TMenuItem
Caption = 'Open &URL...'
OnClick = FileMenuOpenURLItemClick
end
object FileMenuCloseItem: TMenuItem
Caption = '&Close'
ShortCut = 16471
OnClick = FileMenuCloseItemClick
end
object FileSeperater: TMenuItem
Caption = '-'
end
object FileMenuExitItem: TMenuItem
Caption = 'E&xit'
OnClick = FileMenuExitItemClick
end
end
object ViewMenuItem: TMenuItem
Caption = '&View'
object ViewMenuContents: TMenuItem
Caption = 'Show contents'
Checked = True
ShortCut = 115
ShowAlwaysCheckable = True
OnClick = ViewMenuContentsClick
end
end
object HelpMenuItem: TMenuItem
Caption = '&Help'
object AboutItem: TMenuItem
Caption = '&About...'
OnClick = AboutItemClick
end
end
end
object OpenDialog1: TOpenDialog
Filter = 'HelpFiles(*.chm)|*.chm|All FIles(*.*)|*'
FilterIndex = 0
top = 156
end
object ImageList1: TImageList
left = 8
top = 80
Bitmap = {
4C690400000010000000100000007001E300B0CE2A000000000000000000F609
0200E1281B00005959000090AF00329FCCFF75888800003A3A00000E0E00FA11
0200FE1F0000000000000000000086180000FF3F000000000000000202006C54
2C002BD6D4FF0088FFFF006BFFFF0067FFFF007CFFFF0095FDFF00868A00B2E3
1400FFFF00000000000000000000C1E10000FFFF000000000000001B1B0009F7
BD00008DFFFF0066FFFF007BFFFF0077FFFF0066FFFF0067FFFF00BAFDFF0479
6B00F5470A000000000000000000FC0F0000FE1F0000000606000057570004F1
FBFF008FFFFF00A0FFFF00FBFFFF00F7FFFF007BFFFF0066FFFF00A3FFFF1EE1
E1FFDD2C1F0000000000000000000000000000000000001010000097970000FE
FEFF00FFFFFF00FFFFFF00FFFFFF00C6FFFF006AFFFF0077FFFF00DBFFFF00FA
FAFF00303000000000000000000000000000000000000014140000ADAD0000FE
FEFF00FFFFFF00FFFFFF00E2FFFF0078FFFF007FFFFF00DAFFFF00FFFFFF00FD
FDFF0041410000040400000000000000000000000000000C0C000083830000FD
FDFF00FFFFFF00FFFFFF008DFFFF008EFFFF00EFFFFF00FFFFFF00FFFFFF00F4
F4FF002A2A0000000000000000000000000013314D002E80C0FF2C99D4FF0AE9
F5FF01FDFEFF00FFFFFF0083FFFF00D0FFFF00FFFFFF00FFFFFF04FAFDFF23D3
EDFF4D9DD2FF040F190000000000000000002887D3FF028BF8FF2CB3FCFF08CF
FEFF03F7FFFF01FEFFFF00CAFFFF00E9FFFF00FFFFFF01FDFFFF05EFFFFF0AC0
FDFF2CB0FCFF30587A0000000000000000002289DCFF069CF5FF26C2FDFF12D6
FEFF13F2FEFF08CAFFFF0070FFFF0176FFFF07E6FFFF10FAFFFF15ECFEFF12D2
FEFF11BAFDFF5897C3FF00000000040D17001E8EE7FF08A1F2FF1DC7FEFF15DF
FEFF1CF5FFFF16C1FFFF016AFFFF0471FFFF22DFFFFF22F7FFFF1BF5FFFF14DB
FEFF0DBFFEFF55ABDCFF0000000010274000148CF1FF0796EEFF11BBFDFF12D3
FEFF18EBFEFF1FF5FFFF1CD4FFFF20E0FFFF23F7FFFF1EF5FFFF17E8FEFF11CF
FEFF0BB6FDFF47ACECFF020810001D426400108FFCFF1F8FE6FF3CA2D8FF42B0
D9FF49BBD9FF4DC4D9FF51CADAFF56CCD9FF58CADAFF5AC6DAFF5BBFDAFF5CB7
DAFF5EAEDBFF66A9D9FF1C3C590023558100248BDBFFE3E9E9FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFC5D3D3FF588295FF122436000D223A002C8AD2FFEFF2F2FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFBBCBCBFF5C8394FF020A1200000000001D568800457496FF6C8EA1FF6E8E
A2FF6F90A4FF7091A4FF7192A5FF7192A6FF7394A7FF7595A7FF7595A7FF7896
A9FF7996A9FF4F7692FF060F1B007001E300C819EE000000000000000000F708
0100EE1C0E0000313100005C70006F708D00AC575100001F1F0000070700FB10
0100FE1F0000000000000000000086180000FF3F000000000000000101007743
170069E296000083F600006BFE000067FF00037EFC000089E90000505200B9E2
0A00FFFF00000000000000000000C1E10000FFFF000000000000000E0E0011EF
7D000690F9000066FF00007BFF000077FF000066FF000067FF0000AAE700054F
3D00FA4305000000000000000000FC0F0000DA2619001F569DFF276CB7FF2C7D
C9FF2E78CEFF307DCEFF3489CFFF368ACEFF3A82CFFF3C7FD0FF4186D1FF4987
CBFF5563A2FF0000000000000000000000001D5198FF0B8CFCFF2E98F3FF0389
FDFF0798FDFF0CAAFDFF10B7FDFF12BCFDFF11B7FDFF0FAAFDFF0A98FDFF088C
FDFF4596E6FF0002060000000000000000002262B1FF0589FCFF339CF6FF0499
FDFF0BB5FDFF10CBFEFF0CACFEFF0895FFFF0AA2FEFF0FC4FEFF0AB3FDFF0397
FDFF3F99EDFF00142E000000000000000000236ABBFF0388FBFF37A4FBFF09AF
FDFF11CFFEFF12C9FEFF0992FFFF13BDFFFF0373FFFF0CA7FFFF11CDFEFF09AD
FDFF369FF8FF0D2B5D0000000000000000002571C6FF0187FBFF38AFFDFF0DBE
FEFF16E2FEFF1FF6FFFF27F8FFFF22D8FFFF0780FFFF1AE1FFFF16E0FEFF0DBC
FDFF2EA9FDFF1C4A8CFF00000000000000002577D0FF0086FAFF33B1FDFF0FC5
FEFF18EBFEFF22F6FFFF2DF9FFFF149DFFFF2AF1FFFF22F6FFFF18E9FEFF0EC3
FEFF1FA7FDFF3970B8FF0000000000000000237BD4FF0086FAFF2EACFDFF0EC2
FEFF17E7FEFF21F6FFFF2AF6FFFF1EC6FFFF28F4FFFF20F6FFFF17E4FEFF0DBF
FEFF0D9EFDFF4B89CFFF0000000002070C00217CD8FF0086F9FF26A1FDFF0BB5
FDFF13D7FEFF1BF5FFFF1DE3FFFF067FFFFF1BDBFFFF1AF3FEFF13D5FEFF0AB3
FDFF0290FDFF4E92DAFF00000000091624001F7EDDFF0086F9FF1E95FCFF06A1
FDFF0DBEFEFF13D7FEFF17E8FEFF19EEFEFF17E7FEFF13D6FEFF0DBDFDFF059F
FDFF0088FDFF4894E1FF01040800102B46001F82E1FF2589E6FF438AD4FF4189
D3FF4797D3FF4DA3D4FF50ABD5FF54AED6FF56ADD7FF57A8D7FF58A0D8FF5897
D8FF5A98D9FF508BCDFF0F284300133A64002A77CBFFC2C2D0FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD
FEFF8989A5FF32589DFF0A162000071322002468BCFF8E97B8FFCDCDD9FFCECE
DAFFD0D0DBFFD0D0DBFFD1D1DCFFD2D2DCFFD3D3DDFFD4D4DEFFD5D5DFFFD5D5
DFFF9292ACFF3E5C9BFF010509000000000012395F0025528D00335B9800325A
9800325A9900325A9900315A9900315A9900315B9900305B9900305B9900315B
9A00315A9A002C55860003080E007001E300703A46000000000000000000A3A9
A600A2A8A600A2A8A500A2A8A500798CA2002E5FAAFF2B2D2C00000000000000
000000000000000000000000000000000000959A9800EDEFEE00FFFFFF00FFFF
FF00FFFFFF00D9E2F200467CC6FF368FE4FF408FDEFFA6ACA9004E504F000000
000000000000000000000000000000000000A1A7A500FEFEFE00E9ECEB00D3DD
E300477CBEFF318CDFFF0F8FFCFF0088FDFF3C8CDDFFFDFDFD00B3B7B6004B4E
4D0000000000000000000000000000000000949FA300779FD500326DBAFF3298
D9FF1CBBFAFF0AB1FDFF059DFDFF0088FDFF3B8BDCFF77A5DA0079A5DA00608D
C20031538200000000000000000000000000446FAB002781D3FF1BBAF7FF12D3
FEFF0BA2FEFF0581FFFF0CBBFDFF0499FDFF3C8BDCFF0FA8FD000A98FB00088A
FB004292E1000003090000000000000000002B62B0FF12B0FDFF13D5FEFF0CA6
FFFF088DFFFF0688FFFF13D6FEFF09AEFDFF3986D8FF96A0B7FF96A0B7FF969F
B7FF969FB7FF395EA1FF00000000000000002B68B7FF13BCFDFF16E1FEFF0B95
FFFF1CC6FFFF1BD3FFFF18EAFEFF0DBDFDFF4990D2FFB6B6B6FFB6B6B6FFB6B6
B6FFBCBCBCFF5A71A3FF00000000000000002B6CBDFF12BFFDFF18E9FEFF27F6
FFFF1EB9FFFF29F8FFFF1AF2FEFF0EC3FEFF4A91D4FFC9C9C9FFC9C9C9FFC9C9
C9FFCACACAFF5E75A5FF00000000000000002A6FC2FF0FB9FDFF17E6FEFF23F6
FFFF1FCFFFFF25F7FFFF18ECFEFF0DBFFEFF4D90D2FFBABABAFFBABABAFFBABA
BAFFBFBFBFFF6278A8FF00000000000000002A73C6FF09ABFDFF12D3FEFF19EF
FEFF0889FFFF1CF5FFFF14D9FEFF0BB2FDFF508ED1FFB8B8B8FFB8B8B8FFB8B8
B8FFBEBEBEFF657BA9FF00000000000000002A76CCFF0396FDFF0CB9FDFF10CA
FEFF0FBBFEFF13D7FEFF28C1F9FF4D95D0FF959EAFFFB8B8B8FFB8B8B8FFB8B8
B8FFBFBFBFFF687DA9FF00000000000000002878CFFF0088FDFF049BFDFF0AB1
FDFF1FBDFAFF449FD7FF8B9FBDFFC8C8C9FFCBCBCBFFCBCBCBFFCBCBCBFFCBCB
CBFFCBCBCBFF6B7FABFF0000000000020600267BD4FF0088FDFF0C8CFBFF3489
D9FF819ABDFFB6B6B7FFB8B8B8FFB8B8B8FFB8B8B8FFB8B8B8FFB8B8B8FFB8B8
B8FFC0C0C0FF6E82ACFF00040A00000610001E79D8FF2380DEFF82A0C9FFE0E1
E3FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9
E9FFD2D2D8FF5E76A8FF00010100000001002555A8FFE7E8EEFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFA6A6BBFF435D9AFF0000000000000000233858004464A0FF6C82B2FF6B82
B2FF6A81B2FF6980B2FF687FB0FF687FB0FF677EB1FF647FB0FF647DB0FF637D
AFFF5E77ACFF294E8FFF00000000A803E3000051C8000000000000000000F708
0100EE1C0E0000313100005C7000626B9100535A9000001F1F0000070700FB10
0100FE1F0000000000000000000086180000FF3F0000006AC9FF0091EEFF0092
EEFF0084EAFF0084EAFF0092EEFF0084EAFF0084EAFF0080E2FF0068C00093CE
3400FFFF00000000000000000000C1E10000FFFF000000A7FEFFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFF5FDBFFFF0DACFFFF0081
E2FFBB523E000000000000000000FC0F0000EB230D0000A7FEFFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFF5BDAFFFF0FB3
FFFF0F78D300000000000000000000000000143C7300009BFEFFCDF1FFFFCDF1
FFFF81DAFFFF19B6FFFF00A2EEFF00A4F0FF23B9FFFFBEECFFFFCDF1FFFF5FDB
FFFF0083E8FF0002060000000000000000001E539B00009BFEFFCDF1FFFFCDF1
FFFF03AFFFFF009EE8FF6DD4FFFF6BD3FFFF009EE8FF17B5FFFFCDF1FFFFCDF1
FFFF0095F4FF30518C000000000000000000225DA900009BFEFFCDF1FFFFCDF1
FFFF009EE8FF03AFFFFFCDF1FFFFC7F0FFFF009EE8FF00A2EEFFCDF1FFFFCDF1
FFFF0098F8FF4E65940000000000000000002667B700009BFEFFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFFC9EFFFFF1BB7FFFF009EE8FF57CEFFFFCDF1FFFFCDF1
FFFF0095F4FF546C9C0000000000000000002871C5000098F8FFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFF21B8FFFF009EE8FF4BCAFFFFCDF1FFFFCDF1FFFFCDF1
FFFF0095F2FF5C75A70000000000000000002874C9000095F4FFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFF00A0EAFF009EE8FFC9EFFFFFCDF1FFFFCDF1FFFFCDF1
FFFF008DF0FF627DAD000000000002070C002877CE000095F2FFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1
FFFF0082E6FF6580AF0000000000091624002679D1000092EEFFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFF009EE8FF009EE8FFCDF1FFFFCDF1FFFFCDF1FFFFCDF1
FFFF0080E2FF6782B10001040800112A4200257BD6000083E8FFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFF009EE8FF009EE8FFCDF1FFFFCDF1FFFFCDF1FFFFCDF1
FFFF007CDCFF6B83AF0010263D0015395D001E79D7000080E2FFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1
FFFF027CDCFF5974A6000A151F00071321002458AB002F6EC4FF0761C8FF005D
C6FF005DC6FF005DC6FF005DC6FF005DC6FF005CC2FF005CC2FF005BC2FF075F
C4FF2560B6FF435F9B000105090000000000143D6B00385C9600627CAC00627C
AB00617BAC00607AAC005F79AA005F79AA005E79AB005C79AA005C78AA005C78
AA005A75AA003158930003080E00
}
end
end
object HelpForm: THelpForm
Left = 322
Height = 535
Top = 239
Width = 758
ActiveControl = Panel1
Caption = 'LHelp'
ClientHeight = 510
ClientWidth = 758
Icon.Data = {
7E04000000000100010010100000010020006804000016000000280000001000
0000200000000100200000000000000400006400000064000000000000000000
0000FFFFFF002775B87D4C81A7AE7498ADBD7699AEBD779AAFBD789BAFBD799C
B1BD7A9DB2BD7C9EB3BE7D9FB3BD7E9FB4BD80A1B5BD81A1B5BD5883A2AF205F
A1162364A6312C8AD2FCEFF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBCBCBFF5C8495EE1558
A30E2F74AF7C248BDBFFE3E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5D3D3FF598397E1326A
9D31306BA162108FFCFF1F8FE6FF3CA2D8FF42B0D9FF49BBD9FF4DC4D9FF51CA
DAFF56CCD9FF58CADAFF5AC6DAFF5BBFDAFF5CB7DAFF5EAEDBFF66A9D9FF3169
9D5827639F39148CF1FF0796EEFF11BBFDFF12D3FEFF18EBFEFF1FF5FFFF1CD4
FFFF20E0FFFF23F7FFFF1EF5FFFF17E8FEFF11CFFEFF0BB6FDFF47ACECFC1558
A30D1558A3131E8EE7FD08A1F2FF1DC7FEFF15DFFEFF1CF5FFFF16C1FFFF016A
FFFF0471FFFF22DFFFFF22F7FFFF1BF5FFFF14DBFEFF0DBFFEFF56ACDEE7FFFF
FF00FFFFFF002389DDF4069CF5FF26C2FDFF12D6FEFF13F2FEFF08CAFFFF0070
FFFF0176FFFF07E6FFFF10FAFFFF15ECFEFF12D2FEFF11BAFDFF5EA2D0BFFFFF
FF00FFFFFF002988D4E9028BF8FF2CB3FCFF08CFFEFF03F7FFFF01FEFFFF00CA
FFFF00E9FFFF00FFFFFF01FDFFFF05EFFFFF0AC0FDFF2CB0FCFF457EB073FFFF
FF00FFFFFF002C6EAB413087CCC22E9DDAD40BEAF6F301FDFEFE00FFFFFF0083
FFFF00D0FFFF00FFFFFF00FFFFFF04FAFDFC23D5EFEB4FA1D9D41D5DA115FFFF
FF00FFFFFF00FFFFFF0000FFFF0600FFFF4D00FFFFEA00FFFFFF00FFFFFF008D
FFFF008EFFFF00EFFFFF00FFFFFF00FFFFFC00FFFFCB00FFFF16FFFFFF00FFFF
FF00FFFFFF00FFFFFF0000FFFF0A00FFFF6E00FFFFF100FFFFFF00FFFFFF00E2
FFFF0078FFFF007FFFFF00DAFFFF00FFFFFF00FFFFE600FFFF2300FFFF02FFFF
FF00FFFFFF00FFFFFF0000FFFF0800FFFF5C00FFFFEE00FFFFFF00FFFFFF00FF
FFFF00C6FFFF006AFFFF0077FFFF00DBFFFE00FFFFDA00FFFF19FFFFFF00FFFF
FF00FFFFFF00FFFFFF0000FFFF0300FFFF3000F5FFDF008FFFFF00A0FFFF00FB
FFFF00F7FFFF007BFFFF0066FFFF00A3FFFC00FFFFA700FFFF10FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0000FFFF0E00FFFF7D008DFFF90066FFFF007B
FFFF0077FFFF0066FFFF0067FFFF00BCFFE700FFFF3D00FFFF05FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0000FFFF0100FFFF1700CDFF960088FFF6006B
FFFE0067FFFF007CFFFC0096FFE900F8FF5200FFFF0AFFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000FFFF0100FFFF0E00FDFF3100D2
FF7000C5FF8D00F3FF5100FFFF1F00FFFF0700FFFF01FFFFFF00FFFFFF00FFFF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000
}
Menu = MainMenu1
OnClose = FormClose
OnCreate = FormCreate
Position = poScreenCenter
ShowInTaskBar = stAlways
LCLVersion = '0.9.27'
object Panel1: TPanel
Left = 0
Height = 32
Top = 0
Width = 758
Align = alTop
ClientHeight = 32
ClientWidth = 758
TabOrder = 0
object ForwardBttn: TSpeedButton
Left = 65
Height = 30
Top = 1
Width = 32
Align = alLeft
Color = clBtnFace
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000000000000002
65000200000000000000000000000000000049332A0069463900694639003F2D
25001B531D000000000000000000000000000000000000000000000000005900
00000000000000000000000000004B342B0069463900EBB49200EBB492006946
390047332C000000000000000000000000000000000000000000DA0400000058
D800D447000000000000002EB70069463900EBB49200EBB49200EBB49200EBB4
920069463900000000000000000000000000000000000000000000A72A004B34
2B00694639006946390069463900EBB49200EBB49200EBB49200EBB492009898
98FF989898FF6946390069463900694639004B342B00000000004B342B006746
3A00FCE2D200EBB49200EBB49200EBB4920065606100EBB49200EBB492000000
00FF000000FF989898FFEBB49200EBB4920067463A004B342B004B342B006946
3900FDE6D800989898FF989898FF989898FF989898FF989898FF989898FF0000
00FFFBB276FF000000FF989898FFEBB49200694639004B342B00FC0400006946
3900000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FFF9B377FFF9B377FF000000FF989898FF69463900DD4D000000001B000000
FF00000000FFFAB780FFFAB47EFFFFB983FFFFBA7FFFFFB983FFFFC087FFFBB7
7CFFF3B379FFFFBD82FFFFC58BFF000000FF989898FF226C26000000FF00469E
4A00000000FFF6B27DFFFAB47EFFFFBE85FFFFC087FFFFBD82FFFFBD82FFF3B3
79FFF3B379FFFFC087FFFFCB93FFFFC790FF000000FFE81B00003AAC3D006946
3900000000FFF9B580FFFFB983FFFFBE85FFFFC087FFFFBE85FFFAB780FFFAB7
80FFFCBF87FFFFC890FFFFC790FF000000FF69463900000076004B342B006946
3900000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FFFFC087FFFFC790FF000000FFFDE6D800694639004B342B004B342B006746
3A00FDE6D800FDE6D800FDE6D800FDE6D800FDE6D800FDE6D800FDE6D8000000
00FFFFC790FF000000FFFDE6D800FDE6D800664539004B342B00000000009134
2B00694639006946390069463900F3C0A000FAE1D100FDE6D800FDE6D8000000
00FF000000FF6946390069463900694639004B342B00000000000000FF000000
0000000000003AB740000000000069463900FDE6D800FDE6D800FDE6D800FDE6
D8006946390047332C0084967E0000000000000000000000000008000000FFFF
FF00FFFFFF00FFFFFF00FFFFFF0091342A0069463900FDE6D800FDE6D8006946
390047332C003EAB440000000000000000000000000000000000A0CAB500985D
8B000000000000000000B07522006780280037221A005E392A00683B2C009129
1B000000000038AB3E000000000068BC74000000000000000000
}
NumGlyphs = 0
OnClick = ForwardToolBtnClick
end
object BackBttn: TSpeedButton
Left = 33
Height = 30
Top = 1
Width = 32
Align = alLeft
Color = clBtnFace
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000004A4E4C005357
5500535755005357550053575500535755005357550053575500535755005357
5500535755005357550053575500535755004A4E4C000000000053575500B5C5
C400B6C7C600B6C7C600B6C7C600B6C7C600B6C7C600B6C7C600B6C6C500B6C6
C500B5C6C500B5C6C500B5C6C500AFC0BF00535755000000000053575500BCCC
CB00A4BAB900A4BAB900A4BAB900989898FF989898FFA4BAB900A4BAB900A4BA
B900A4BAB900A4BAB900A4BAB900B5C7C600535755000000000053575500BFCE
CD00A4BAB900A4BAB900989898FF000000FF000000FF989898FFA4BAB900A4BA
B900A4BAB900A4BAB900A4BAB900BDCCCB00535755000000000053575500C0CE
CD00A4BAB900989898FF000000FFFBB276FF000000FF989898FF989898FF9898
98FF989898FF989898FF989898FF989898FF989898FF0000000053575500C1CF
CE00989898FF000000FFF9B378FFFBB276FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF989898FF00000000535755009898
98FF000000FFFFC68FFFFFBC81FFF6B479FFFBB77CFFFCBF87FFFFBA7FFFFFBC
81FFFFBA7FFFFAB77EFFF9B580FF000000FF989898FF00000000535755000000
00FFFFC690FFFFCB93FFFDC28AFFF5B378FFF5B378FFFFBC81FFFFBC81FFFFBF
86FFFCBF87FFFAB77EFFF6B27DFF000000FF989898FF0000000053575500CAD7
D600000000FFFFC690FFFFC68FFFFCBF87FFFAB77EFFFAB77EFFFCBF87FFFFBF
86FFFCBF87FFFFB983FFF9B580FF000000FF989898FF00000000535755006C70
6E00565A5800000000FFFFCB93FFFDC28AFF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF535755000000000053575500A6B8
B500788A8800788A8800000000FFFFC68FFF000000FF595D5B00565A5800565A
5800565A5800565A5800595D5B006C706E00535755000000000053575500A3B5
B3007E928F007E928F007E918F00000000FF000000FF93A4A20095A4A30096A5
A30096A5A30096A5A30096A5A300919F9D00535755000000000053575500AABD
BB00889D9A00879C9A00869B99009FB0AF005357550053575500535755005357
5500535755005357550053575500535755004A4E4C000000000053575500B2C3
C100B5C5C300B5C5C300B5C5C300ACBAB9005357550000000000000000000000
00000000000000000000000000000000000000000000000000005819D700985D
8B00000000000000000053575500535755005659580000000000000000000000
0000000000000000000000000000000000000000000000000000
}
NumGlyphs = 0
OnClick = BackToolBtnClick
end
object HomeBttn: TSpeedButton
Left = 1
Height = 30
Top = 1
Width = 32
Align = alLeft
Color = clBtnFace
Glyph.Data = {
36090000424D3609000000000000360000002800000018000000180000000100
2000000000000009000064000000640000000000000000000000E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00000000FF0000
00FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00000000FF000000FFE4E7EA00000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FFE4E7EA00000000FF000000FF0000
00FF000000FF000000FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA001C1C1CFF859D87FF7F9486FF859F8EFF859D87FF6784
6FFF57775FFF42634EFF374F3FFF2B3D31FF000000FF7F9486FF7B8F7FFF5E7B
67FF3F5646FF637767FF3B5242FF000000FFE4E7EA00E4E7EA00E4E7EA000000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FFE4E7EA00000000FFE4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FFA5A5A5FF08123DFF3753D7FF5A67
C7FF43539FFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9595
95FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00694639003F2D
2500E4E7EA00E4E7EA00E4E7EA00000000FFBFBFBFFF000000FF677FE7FF5A67
C7FF3D4E96FF000000FFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFF8C8C
8CFF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00000000FF000000FFEFEFEFFF000000FF96A7EFFF4B5E
CFFF3F4F97FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF
BFFF000000FFE4E7EA00E4E7EA00E4E7EA0049332A0069463900EBB49200EBB4
9200EBB4920069463900000000FF000000FFFFFFFFFF000000FF95A7EFFF3D56
CFFF161D37FF000000FFC6C6C6FF949494FF5F5F5FFF5F5F5FFF868686FF7B7B
7BFF000000FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA004B342B006746
3A00FCE2D200EBB49200000000FF858585FFFFFFFFFF000000FF96A7EFFF3B53
D6FF3F4F97FF000000FFFFFFFFFF000000FF000000FF000000FF000000FF0000
00FF6F6F6FFF000000FF69463900EBB49200EBB49200EBB4920031313100EBB4
920031313100EBB49200000000FFADADADFFFFFFFFFF000000FF8F9EEFFF6F84
DFFF43539FFF000000FFFFFFFFFF000000FFCECECEFFFFFFFFFFFFFFFFFF0000
00FF636363FF000000FFEBB49200EBB49200694639004B342B00E4E7EA00E4E7
EA0069463900FDE6D800000000FFD6D6D6FFFFFFFFFF000000FF000000FF0000
00FF000000FF000000FFFFFFFFFF000000FFBDBDBDFFFFFFFFFFFFFFFFFF0000
00FF6F6F6FFF000000FFFDE6D80031313100EBB4920031313100EFBFA1000000
00FF000000FF000000FF000000FFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF949494FFC7C7C7FFEFEFEFFF0000
00FF7F7F7FFF000000FF000000FF000000FF000000FFE4E7EA004B342B006946
3900000000FF232323FFAFAFAFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBF
BFFFBFBFBFFFBFBFBFFFBFBFBFFF000000FF000000FF000000FF000000FF0000
00FF949494FF6F6F6FFF252525FF000000FF31313100F9DBC900FDE6D800FDE6
D800F3C0A000000000FF1F1F1FFFC6C6C6FFC6C6C6FFCECECEFFFFFFFFFFAFAF
AFFFFFFFFFFFBFBFBFFFFFFFFFFFBFBFBFFFFFFFFFFFBDBDBDFFFFFFFFFFD7D7
D7FF7F7F7FFF1C1C1CFF000000FFFDE6D800664539004B342B00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00000000FF212121FF737373FFA7A7A7FFD6D6D6FF9E9E
9EFFFFFFFFFFBDBDBDFFFFFFFFFFBDBDBDFFFFFFFFFFBDBDBDFFFFFFFFFF6363
63FF1D1D1DFF000000FF69463900F3C0A000FAE1D100FDE6D800683B2C009129
1B00E4E7EA00E4E7EA00E4E7EA00000000FF232323FF525252FFB7B7B7FF9494
94FFD6D6D6FF9E9E9EFFFFFFFFFFBDBDBDFFFFFFFFFFBDBDBDFF878787FF1717
17FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FF000000FF1C1C1CFF464646FF6767
67FFBFBFBFFF7F7F7FFFD6D6D6FFBDBDBDFFFFFFFFFF4F4F4FFF272727FF0000
00FFE4E7EA00E4E7EA00E4E7EA00E4E7EA0037221A005E392A00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FF3D4F97FF000000FF232323FF3131
31FFA5A5A5FF676767FFADADADFFBDBDBDFF5A5A5AFF141414FF000000FFE4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FF3B4F94FF4356A5FF000000FF1818
18FF474747FF575757FF8D8D8DFF393939FF191919FF000000FFE4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FF5A67C7FF374B96FF000000FF0000
00FF2B2B2BFF333333FF353535FF252525FF000000FFE4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00000000FF000000FF000000FF000000FFE4E7
EA00000000FF212121FF2D2D2DFF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00000000FF000000FFE4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA005840D50060EE
7A000000000000000000E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7
EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00E4E7EA00
}
NumGlyphs = 0
OnClick = HomeToolBtnClick
end
end
object PageControl: TPageControl
Left = 0
Height = 478
Top = 32
Width = 758
Align = alClient
TabOrder = 1
TabPosition = tpBottom
OnChange = PageControlChange
OnEnter = PageControlEnter
OnPageChanged = PageControlChange
end
object MainMenu1: TMainMenu
top = 124
object FileMenuItem: TMenuItem
Caption = '&File'
object FileMenuOpenItem: TMenuItem
Caption = '&Open...'
ShortCut = 16463
OnClick = FileMenuOpenItemClick
end
object FileMenuOpenURLItem: TMenuItem
Caption = 'Open &URL...'
OnClick = FileMenuOpenURLItemClick
end
object FileMenuCloseItem: TMenuItem
Caption = '&Close'
ShortCut = 16471
OnClick = FileMenuCloseItemClick
end
object FileSeperater: TMenuItem
Caption = '-'
end
object FileMenuExitItem: TMenuItem
Caption = 'E&xit'
OnClick = FileMenuExitItemClick
end
end
object ViewMenuItem: TMenuItem
Caption = '&View'
object ViewMenuContents: TMenuItem
Caption = 'Show contents'
Checked = True
ShortCut = 115
ShowAlwaysCheckable = True
OnClick = ViewMenuContentsClick
end
end
object HelpMenuItem: TMenuItem
Caption = '&Help'
object AboutItem: TMenuItem
Caption = '&About...'
OnClick = AboutItemClick
end
end
end
object OpenDialog1: TOpenDialog
Filter = 'HelpFiles(*.chm)|*.chm|All FIles(*.*)|*'
FilterIndex = 0
top = 156
end
object ImageList1: TImageList
left = 8
top = 80
Bitmap = {
4C690400000010000000100000007001E300B0CE2A000000000000000000F609
0200E1281B00005959000090AF00329FCCFF75888800003A3A00000E0E00FA11
0200FE1F0000000000000000000086180000FF3F000000000000000202006C54
2C002BD6D4FF0088FFFF006BFFFF0067FFFF007CFFFF0095FDFF00868A00B2E3
1400FFFF00000000000000000000C1E10000FFFF000000000000001B1B0009F7
BD00008DFFFF0066FFFF007BFFFF0077FFFF0066FFFF0067FFFF00BAFDFF0479
6B00F5470A000000000000000000FC0F0000FE1F0000000606000057570004F1
FBFF008FFFFF00A0FFFF00FBFFFF00F7FFFF007BFFFF0066FFFF00A3FFFF1EE1
E1FFDD2C1F0000000000000000000000000000000000001010000097970000FE
FEFF00FFFFFF00FFFFFF00FFFFFF00C6FFFF006AFFFF0077FFFF00DBFFFF00FA
FAFF00303000000000000000000000000000000000000014140000ADAD0000FE
FEFF00FFFFFF00FFFFFF00E2FFFF0078FFFF007FFFFF00DAFFFF00FFFFFF00FD
FDFF0041410000040400000000000000000000000000000C0C000083830000FD
FDFF00FFFFFF00FFFFFF008DFFFF008EFFFF00EFFFFF00FFFFFF00FFFFFF00F4
F4FF002A2A0000000000000000000000000013314D002E80C0FF2C99D4FF0AE9
F5FF01FDFEFF00FFFFFF0083FFFF00D0FFFF00FFFFFF00FFFFFF04FAFDFF23D3
EDFF4D9DD2FF040F190000000000000000002887D3FF028BF8FF2CB3FCFF08CF
FEFF03F7FFFF01FEFFFF00CAFFFF00E9FFFF00FFFFFF01FDFFFF05EFFFFF0AC0
FDFF2CB0FCFF30587A0000000000000000002289DCFF069CF5FF26C2FDFF12D6
FEFF13F2FEFF08CAFFFF0070FFFF0176FFFF07E6FFFF10FAFFFF15ECFEFF12D2
FEFF11BAFDFF5897C3FF00000000040D17001E8EE7FF08A1F2FF1DC7FEFF15DF
FEFF1CF5FFFF16C1FFFF016AFFFF0471FFFF22DFFFFF22F7FFFF1BF5FFFF14DB
FEFF0DBFFEFF55ABDCFF0000000010274000148CF1FF0796EEFF11BBFDFF12D3
FEFF18EBFEFF1FF5FFFF1CD4FFFF20E0FFFF23F7FFFF1EF5FFFF17E8FEFF11CF
FEFF0BB6FDFF47ACECFF020810001D426400108FFCFF1F8FE6FF3CA2D8FF42B0
D9FF49BBD9FF4DC4D9FF51CADAFF56CCD9FF58CADAFF5AC6DAFF5BBFDAFF5CB7
DAFF5EAEDBFF66A9D9FF1C3C590023558100248BDBFFE3E9E9FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFC5D3D3FF588295FF122436000D223A002C8AD2FFEFF2F2FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFBBCBCBFF5C8394FF020A1200000000001D568800457496FF6C8EA1FF6E8E
A2FF6F90A4FF7091A4FF7192A5FF7192A6FF7394A7FF7595A7FF7595A7FF7896
A9FF7996A9FF4F7692FF060F1B007001E300C819EE000000000000000000F708
0100EE1C0E0000313100005C70006F708D00AC575100001F1F0000070700FB10
0100FE1F0000000000000000000086180000FF3F000000000000000101007743
170069E296000083F600006BFE000067FF00037EFC000089E90000505200B9E2
0A00FFFF00000000000000000000C1E10000FFFF000000000000000E0E0011EF
7D000690F9000066FF00007BFF000077FF000066FF000067FF0000AAE700054F
3D00FA4305000000000000000000FC0F0000DA2619001F569DFF276CB7FF2C7D
C9FF2E78CEFF307DCEFF3489CFFF368ACEFF3A82CFFF3C7FD0FF4186D1FF4987
CBFF5563A2FF0000000000000000000000001D5198FF0B8CFCFF2E98F3FF0389
FDFF0798FDFF0CAAFDFF10B7FDFF12BCFDFF11B7FDFF0FAAFDFF0A98FDFF088C
FDFF4596E6FF0002060000000000000000002262B1FF0589FCFF339CF6FF0499
FDFF0BB5FDFF10CBFEFF0CACFEFF0895FFFF0AA2FEFF0FC4FEFF0AB3FDFF0397
FDFF3F99EDFF00142E000000000000000000236ABBFF0388FBFF37A4FBFF09AF
FDFF11CFFEFF12C9FEFF0992FFFF13BDFFFF0373FFFF0CA7FFFF11CDFEFF09AD
FDFF369FF8FF0D2B5D0000000000000000002571C6FF0187FBFF38AFFDFF0DBE
FEFF16E2FEFF1FF6FFFF27F8FFFF22D8FFFF0780FFFF1AE1FFFF16E0FEFF0DBC
FDFF2EA9FDFF1C4A8CFF00000000000000002577D0FF0086FAFF33B1FDFF0FC5
FEFF18EBFEFF22F6FFFF2DF9FFFF149DFFFF2AF1FFFF22F6FFFF18E9FEFF0EC3
FEFF1FA7FDFF3970B8FF0000000000000000237BD4FF0086FAFF2EACFDFF0EC2
FEFF17E7FEFF21F6FFFF2AF6FFFF1EC6FFFF28F4FFFF20F6FFFF17E4FEFF0DBF
FEFF0D9EFDFF4B89CFFF0000000002070C00217CD8FF0086F9FF26A1FDFF0BB5
FDFF13D7FEFF1BF5FFFF1DE3FFFF067FFFFF1BDBFFFF1AF3FEFF13D5FEFF0AB3
FDFF0290FDFF4E92DAFF00000000091624001F7EDDFF0086F9FF1E95FCFF06A1
FDFF0DBEFEFF13D7FEFF17E8FEFF19EEFEFF17E7FEFF13D6FEFF0DBDFDFF059F
FDFF0088FDFF4894E1FF01040800102B46001F82E1FF2589E6FF438AD4FF4189
D3FF4797D3FF4DA3D4FF50ABD5FF54AED6FF56ADD7FF57A8D7FF58A0D8FF5897
D8FF5A98D9FF508BCDFF0F284300133A64002A77CBFFC2C2D0FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD
FEFF8989A5FF32589DFF0A162000071322002468BCFF8E97B8FFCDCDD9FFCECE
DAFFD0D0DBFFD0D0DBFFD1D1DCFFD2D2DCFFD3D3DDFFD4D4DEFFD5D5DFFFD5D5
DFFF9292ACFF3E5C9BFF010509000000000012395F0025528D00335B9800325A
9800325A9900325A9900315A9900315A9900315B9900305B9900305B9900315B
9A00315A9A002C55860003080E007001E300703A46000000000000000000A3A9
A600A2A8A600A2A8A500A2A8A500798CA2002E5FAAFF2B2D2C00000000000000
000000000000000000000000000000000000959A9800EDEFEE00FFFFFF00FFFF
FF00FFFFFF00D9E2F200467CC6FF368FE4FF408FDEFFA6ACA9004E504F000000
000000000000000000000000000000000000A1A7A500FEFEFE00E9ECEB00D3DD
E300477CBEFF318CDFFF0F8FFCFF0088FDFF3C8CDDFFFDFDFD00B3B7B6004B4E
4D0000000000000000000000000000000000949FA300779FD500326DBAFF3298
D9FF1CBBFAFF0AB1FDFF059DFDFF0088FDFF3B8BDCFF77A5DA0079A5DA00608D
C20031538200000000000000000000000000446FAB002781D3FF1BBAF7FF12D3
FEFF0BA2FEFF0581FFFF0CBBFDFF0499FDFF3C8BDCFF0FA8FD000A98FB00088A
FB004292E1000003090000000000000000002B62B0FF12B0FDFF13D5FEFF0CA6
FFFF088DFFFF0688FFFF13D6FEFF09AEFDFF3986D8FF96A0B7FF96A0B7FF969F
B7FF969FB7FF395EA1FF00000000000000002B68B7FF13BCFDFF16E1FEFF0B95
FFFF1CC6FFFF1BD3FFFF18EAFEFF0DBDFDFF4990D2FFB6B6B6FFB6B6B6FFB6B6
B6FFBCBCBCFF5A71A3FF00000000000000002B6CBDFF12BFFDFF18E9FEFF27F6
FFFF1EB9FFFF29F8FFFF1AF2FEFF0EC3FEFF4A91D4FFC9C9C9FFC9C9C9FFC9C9
C9FFCACACAFF5E75A5FF00000000000000002A6FC2FF0FB9FDFF17E6FEFF23F6
FFFF1FCFFFFF25F7FFFF18ECFEFF0DBFFEFF4D90D2FFBABABAFFBABABAFFBABA
BAFFBFBFBFFF6278A8FF00000000000000002A73C6FF09ABFDFF12D3FEFF19EF
FEFF0889FFFF1CF5FFFF14D9FEFF0BB2FDFF508ED1FFB8B8B8FFB8B8B8FFB8B8
B8FFBEBEBEFF657BA9FF00000000000000002A76CCFF0396FDFF0CB9FDFF10CA
FEFF0FBBFEFF13D7FEFF28C1F9FF4D95D0FF959EAFFFB8B8B8FFB8B8B8FFB8B8
B8FFBFBFBFFF687DA9FF00000000000000002878CFFF0088FDFF049BFDFF0AB1
FDFF1FBDFAFF449FD7FF8B9FBDFFC8C8C9FFCBCBCBFFCBCBCBFFCBCBCBFFCBCB
CBFFCBCBCBFF6B7FABFF0000000000020600267BD4FF0088FDFF0C8CFBFF3489
D9FF819ABDFFB6B6B7FFB8B8B8FFB8B8B8FFB8B8B8FFB8B8B8FFB8B8B8FFB8B8
B8FFC0C0C0FF6E82ACFF00040A00000610001E79D8FF2380DEFF82A0C9FFE0E1
E3FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9
E9FFD2D2D8FF5E76A8FF00010100000001002555A8FFE7E8EEFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFA6A6BBFF435D9AFF0000000000000000233858004464A0FF6C82B2FF6B82
B2FF6A81B2FF6980B2FF687FB0FF687FB0FF677EB1FF647FB0FF647DB0FF637D
AFFF5E77ACFF294E8FFF00000000A803E3000051C8000000000000000000F708
0100EE1C0E0000313100005C7000626B9100535A9000001F1F0000070700FB10
0100FE1F0000000000000000000086180000FF3F0000006AC9FF0091EEFF0092
EEFF0084EAFF0084EAFF0092EEFF0084EAFF0084EAFF0080E2FF0068C00093CE
3400FFFF00000000000000000000C1E10000FFFF000000A7FEFFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFF5FDBFFFF0DACFFFF0081
E2FFBB523E000000000000000000FC0F0000EB230D0000A7FEFFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFF5BDAFFFF0FB3
FFFF0F78D300000000000000000000000000143C7300009BFEFFCDF1FFFFCDF1
FFFF81DAFFFF19B6FFFF00A2EEFF00A4F0FF23B9FFFFBEECFFFFCDF1FFFF5FDB
FFFF0083E8FF0002060000000000000000001E539B00009BFEFFCDF1FFFFCDF1
FFFF03AFFFFF009EE8FF6DD4FFFF6BD3FFFF009EE8FF17B5FFFFCDF1FFFFCDF1
FFFF0095F4FF30518C000000000000000000225DA900009BFEFFCDF1FFFFCDF1
FFFF009EE8FF03AFFFFFCDF1FFFFC7F0FFFF009EE8FF00A2EEFFCDF1FFFFCDF1
FFFF0098F8FF4E65940000000000000000002667B700009BFEFFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFFC9EFFFFF1BB7FFFF009EE8FF57CEFFFFCDF1FFFFCDF1
FFFF0095F4FF546C9C0000000000000000002871C5000098F8FFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFF21B8FFFF009EE8FF4BCAFFFFCDF1FFFFCDF1FFFFCDF1
FFFF0095F2FF5C75A70000000000000000002874C9000095F4FFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFF00A0EAFF009EE8FFC9EFFFFFCDF1FFFFCDF1FFFFCDF1
FFFF008DF0FF627DAD000000000002070C002877CE000095F2FFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1
FFFF0082E6FF6580AF0000000000091624002679D1000092EEFFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFF009EE8FF009EE8FFCDF1FFFFCDF1FFFFCDF1FFFFCDF1
FFFF0080E2FF6782B10001040800112A4200257BD6000083E8FFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFF009EE8FF009EE8FFCDF1FFFFCDF1FFFFCDF1FFFFCDF1
FFFF007CDCFF6B83AF0010263D0015395D001E79D7000080E2FFCDF1FFFFCDF1
FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1FFFFCDF1
FFFF027CDCFF5974A6000A151F00071321002458AB002F6EC4FF0761C8FF005D
C6FF005DC6FF005DC6FF005DC6FF005DC6FF005CC2FF005CC2FF005BC2FF075F
C4FF2560B6FF435F9B000105090000000000143D6B00385C9600627CAC00627C
AB00617BAC00607AAC005F79AA005F79AA005E79AB005C79AA005C78AA005C78
AA005A75AA003158930003080E00
}
end
end

View File

@ -86,14 +86,16 @@ type
private
{ private declarations }
fServerName: String;
fServer: TSimpleIPCServer;
fInputIPC: TSimpleIPCServer;
fOutputIPC: TSimpleIPCClient;
fServerTimer: TTimer;
fContext: LongInt; // used once when we are started on the command line with --context
procedure SendResponse(Response: DWord);
procedure ServerMessage(Sender: TObject);
procedure ReadCommandLineOptions;
procedure StartServer(ServerName: String);
procedure StopServer;
procedure OpenURL(const AURL: String; AContext: THelpContext=-1);
function OpenURL(const AURL: String; AContext: THelpContext=-1): DWord;
procedure LateOpenURL(Url: PStringItem);
function ActivePage: TContentTab;
procedure RefreshState;
@ -231,6 +233,23 @@ begin
end;
end;
procedure THelpForm.SendResponse(Response: DWord);
var
Stream: TMemoryStream;
begin
fOutputIPC := TSimpleIPCClient.Create(nil);
fOutputIPC.ServerID := fServerName+'client';
fOutputIPC.Active := True;
Stream := TMemoryStream.Create;
Stream.WriteDWord(Response);
fOutputIPC.SendMessage(mtUnknown, Stream);
if fOutputIPC.Active then
fOutputIPC.Active := False;
FreeAndNil(fOutputIPC);
end;
procedure THelpForm.ServerMessage(Sender: TObject);
@ -239,30 +258,32 @@ var
FileReq:TFileRequest;
ConReq: TContextRequest;
Stream: TStream;
Res: LongWord;
begin
if fServer.PeekMessage(5, True) then begin
Stream := fServer.MsgData;
if fInputIPC.PeekMessage(5, True) then begin
Stream := fInputIPC.MsgData;
Stream.Position := 0;
Stream.Read(FileReq, SizeOf(FileReq));
case FileReq.RequestType of
rtFile : begin
OpenURL('file://'+FileReq.FileName);
Res := OpenURL('file://'+FileReq.FileName);
end;
rtUrl : begin
Stream.Position := 0;
Stream.Read(UrlReq, SizeOf(UrlReq));
if UrlReq.FileRequest.FileName <> '' then
OpenUrl('file://'+UrlReq.FileRequest.FileName+'://'+UrlReq.Url)
Res := OpenUrl('file://'+UrlReq.FileRequest.FileName+'://'+UrlReq.Url)
else
OpenURL(UrlReq.Url);
Res := OpenURL(UrlReq.Url);
end;
rtContext : begin
Stream.Position := 0;
Stream.Read(ConReq, SizeOf(ConReq));
OpenURL('file://'+FileReq.FileName, ConReq.HelpContext);
Res := OpenURL('file://'+FileReq.FileName, ConReq.HelpContext);
end;
end;
SendResponse(Res);
Self.SendToBack;
Self.BringToFront;
end;
end;
@ -314,27 +335,32 @@ end;
procedure THelpForm.StartServer(ServerName: String);
begin
fServer := TSimpleIPCServer.Create(nil);
fServer.ServerID := ServerName;
fServer.Global := True;
fServer.Active := True;
fInputIPC := TSimpleIPCServer.Create(nil);
fInputIPC.ServerID := ServerName;
fInputIPC.Global := True;
fInputIPC.Active := True;
fServerTimer := TTimer.Create(nil);
fServerTimer.OnTimer := @ServerMessage;
fServerTimer.Interval := 200;
fServerTimer.Enabled := True;
ServerMessage(nil);
end;
procedure THelpForm.StopServer;
begin
if fServer = nil then exit;
if fInputIPC = nil then
exit;
if fInputIPC.Active then
fInputIPC.Active := False;
FreeAndNil(fInputIPC);
FreeAndNil(fServerTimer);
if fServer.Active then fServer.Active := False;
FreeAndNil(fServer);
end;
procedure THelpForm.OpenURL(const AURL: String; AContext: THelpContext);
function THelpForm.OpenURL(const AURL: String; AContext: THelpContext): DWord;
function GetURLPrefix: String;
var
fPos: Integer;
@ -349,18 +375,20 @@ var
fNewPage: TContentTab;
I: Integer;
begin
Result := Ord(srUnknown);
fURLPrefix := GetURLPrefix;
fContentProvider := GetContentProvider(fURLPrefix);
if fContentProvider = nil then begin
ShowError('Cannot handle this type of content. "' + fURLPrefix + '"');
ShowError('Cannot handle this type of content. "' + fURLPrefix + '" for url:'+LineEnding+AURL);
Result := Ord(srInvalidFile);
Exit;
end;
fRealContentProvider := fContentProvider.GetProperContentProvider(AURL);
if fRealContentProvider = nil then begin
ShowError('Cannot handle this type of subcontent. "' + fURLPrefix + '"');
ShowError('Cannot handle this type of subcontent. "' + fURLPrefix + '" for url:'+LineEnding+AURL);
Result := Ord(srInvalidFile);
Exit;
end;
@ -368,7 +396,12 @@ begin
for I := 0 to PageControl.PageCount-1 do begin
if fRealContentProvider.ClassName = TContentTab(PageControl.Pages[I]).ContentProvider.ClassName then begin
if TContentTab(PageControl.Pages[I]).ContentProvider.LoadURL(AURL, AContext) then
begin
PageControl.ActivePage := PageControl.Pages[I];
Result := Ord(srSuccess);
end
else
Result := Ord(srInvalidFile);
Exit;
end;
end;
@ -381,7 +414,12 @@ begin
ShowOnTop;
if fNewPage.ContentProvider.LoadURL(AURL, AContext) then
begin
PageControl.ActivePage := fNewPage;
Result := Ord(srSuccess);
end
else
Result := Ord(srInvalidFile);
end;
procedure THelpForm.LateOpenURL ( Url: PStringItem ) ;

View File

@ -9,7 +9,9 @@ uses
type
TRequestType = (rtFile, rtUrl, rtContext);
TLHelpResponse = (srNoAnswer, srUnknown, srSuccess, srInvalidFile, srInvalidURL, srInvalidContext);
TFileRequest = record
RequestType: TRequestType;
FileName: array[0..512] of char;
@ -22,19 +24,29 @@ type
FileRequest: TFileRequest;
HelpContext: THelpContext;
end;
TProcedureOfObject = procedure of object;
{ TLHelpConnection }
TLHelpConnection = class(TObject)
private
fClient: TSimpleIPCClient;
FProcessWhileWaiting: TProcedureOfObject;
fServerOut: TSimpleIPCClient; // sends messages to lhelp
fServerIn: TSimpleIPCServer; // recieves messages from lhelp
function WaitForMsgResponse: TLHelpResponse;
function SendMessage(Stream: TStream): TLHelpResponse;
public
constructor Create;
destructor Destroy; override;
function ServerRunning: Boolean;
function StartHelpServer(NameForServer: String; ServerEXE: String = ''): Boolean;
procedure OpenURL(HelpFileName: String; Url: String);
procedure OpenContext(HelpFileName: String; Context: THelpContext);
procedure OpenFile(HelpFileName: String);
function OpenURL(HelpFileName: String; Url: String): TLHelpResponse;
function OpenContext(HelpFileName: String; Context: THelpContext): TLHelpResponse;
function OpenFile(HelpFileName: String): TLHelpResponse;
property ProcessWhileWaiting: TProcedureOfObject read FProcessWhileWaiting write FProcessWhileWaiting;
end;
@ -42,45 +54,87 @@ implementation
{ TLHelpConnection }
function TLHelpConnection.WaitForMsgResponse: TLHelpResponse;
var
I: Integer;
Stream: TStream;
WaitTime: Integer = 5000;
begin
Result := srNoAnswer;
while WaitTime >= 0 do
begin
Dec(WaitTime, 50);
if fServerIn.PeekMessage(50, True) then
begin
Stream := fServerIn.MsgData;
Stream.Position:=0;
Result := TLHelpResponse(Stream.ReadDWord);
Exit;
end;
if Assigned(FProcessWhileWaiting) then FProcessWhileWaiting();
end;
end;
function TLHelpConnection.SendMessage(Stream: TStream): TLHelpResponse;
begin
fServerOut.SendMessage(mtUnknown, Stream);
Result := WaitForMsgResponse;
end;
constructor TLHelpConnection.Create;
begin
fClient := TSimpleIPCClient.Create(nil);
fServerOut := TSimpleIPCClient.Create(nil);
fServerIn := TSimpleIPCServer.Create(nil);
end;
destructor TLHelpConnection.Destroy;
begin
if fCLient.Active then fClient.Active:=False;
fClient.Free;
if fServerOut.Active then
fServerOut.Active:=False;
if fServerIn.Active then
fServerIn.Active:=False;
fServerOut.Free;
fServerIn.Free;
inherited Destroy;
end;
function TLHelpConnection.ServerRunning: Boolean;
begin
Result := (fServerOut<>nil) and (fServerOut.Active);
end;
function TLHelpConnection.StartHelpServer(NameForServer: String;
ServerEXE: String): Boolean;
var
X: Integer;
begin
Result := False;
fClient.Active := False;
fClient.ServerID := NameForServer;
if not fClient.ServerRunning then begin
fServerIn.Active := False;
fServerIn.ServerID := NameForServer+'client';
fServerIn.Global := True;
fServerIn.Active := True;
fServerOut.Active := False;
fServerOut.ServerID := NameForServer;
if not fServerOut.ServerRunning then begin
with TProcessUTF8.Create(nil) do begin
CommandLine := ServerExe + ' --ipcname ' + NameForServer;
Execute;
end;
// give the server some time to get started
for X := 0 to 40 do begin
if not fClient.ServerRunning then Sleep(200);
if not fServerOut.ServerRunning then Sleep(200);
end;
end;
if fClient.ServerRunning then begin
fClient.Active := True;
if fServerOut.ServerRunning then begin
fServerOut.Active := True;
Result := True;
end;
end;
procedure TLHelpConnection.OpenURL(HelpFileName: String; Url: String);
function TLHelpConnection.OpenURL(HelpFileName: String; Url: String): TLHelpResponse;
var
UrlRequest: TUrlRequest;
Stream: TMemoryStream;
@ -90,12 +144,15 @@ begin
UrlRequest.FileRequest.RequestType := rtURL;
UrlRequest.Url := Url+#0;
Stream.Write(UrlRequest,SizeOf(UrlRequest));
fClient.SendMessage(mtUnknown, Stream);
Result := SendMessage(Stream);
// Do I need to free the stream?? the example doesn't
end;
procedure TLHelpConnection.OpenContext(HelpFileName: String;
Context: THelpContext);
function TLHelpConnection.OpenContext(HelpFileName: String;
Context: THelpContext) : TLHelpResponse;
var
ContextRequest: TContextRequest;
Stream: TMemoryStream;
@ -105,11 +162,11 @@ begin
ContextRequest.FileRequest.RequestType := rtContext;
ContextRequest.HelpContext := Context;
Stream.Write(ContextRequest, SizeOf(ContextRequest));
fClient.SendMessage(mtUnknown, Stream);
Result := SendMessage(Stream);
// Do I need to free the stream?? the example doesn't
end;
procedure TLHelpConnection.OpenFile(HelpFileName: String);
function TLHelpConnection.OpenFile(HelpFileName: String): TLHelpResponse;
var
FileRequest : TFileRequest;
Stream: TMemoryStream;
@ -118,7 +175,7 @@ begin
FileRequest.RequestType := rtFile;
FileRequest.FileName := HelpFileName+#0;
Stream.Write(FileRequest, SizeOf(FileRequest));
fClient.SendMessage(mtUnknown, Stream);
Result := SendMessage(Stream);
// Do I need to free the stream?? the example doesn't
end;

View File

@ -1,15 +1,12 @@
<?xml version="1.0"?>
<CONFIG>
<Package Version="2">
<Package Version="3">
<Name Value="ChmHelpPkg"/>
<CompilerOptions>
<Version Value="5"/>
<Version Value="8"/>
<SearchPaths>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<CodeGeneration>
<Generate Value="Faster"/>
</CodeGeneration>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
@ -23,20 +20,23 @@
</Item1>
</Files>
<Type Value="DesignTime"/>
<RequiredPkgs Count="4">
<RequiredPkgs Count="5">
<Item1>
<PackageName Value="CodeTools"/>
<PackageName Value="LCL"/>
</Item1>
<Item2>
<PackageName Value="lhelpcontrolpkg"/>
<PackageName Value="CodeTools"/>
</Item2>
<Item3>
<PackageName Value="IDEIntf"/>
<PackageName Value="lhelpcontrolpkg"/>
</Item3>
<Item4>
<PackageName Value="IDEIntf"/>
</Item4>
<Item5>
<PackageName Value="FCL"/>
<MinVersion Major="1" Valid="True"/>
</Item4>
</Item5>
</RequiredPkgs>
<UsageOptions>
<UnitPath Value="$(PkgOutDir)/"/>

View File

@ -24,7 +24,7 @@ interface
uses
Classes, SysUtils, FileUtil, LazHelpIntf, HelpIntfs, LazConfigStorage,
PropEdits, LHelpControl;
PropEdits, LHelpControl, Controls;
type
@ -36,10 +36,13 @@ type
fHelpLabel: String;
fHelpConnection: TLHelpConnection;
fChmsFilePath: String;
function GetHelpEXE: String;
protected
function GetFileNameAndURL(RawUrl: String; out FileName: String; out URL: String): Boolean;
procedure SetHelpEXE(AValue: String);
procedure SetHelpLabel(AValue: String);
function CheckBuildLHelp: Integer; // modal result
function GetLazBuildEXE(out ALazBuild: String): Boolean;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
@ -53,7 +56,7 @@ type
procedure Save(Storage: TConfigStorage); override;
function GetLocalizedName: string; override;
published
property HelpEXE: String read fHelpEXE write SetHelpEXE;
property HelpEXE: String read GetHelpEXE write SetHelpEXE;
property HelpLabel: String read fHelpLabel write SetHelpLabel;
property HelpFilesPath: String read fChmsFilePath write fChmsFilePath;
@ -62,9 +65,18 @@ type
procedure Register;
implementation
uses Process, MacroIntf, InterfaceBase, Forms, Dialogs, HelpFPDoc;
{ TChmHelpViewer }
function TChmHelpViewer.GetHelpEXE: String;
begin
if fHelpExe <> '' then
Exit(fHelpExe);
Result := '$(LazarusDir)/components/chmhelp/lhelp/lhelp$(ExeExt)';
if not IDEMacros.SubstituteMacros(Result) then
Exit('');
end;
function TChmHelpViewer.GetFileNameAndURL(RawUrl:String; out FileName: String; out URL: String
): Boolean;
@ -90,11 +102,82 @@ begin
fHelpLabel := AValue;
end;
function TChmHelpViewer.CheckBuildLHelp: Integer;
var
Proc: TProcess;
Lazbuild: String;
LHelpProject: String;
WS: String;
begin
Result := mrCancel;
if FileExistsUTF8(HelpExe) = True then
Exit(mrOK);
if not GetLazBuildEXE(Lazbuild) then
Exit;
LHelpProject := '$(LazarusDir)/components/chmhelp/lhelp/lhelp.lpi';
if not (IDEMacros.SubstituteMacros(LHelpProject)
and FileExistsUTF8(LHelpProject))
then
Exit;
WS := ' --ws='+LCLPlatformDirNames[WidgetSet.LCLPlatform]+' ';
Result := MessageDlg('The help viewer is not compiled yet. Try to compile it now?', mtConfirmation, mbYesNo ,0);
if Result <> mrYes then
Exit;
Proc := TProcess.Create(nil);
Proc.CommandLine := Lazbuild + WS + LHelpProject;
Proc.Options := [];
Proc.Execute;
while Proc.Running do begin
Application.HandleMessage;
end;
if Proc.ExitStatus = 0 then
Result := mrOK;
Proc.Free;
if Result = mrOK then
end;
function TChmHelpViewer.GetLazBuildEXE(out ALazBuild: String): Boolean;
var
LazBuildMacro: String;
begin
Result := False;
LazBuildMacro:= '$(LazarusDir)/$MakeExe(lazbuild)';
Result := IDEMacros.SubstituteMacros(LazBuildMacro)
and FileExistsUTF8(LazBuildMacro);
if Result then
ALazBuild := LazBuildMacro;
end;
constructor TChmHelpViewer.Create(TheOwner: TComponent);
var
i: Integer;
DB: TFPDocHTMLHelpDatabase;
BaseURL: THelpBaseURLObject;
begin
inherited Create(TheOwner);
fHelpConnection := TLHelpConnection.Create;
fHelpConnection.ProcessWhileWaiting:=@Application.ProcessMessages;
AddSupportedMimeType('text/html');
for i := 0 to HelpDatabases.Count-1 do begin
DB := TFPDocHTMLHelpDatabase(HelpDatabases.Items[i]);
BaseURL := THelpBaseURLObject(DB.BasePathObject);
if (DB.ID = 'RTLUnits') and (BaseURL.BaseURL = '') then
BaseURL.BaseURL := 'rtl.chm://'
else if (DB.ID = 'FCLUnits') and (BaseURL.BaseURL = '') then
BaseURL.BaseURL := 'fcl.chm://'
else if (DB.ID = 'LCLUnits') and (BaseURL.BaseURL = '') then
BaseURL.BaseURL := 'lcl.chm://';
end;
end;
destructor TChmHelpViewer.Destroy;
@ -118,20 +201,52 @@ function TChmHelpViewer.ShowNode(Node: THelpNode; var ErrMsg: string
var
FileName: String;
Url: String;
Res: TLHelpResponse;
DocsDir: String;
begin
Result:=shrNone;
if not FileExistsUTF8(fHelpEXE) then begin
ErrMsg := 'The program "' + fHelpEXE + '" doesn''t seem to exist!';
if CheckBuildLHelp <> mrOK then begin
ErrMsg := 'The program "' + HelpEXE + '" doesn''t seem to exist'+LineEnding+
'or could not be built!';
Exit(shrViewerNotFound);
end;
if not GetFileNameAndURL(Node.Url, FileName, Url) then begin
ErrMsg := 'Couldn''t read the file/URL correctly';
Exit(shrDatabaseNotFound);
end;
FileName := fChmsFilePath+FileName;
fHelpConnection.StartHelpServer(fHelpLabel, fHelpExe);
fHelpConnection.OpenURL(FileName, Url);
Result := shrSuccess;
if HelpFilesPath = '' then
begin
DocsDir := '$(LazarusDir)/docs/html/';
IDEMacros.SubstituteMacros(DocsDir);
if not FileExistsUTF8(DocsDir+FileName) then
begin
Result := shrDatabaseNotFound;
ErrMsg := FileName +' not found. Please put the chm help files in '+ LineEnding
+DocsDir+ LineEnding
+' or set the path to lcl.chm rtl.chm fcl.chm with "HelpFilesPath" in '
+' Environment Options -> Help -> Help Options ->'+LineEnding
+' under HelpViewers - CHMHelpViewer';
Exit;
end;
end
else
DocsDir := fChmsFilePath;
FileName := DocsDir+FileName;
fHelpConnection.StartHelpServer(fHelpLabel, HelpExe);
Res := fHelpConnection.OpenURL(FileName, Url);
case Res of
srSuccess: Result := shrSuccess;
srNoAnswer: Result := shrSuccess;
else
Result := shrNone;
ErrMsg := 'Unknown error showing '+URL;
end;
//WriteLn('LOADING URL = ', Node.URL);
end;