diff --git a/.gitattributes b/.gitattributes index d22c7fecab..d1c068eae9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/components/chmhelp/democontrol/project1.lpi b/components/chmhelp/democontrol/project1.lpi index 8b3167f0b9..7fe86246c2 100644 --- a/components/chmhelp/democontrol/project1.lpi +++ b/components/chmhelp/democontrol/project1.lpi @@ -2,15 +2,17 @@ - + + + + - @@ -19,7 +21,7 @@ - + @@ -38,9 +40,9 @@ - - + + diff --git a/components/chmhelp/democontrol/unit1.lfm b/components/chmhelp/democontrol/unit1.lfm index 7bd8bd9a8e..3861410469 100644 --- a/components/chmhelp/democontrol/unit1.lfm +++ b/components/chmhelp/democontrol/unit1.lfm @@ -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 diff --git a/components/chmhelp/democontrol/unit1.lrs b/components/chmhelp/democontrol/unit1.lrs index ecdc8575fe..af6076fffa 100644 --- a/components/chmhelp/democontrol/unit1.lrs +++ b/components/chmhelp/democontrol/unit1.lrs @@ -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 ]); diff --git a/components/chmhelp/democontrol/unit1.pas b/components/chmhelp/democontrol/unit1.pas index bd4373f93a..e6eaf27aa9 100644 --- a/components/chmhelp/democontrol/unit1.pas +++ b/components/chmhelp/democontrol/unit1.pas @@ -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 diff --git a/components/chmhelp/lhelp/lhelp.lpi b/components/chmhelp/lhelp/lhelp.lpi index 917e53d646..2080e93d4a 100644 --- a/components/chmhelp/lhelp/lhelp.lpi +++ b/components/chmhelp/lhelp/lhelp.lpi @@ -55,15 +55,15 @@ - + + - diff --git a/components/chmhelp/lhelp/lhelp.manifest b/components/chmhelp/lhelp/lhelp.manifest index 07fb6246b7..515fedeef9 100644 --- a/components/chmhelp/lhelp/lhelp.manifest +++ b/components/chmhelp/lhelp/lhelp.manifest @@ -1,17 +1,17 @@ - - - - Your application description here. - - - - - - - - - - - - + + + + Your application description here. + + + + + + + + + + + + \ No newline at end of file diff --git a/components/chmhelp/lhelp/lhelp.rc b/components/chmhelp/lhelp/lhelp.rc index 34bc9a44ab..453602b5ce 100644 --- a/components/chmhelp/lhelp/lhelp.rc +++ b/components/chmhelp/lhelp/lhelp.rc @@ -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" diff --git a/components/chmhelp/lhelp/lhelpcore.lfm b/components/chmhelp/lhelp/lhelpcore.lfm index ddcb4acda8..f9d3817808 100644 --- a/components/chmhelp/lhelp/lhelpcore.lfm +++ b/components/chmhelp/lhelp/lhelpcore.lfm @@ -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 diff --git a/components/chmhelp/lhelp/lhelpcore.pas b/components/chmhelp/lhelp/lhelpcore.pas index c66ceceb3c..68865f9187 100644 --- a/components/chmhelp/lhelp/lhelpcore.pas +++ b/components/chmhelp/lhelp/lhelpcore.pas @@ -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 ) ; diff --git a/components/chmhelp/packages/help/lhelpcontrol.pas b/components/chmhelp/packages/help/lhelpcontrol.pas index 93d771ecf2..492b7ceaab 100644 --- a/components/chmhelp/packages/help/lhelpcontrol.pas +++ b/components/chmhelp/packages/help/lhelpcontrol.pas @@ -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; diff --git a/components/chmhelp/packages/idehelp/chmhelppkg.lpk b/components/chmhelp/packages/idehelp/chmhelppkg.lpk index 4b6728949f..171b99e53e 100644 --- a/components/chmhelp/packages/idehelp/chmhelppkg.lpk +++ b/components/chmhelp/packages/idehelp/chmhelppkg.lpk @@ -1,15 +1,12 @@ - + - + - - - @@ -23,20 +20,23 @@ - + - + - + - + + + + - + diff --git a/components/chmhelp/packages/idehelp/lazchmhelp.pas b/components/chmhelp/packages/idehelp/lazchmhelp.pas index e9ece171c6..75d7cd41e3 100644 --- a/components/chmhelp/packages/idehelp/lazchmhelp.pas +++ b/components/chmhelp/packages/idehelp/lazchmhelp.pas @@ -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;