diff --git a/applications/fpbrowser/browsermodules.pas b/applications/fpbrowser/browsermodules.pas
new file mode 100644
index 000000000..44edf8619
--- /dev/null
+++ b/applications/fpbrowser/browsermodules.pas
@@ -0,0 +1,65 @@
+unit browsermodules;
+
+{$mode delphi}
+
+interface
+
+uses
+ Classes, SysUtils;
+
+type
+
+ { TBrowserModule }
+
+ TBrowserModule = class
+ public
+ ShortDescription: string;
+ Activated: Boolean;
+ constructor Create; virtual;
+ function HandleOnPageLoad(APage: TStream): string; virtual;
+ end;
+
+procedure RegisterBrowserModule(AModule: TBrowserModule);
+function GetBrowserModule(AIndex: Integer): TBrowserModule;
+function GetBrowserModuleCount(): Integer;
+
+implementation
+
+var
+ gBrowserModules: TList;
+
+procedure RegisterBrowserModule(AModule: TBrowserModule);
+begin
+ if AModule = nil then raise Exception.Create('[RegisterBrowserModule] Attempted to register a nil Module');
+ gBrowserModules.Add(AModule);
+end;
+
+function GetBrowserModule(AIndex: Integer): TBrowserModule;
+begin
+ if AIndex < 0 then Exit(nil);
+ Result := TBrowserModule(gBrowserModules.Items[AIndex]);
+end;
+
+function GetBrowserModuleCount: Integer;
+begin
+ Result := gBrowserModules.Count;
+end;
+
+{ TBrowserModule }
+
+constructor TBrowserModule.Create;
+begin
+
+end;
+
+function TBrowserModule.HandleOnPageLoad(APage: TStream): string;
+begin
+
+end;
+
+initialization
+ gBrowserModules := TList.Create;
+finalization
+ gBrowserModules.Free;
+end.
+
diff --git a/applications/fpbrowser/fpbrowser.dpr b/applications/fpbrowser/fpbrowser.dpr
index 9e389a081..efaff4e76 100644
--- a/applications/fpbrowser/fpbrowser.dpr
+++ b/applications/fpbrowser/fpbrowser.dpr
@@ -2,6 +2,9 @@ program fpbrowser;
{A program to demonstrate the ThtmlViewer component}
uses
+{$IFDEF UNIX}
+ cthreads,
+{$ENDIF}
{$IFDEF LCL}
Interfaces,
{$ENDIF}
@@ -15,7 +18,7 @@ uses
Gopage in 'Gopage.pas' {GoPageForm},
PrintStatusForm in 'PrintStatusForm.pas' {PrnStatusForm},
{$ENDIF}
- ImgForm in 'ImgForm.pas', pageloader {ImageForm};
+ ImgForm in 'ImgForm.pas', pageloader, browsermodules {ImageForm};
begin
Application.Initialize;
diff --git a/applications/fpbrowser/fpbrowser.lpi b/applications/fpbrowser/fpbrowser.lpi
index d364a29b0..bdc5964d1 100644
--- a/applications/fpbrowser/fpbrowser.lpi
+++ b/applications/fpbrowser/fpbrowser.lpi
@@ -45,7 +45,7 @@
-
+
@@ -82,6 +82,11 @@
+
+
+
+
+
diff --git a/applications/fpbrowser/mainform.lfm b/applications/fpbrowser/mainform.lfm
index 8a0a8fc8a..c51b81f5e 100644
--- a/applications/fpbrowser/mainform.lfm
+++ b/applications/fpbrowser/mainform.lfm
@@ -1,9 +1,9 @@
object formBrowser: TformBrowser
- Left = 372
+ Left = 327
Height = 439
- Top = 267
+ Top = 186
Width = 621
- ClientHeight = 419
+ ClientHeight = 439
ClientWidth = 621
Color = clBtnFace
Font.Color = clWindowText
@@ -18,7 +18,7 @@ object formBrowser: TformBrowser
object Panel1: TPanel
Left = 0
Height = 18
- Top = 401
+ Top = 421
Width = 621
Align = alBottom
Alignment = taLeftJustify
@@ -90,7 +90,7 @@ object formBrowser: TformBrowser
end
object pageBrowser: TPageControl
Left = 0
- Height = 368
+ Height = 388
Top = 33
Width = 621
ActivePage = tabBrowser
@@ -100,59 +100,18 @@ object formBrowser: TformBrowser
TabOrder = 2
object tabBrowser: TTabSheet
Caption = 'Browser'
- ClientHeight = 360
+ ClientHeight = 381
ClientWidth = 613
object Panel3: TPanel
Left = 0
- Height = 360
+ Height = 381
Top = 0
Width = 613
Align = alClient
BevelInner = bvLowered
BevelOuter = bvNone
Caption = 'Panel3'
- ClientHeight = 360
- ClientWidth = 613
TabOrder = 0
- object Viewer: THTMLViewer
- Left = 1
- Height = 358
- Top = 1
- Width = 611
- OnHotSpotCovered = HotSpotChange
- OnHotSpotClick = HotSpotClick
- OnImageRequest = ViewerImageRequest
- OnFormSubmit = SubmitEvent
- OnHistoryChange = HistoryChange
- OnProgress = ViewerProgress
- TabStop = True
- TabOrder = 0
- Align = alClient
- DefBackground = clWindow
- BorderStyle = htFocused
- HistoryMaxCount = 6
- DefFontName = 'Times New Roman'
- DefPreFontName = 'Courier New'
- DefFontColor = clWindowText
- DefOverLinkColor = clFuchsia
- ImageCacheCount = 6
- NoSelect = False
- CharSet = DEFAULT_CHARSET
- PrintMarginLeft = 2
- PrintMarginRight = 2
- PrintMarginTop = 2
- PrintMarginBottom = 2
- PrintScale = 1
- OnMouseMove = ViewerMouseMove
- OnProcessing = ProcessingHandler
- OnPrintHTMLHeader = ViewerPrintHTMLHeader
- OnPrintHTMLFooter = ViewerPrintHTMLFooter
- OnInclude = ViewerInclude
- OnSoundRequest = SoundRequest
- OnMetaRefresh = MetaRefreshEvent
- OnObjectClick = ObjectClick
- OnRightClick = RightClick
- end
end
end
object tabDebug: TTabSheet
diff --git a/applications/fpbrowser/mainform.lrs b/applications/fpbrowser/mainform.lrs
index 618149b75..df8b3f6ee 100644
--- a/applications/fpbrowser/mainform.lrs
+++ b/applications/fpbrowser/mainform.lrs
@@ -1,13 +1,13 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TformBrowser','FORMDATA',[
- 'TPF0'#12'TformBrowser'#11'formBrowser'#4'Left'#3't'#1#6'Height'#3#183#1#3'To'
- +'p'#3#11#1#5'Width'#3'm'#2#12'ClientHeight'#3#163#1#11'ClientWidth'#3'm'#2#5
+ 'TPF0'#12'TformBrowser'#11'formBrowser'#4'Left'#3'G'#1#6'Height'#3#183#1#3'To'
+ +'p'#3#186#0#5'Width'#3'm'#2#12'ClientHeight'#3#183#1#11'ClientWidth'#3'm'#2#5
+'Color'#7#9'clBtnFace'#10'Font.Color'#7#12'clWindowText'#11'Font.Height'#2
+#243#9'Font.Name'#6#5'Arial'#4'Menu'#7#8'MainMenu'#8'OnCreate'#7#10'FormCrea'
+'te'#9'OnDestroy'#7#11'FormDestroy'#6'OnShow'#7#8'FormShow'#8'Position'#7#14
+'poScreenCenter'#10'LCLVersion'#6#6'0.9.31'#0#6'TPanel'#6'Panel1'#4'Left'#2#0
- +#6'Height'#2#18#3'Top'#3#145#1#5'Width'#3'm'#2#5'Align'#7#8'alBottom'#9'Alig'
+ +#6'Height'#2#18#3'Top'#3#165#1#5'Width'#3'm'#2#5'Align'#7#8'alBottom'#9'Alig'
+'nment'#7#13'taLeftJustify'#10'BevelInner'#7#9'bvLowered'#10'BevelOuter'#7#6
+'bvNone'#12'ClientHeight'#2#18#11'ClientWidth'#3'm'#2#8'TabOrder'#2#0#0#12'T'
+'ProgressBar'#11'ProgressBar'#4'Left'#3#214#1#6'Height'#2#16#3'Top'#2#1#5'Wi'
@@ -23,75 +23,58 @@ LazarusResources.Add('TformBrowser','FORMDATA',[
+'Back'#7'Enabled'#8#7'OnClick'#7#12'FwdBackClick'#8'TabOrder'#2#1#0#0#7'TBut'
+'ton'#9'FwdButton'#4'Left'#3#128#0#6'Height'#2#24#3'Top'#2#4#5'Width'#2';'#7
+'Caption'#6#8'&Forward'#7'Enabled'#8#7'OnClick'#7#12'FwdBackClick'#8'TabOrde'
- +'r'#2#2#0#0#0#12'TPageControl'#11'pageBrowser'#4'Left'#2#0#6'Height'#3'p'#1#3
- +'Top'#2'!'#5'Width'#3'm'#2#10'ActivePage'#7#10'tabBrowser'#5'Align'#7#8'alCl'
- +'ient'#8'ShowTabs'#8#8'TabIndex'#2#0#8'TabOrder'#2#2#0#9'TTabSheet'#10'tabBr'
- +'owser'#7'Caption'#6#7'Browser'#12'ClientHeight'#3'h'#1#11'ClientWidth'#3'e'
- +#2#0#6'TPanel'#6'Panel3'#4'Left'#2#0#6'Height'#3'h'#1#3'Top'#2#0#5'Width'#3
- +'e'#2#5'Align'#7#8'alClient'#10'BevelInner'#7#9'bvLowered'#10'BevelOuter'#7#6
- +'bvNone'#7'Caption'#6#6'Panel3'#12'ClientHeight'#3'h'#1#11'ClientWidth'#3'e'
- +#2#8'TabOrder'#2#0#0#11'THTMLViewer'#6'Viewer'#4'Left'#2#1#6'Height'#3'f'#1#3
- +'Top'#2#1#5'Width'#3'c'#2#16'OnHotSpotCovered'#7#13'HotSpotChange'#14'OnHotS'
- +'potClick'#7#12'HotSpotClick'#14'OnImageRequest'#7#18'ViewerImageRequest'#12
- +'OnFormSubmit'#7#11'SubmitEvent'#15'OnHistoryChange'#7#13'HistoryChange'#10
- +'OnProgress'#7#14'ViewerProgress'#7'TabStop'#9#8'TabOrder'#2#0#5'Align'#7#8
- +'alClient'#13'DefBackground'#7#8'clWindow'#11'BorderStyle'#7#9'htFocused'#15
- +'HistoryMaxCount'#2#6#11'DefFontName'#6#15'Times New Roman'#14'DefPreFontNam'
- +'e'#6#11'Courier New'#12'DefFontColor'#7#12'clWindowText'#16'DefOverLinkColo'
- +'r'#7#9'clFuchsia'#15'ImageCacheCount'#2#6#8'NoSelect'#8#7'CharSet'#7#15'DEF'
- +'AULT_CHARSET'#15'PrintMarginLeft'#5#0#0#0#0#0#0#0#128#0'@'#16'PrintMarginRi'
- +'ght'#5#0#0#0#0#0#0#0#128#0'@'#14'PrintMarginTop'#5#0#0#0#0#0#0#0#128#0'@'#17
- +'PrintMarginBottom'#5#0#0#0#0#0#0#0#128#0'@'#10'PrintScale'#5#0#0#0#0#0#0#0
- +#128#255'?'#11'OnMouseMove'#7#15'ViewerMouseMove'#12'OnProcessing'#7#17'Proc'
- +'essingHandler'#17'OnPrintHTMLHeader'#7#21'ViewerPrintHTMLHeader'#17'OnPrint'
- +'HTMLFooter'#7#21'ViewerPrintHTMLFooter'#9'OnInclude'#7#13'ViewerInclude'#14
- +'OnSoundRequest'#7#12'SoundRequest'#13'OnMetaRefresh'#7#16'MetaRefreshEvent'
- +#13'OnObjectClick'#7#11'ObjectClick'#12'OnRightClick'#7#10'RightClick'#0#0#0
- +#0#9'TTabSheet'#8'tabDebug'#7'Caption'#6#5'Debug'#12'ClientHeight'#3'h'#1#11
- +'ClientWidth'#3'e'#2#0#5'TMemo'#9'memoDebug'#4'Left'#2#0#6'Height'#3'h'#1#3
- +'Top'#2#0#5'Width'#3'e'#2#5'Align'#7#8'alClient'#13'Lines.Strings'#1#6#9'mem'
- +'oDebug'#0#8'TabOrder'#2#0#0#0#0#9'TTabSheet'#9'tabSource'#7'Caption'#6#9'ta'
- +'bSource'#12'ClientHeight'#3'h'#1#11'ClientWidth'#3'e'#2#0#5'TMemo'#10'memoS'
- +'ource'#4'Left'#2#0#6'Height'#3'h'#1#3'Top'#2#0#5'Width'#3'e'#2#5'Align'#7#8
- +'alClient'#13'Lines.Strings'#1#6#10'memoSource'#0#8'TabOrder'#2#0#0#0#0#0#11
- +'TOpenDialog'#10'OpenDialog'#10'DefaultExt'#6#4'.htm'#6'Filter'#6'%html file'
- +'s|*.htm;*.html|all files|*.*'#7'Options'#11#14'ofHideReadOnly'#15'ofPathMus'
- +'tExist'#15'ofFileMustExist'#0#4'left'#3'I'#1#3'top'#2#2#0#0#9'TMainMenu'#8
- +'MainMenu'#4'left'#3'#'#1#3'top'#2#4#0#9'TMenuItem'#5'File1'#7'Caption'#6#5
- +'&File'#0#9'TMenuItem'#4'Open'#7'Caption'#6#5'&Open'#8'ShortCut'#2'r'#7'OnCl'
- +'ick'#7#13'OpenFileClick'#0#0#9'TMenuItem'#12'OpenTextFile'#7'Caption'#6#15
- +'Open &Text File'#7'OnClick'#7#17'OpenTextFileClick'#0#0#9'TMenuItem'#13'Ope'
- +'nImageFile'#7'Caption'#6#16'Open &Image File'#7'OnClick'#7#18'OpenImageFile'
- +'Click'#0#0#9'TMenuItem'#13'PrinterSetup1'#7'Caption'#6#16'Printer Setup...'
- +#7'OnClick'#7#18'PrinterSetup1Click'#0#0#9'TMenuItem'#12'Printpreview'#7'Cap'
- +'tion'#6#14'Print pre&view'#7'Enabled'#8#7'OnClick'#7#17'PrintpreviewClick'#0
- ,#0#9'TMenuItem'#6'Print1'#7'Caption'#6#9'&Print...'#7'Enabled'#8#7'OnClick'#7
- +#11'Print1Click'#0#0#9'TMenuItem'#2'N1'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#5
- +'Exit1'#7'Caption'#6#5'E&xit'#7'OnClick'#7#10'Exit1Click'#0#0#0#9'TMenuItem'
- +#5'Edit2'#7'Caption'#6#5'&Edit'#7'OnClick'#7#10'Edit2Click'#0#9'TMenuItem'#5
- +'Find1'#7'Caption'#6#5'&Find'#7'Enabled'#8#7'OnClick'#7#10'Find1Click'#0#0#9
- +'TMenuItem'#8'CopyItem'#7'Caption'#6#5'&Copy'#8'ShortCut'#3'C@'#7'OnClick'#7
- +#13'CopyItemClick'#0#0#9'TMenuItem'#2'N2'#7'Caption'#6#1'-'#0#0#9'TMenuItem'
- +#13'SelectAllItem'#7'Caption'#6#11'Select &All'#7'Enabled'#8#7'OnClick'#7#18
- +'SelectAllItemClick'#0#0#0#9'TMenuItem'#8'options1'#7'Caption'#6#6'&Tools'#0
- +#9'TMenuItem'#10'ShowImages'#7'Caption'#6#12'&Show images'#7'OnClick'#7#15'S'
- +'howImagesClick'#0#0#9'TMenuItem'#5'Fonts'#7'Caption'#6#23'Default &Font/Col'
- +'ors...'#7'OnClick'#7#15'FontColorsClick'#0#0#9'TMenuItem'#13'menuViewDebug'
- +#7'Caption'#6#26'View Source and Debug info'#7'OnClick'#7#18'menuViewDebugCl'
- +'ick'#0#0#0#9'TMenuItem'#15'HistoryMenuItem'#7'Caption'#6#8'&History'#7'Visi'
- +'ble'#8#0#0#9'TMenuItem'#6'About1'#7'Caption'#6#6'&About'#7'OnClick'#7#11'Ab'
- +'out1Click'#0#0#0#12'TPrintDialog'#11'PrintDialog'#8'FromPage'#2#1#7'MinPage'
- +#2#1#7'MaxPage'#3#15''''#7'Options'#11#10'poPageNums'#0#6'ToPage'#2#1#4'left'
- +#3'j'#1#3'top'#2#1#0#0#11'TFindDialog'#10'FindDialog'#7'Options'#11#6'frDown'
- +#15'frHideWholeWord'#18'frDisableWholeWord'#0#6'OnFind'#7#14'FindDialogFind'
- +#4'left'#3#248#0#3'top'#2#4#0#0#10'TPopupMenu'#9'PopupMenu'#4'left'#3#144#1#3
- +'top'#2#1#0#9'TMenuItem'#9'Viewimage'#7'Caption'#6#11'&View image'#7'OnClick'
- +#7#14'ViewimageClick'#0#0#9'TMenuItem'#20'CopyImageToClipboard'#7'Caption'#6
- +#24'&Copy image to clipboard'#7'OnClick'#7#25'CopyImageToClipboardClick'#0#0
- +#9'TMenuItem'#2'N3'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#15'OpenInNewWindow'#7
- +'Caption'#6#19'&Open in new window'#7'OnClick'#7#20'OpenInNewWindowClick'#0#0
- +#0#6'TTimer'#9'MetaTimer'#7'Enabled'#8#7'OnTimer'#7#14'MetaTimerTimer'#4'lef'
- +'t'#3#242#0#3'top'#2'K'#0#0#6'TTimer'#6'Timer1'#8'Interval'#3#200#0#7'OnTime'
- +'r'#7#11'Timer1Timer'#4'left'#3'#'#1#3'top'#2'G'#0#0#19'TPrinterSetupDialog'
- +#18'PrinterSetupDialog'#4'left'#3#192#1#0#0#0
+ +'r'#2#2#0#0#0#12'TPageControl'#11'pageBrowser'#4'Left'#2#0#6'Height'#3#132#1
+ +#3'Top'#2'!'#5'Width'#3'm'#2#10'ActivePage'#7#10'tabBrowser'#5'Align'#7#8'al'
+ +'Client'#8'ShowTabs'#8#8'TabIndex'#2#0#8'TabOrder'#2#2#0#9'TTabSheet'#10'tab'
+ +'Browser'#7'Caption'#6#7'Browser'#12'ClientHeight'#3'}'#1#11'ClientWidth'#3
+ +'e'#2#0#6'TPanel'#6'Panel3'#4'Left'#2#0#6'Height'#3'}'#1#3'Top'#2#0#5'Width'
+ +#3'e'#2#5'Align'#7#8'alClient'#10'BevelInner'#7#9'bvLowered'#10'BevelOuter'#7
+ +#6'bvNone'#7'Caption'#6#6'Panel3'#8'TabOrder'#2#0#0#0#0#9'TTabSheet'#8'tabDe'
+ +'bug'#7'Caption'#6#5'Debug'#12'ClientHeight'#3'h'#1#11'ClientWidth'#3'e'#2#0
+ +#5'TMemo'#9'memoDebug'#4'Left'#2#0#6'Height'#3'h'#1#3'Top'#2#0#5'Width'#3'e'
+ +#2#5'Align'#7#8'alClient'#13'Lines.Strings'#1#6#9'memoDebug'#0#8'TabOrder'#2
+ +#0#0#0#0#9'TTabSheet'#9'tabSource'#7'Caption'#6#9'tabSource'#12'ClientHeight'
+ +#3'h'#1#11'ClientWidth'#3'e'#2#0#5'TMemo'#10'memoSource'#4'Left'#2#0#6'Heigh'
+ +'t'#3'h'#1#3'Top'#2#0#5'Width'#3'e'#2#5'Align'#7#8'alClient'#13'Lines.String'
+ +'s'#1#6#10'memoSource'#0#8'TabOrder'#2#0#0#0#0#0#11'TOpenDialog'#10'OpenDial'
+ +'og'#10'DefaultExt'#6#4'.htm'#6'Filter'#6'%html files|*.htm;*.html|all files'
+ +'|*.*'#7'Options'#11#14'ofHideReadOnly'#15'ofPathMustExist'#15'ofFileMustExi'
+ +'st'#0#4'left'#3'I'#1#3'top'#2#2#0#0#9'TMainMenu'#8'MainMenu'#4'left'#3'#'#1
+ +#3'top'#2#4#0#9'TMenuItem'#5'File1'#7'Caption'#6#5'&File'#0#9'TMenuItem'#4'O'
+ +'pen'#7'Caption'#6#5'&Open'#8'ShortCut'#2'r'#7'OnClick'#7#13'OpenFileClick'#0
+ +#0#9'TMenuItem'#12'OpenTextFile'#7'Caption'#6#15'Open &Text File'#7'OnClick'
+ +#7#17'OpenTextFileClick'#0#0#9'TMenuItem'#13'OpenImageFile'#7'Caption'#6#16
+ +'Open &Image File'#7'OnClick'#7#18'OpenImageFileClick'#0#0#9'TMenuItem'#13'P'
+ +'rinterSetup1'#7'Caption'#6#16'Printer Setup...'#7'OnClick'#7#18'PrinterSetu'
+ +'p1Click'#0#0#9'TMenuItem'#12'Printpreview'#7'Caption'#6#14'Print pre&view'#7
+ +'Enabled'#8#7'OnClick'#7#17'PrintpreviewClick'#0#0#9'TMenuItem'#6'Print1'#7
+ +'Caption'#6#9'&Print...'#7'Enabled'#8#7'OnClick'#7#11'Print1Click'#0#0#9'TMe'
+ +'nuItem'#2'N1'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#5'Exit1'#7'Caption'#6#5'E&'
+ +'xit'#7'OnClick'#7#10'Exit1Click'#0#0#0#9'TMenuItem'#5'Edit2'#7'Caption'#6#5
+ +'&Edit'#7'OnClick'#7#10'Edit2Click'#0#9'TMenuItem'#5'Find1'#7'Caption'#6#5'&'
+ +'Find'#7'Enabled'#8#7'OnClick'#7#10'Find1Click'#0#0#9'TMenuItem'#8'CopyItem'
+ +#7'Caption'#6#5'&Copy'#8'ShortCut'#3'C@'#7'OnClick'#7#13'CopyItemClick'#0#0#9
+ +'TMenuItem'#2'N2'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#13'SelectAllItem'#7'Cap'
+ +'tion'#6#11'Select &All'#7'Enabled'#8#7'OnClick'#7#18'SelectAllItemClick'#0#0
+ +#0#9'TMenuItem'#8'options1'#7'Caption'#6#6'&Tools'#0#9'TMenuItem'#10'ShowIma'
+ +'ges'#7'Caption'#6#12'&Show images'#7'OnClick'#7#15'ShowImagesClick'#0#0#9'T'
+ +'MenuItem'#5'Fonts'#7'Caption'#6#23'Default &Font/Colors...'#7'OnClick'#7#15
+ +'FontColorsClick'#0#0#9'TMenuItem'#13'menuViewDebug'#7'Caption'#6#26'View So'
+ +'urce and Debug info'#7'OnClick'#7#18'menuViewDebugClick'#0#0#0#9'TMenuItem'
+ +#15'HistoryMenuItem'#7'Caption'#6#8'&History'#7'Visible'#8#0#0#9'TMenuItem'#6
+ +'About1'#7'Caption'#6#6'&About'#7'OnClick'#7#11'About1Click'#0#0#0#12'TPrint'
+ +'Dialog'#11'PrintDialog'#8'FromPage'#2#1#7'MinPage'#2#1#7'MaxPage'#3#15''''#7
+ +'Options'#11#10'poPageNums'#0#6'ToPage'#2#1#4'left'#3'j'#1#3'top'#2#1#0#0#11
+ ,'TFindDialog'#10'FindDialog'#7'Options'#11#6'frDown'#15'frHideWholeWord'#18
+ +'frDisableWholeWord'#0#6'OnFind'#7#14'FindDialogFind'#4'left'#3#248#0#3'top'
+ +#2#4#0#0#10'TPopupMenu'#9'PopupMenu'#4'left'#3#144#1#3'top'#2#1#0#9'TMenuIte'
+ +'m'#9'Viewimage'#7'Caption'#6#11'&View image'#7'OnClick'#7#14'ViewimageClick'
+ +#0#0#9'TMenuItem'#20'CopyImageToClipboard'#7'Caption'#6#24'&Copy image to cl'
+ +'ipboard'#7'OnClick'#7#25'CopyImageToClipboardClick'#0#0#9'TMenuItem'#2'N3'#7
+ +'Caption'#6#1'-'#0#0#9'TMenuItem'#15'OpenInNewWindow'#7'Caption'#6#19'&Open '
+ +'in new window'#7'OnClick'#7#20'OpenInNewWindowClick'#0#0#0#6'TTimer'#9'Meta'
+ +'Timer'#7'Enabled'#8#7'OnTimer'#7#14'MetaTimerTimer'#4'left'#3#242#0#3'top'#2
+ +'K'#0#0#6'TTimer'#6'Timer1'#8'Interval'#3#200#0#7'OnTimer'#7#11'Timer1Timer'
+ +#4'left'#3'#'#1#3'top'#2'G'#0#0#19'TPrinterSetupDialog'#18'PrinterSetupDialo'
+ +'g'#4'left'#3#192#1#0#0#0
]);
diff --git a/applications/fpbrowser/mainform.pas b/applications/fpbrowser/mainform.pas
index 5cedea5d3..bbd1e140e 100644
--- a/applications/fpbrowser/mainform.pas
+++ b/applications/fpbrowser/mainform.pas
@@ -23,12 +23,12 @@ uses
Forms, Dialogs, ExtCtrls, Menus, Htmlview, StdCtrls,
Clipbrd, HTMLsubs, {$IFDEF MSWINDOWS} ShellAPI, {$ELSE} Unix, {$ENDIF}
{$IFDEF LCL} PrintersDlgs, {$ENDIF}
- {$ifdef UseXpMan} XpMan, {$endif} {$IFNDEF LCL} Gauges, {$ENDIF} ComCtrls;
+ {$ifdef UseXpMan} XpMan, {$endif} {$IFNDEF LCL} Gauges, {$ENDIF} ComCtrls,
+ pageloader;
const
MaxHistories = 6; {size of History list}
type
-
{ TformBrowser }
TformBrowser = class(TForm)
@@ -63,15 +63,11 @@ type
SelectAllItem: TMenuItem;
OpenTextFile: TMenuItem;
OpenImageFile: TMenuItem;
-{$IFNDEF LCL}
- MediaPlayer: TMediaPlayer;
-{$ENDIF}
PopupMenu: TPopupMenu;
CopyImageToClipboard: TMenuItem;
tabBrowser: TTabSheet;
tabDebug: TTabSheet;
tabSource: TTabSheet;
- Viewer: THTMLViewer;
Viewimage: TMenuItem;
N3: TMenuItem;
OpenInNewWindow: TMenuItem;
@@ -152,7 +148,9 @@ type
TimerCount: integer;
OldTitle: string;
HintWindow: THintWindow;
- HintVisible: boolean;
+ HintVisible: boolean;
+ //
+ Viewer: THTMLViewer;
{$IFNDEF LCL}
procedure wmDropFiles(var Message: TMessage); message wm_DropFiles;
@@ -163,7 +161,11 @@ type
procedure CloseAll;
public
{ Public declarations }
+ MyPageLoaderThread: TPageLoaderThread;
+ MyPageLoader: TPageLoader;
procedure LoadURL(AURL: string);
+ procedure HandlePageLoaderProgress(APercent: Integer);
+ procedure HandlePageLoaderTerminated(APageLoader: TPageLoader);
end;
var
@@ -172,7 +174,7 @@ var
implementation
uses
- pageloader, {$IFNDEF LCL} PreviewForm, {$ENDIF} HTMLun2, HTMLabt, Submit, ImgForm, FontDlg;
+ {$IFNDEF LCL} PreviewForm, {$ENDIF} HTMLun2, HTMLabt, Submit, ImgForm, FontDlg;
{$IFNDEF LCL}
{$R *.DFM}
@@ -182,6 +184,48 @@ procedure TformBrowser.FormCreate(Sender: TObject);
var
I: integer;
begin
+ MyPageLoader := TPageLoader.Create;
+
+ Viewer := THTMLViewer.Create(Self);
+ Viewer.Left := 1;
+ Viewer.Height := 358;
+ Viewer.Top := 1;
+ Viewer.Width := 611;
+ Viewer.OnHotSpotCovered := HotSpotChange;
+ Viewer.OnHotSpotClick := HotSpotClick;
+ Viewer.OnImageRequest := ViewerImageRequest;
+ Viewer.OnFormSubmit := SubmitEvent;
+ Viewer.OnHistoryChange := HistoryChange;
+ Viewer.OnProgress := ViewerProgress;
+ Viewer.TabStop := True;
+ Viewer.TabOrder := 0;
+ Viewer.Align := alClient;
+ Viewer.DefBackground := clWindow;
+ Viewer.BorderStyle := htFocused;
+ Viewer.HistoryMaxCount := 6;
+ Viewer.DefFontName := 'Times New Roman';
+ Viewer.DefPreFontName := 'Courier New';
+ Viewer.DefFontColor := clWindowText;
+ Viewer.DefOverLinkColor := clFuchsia;
+ Viewer.ImageCacheCount := 6;
+ Viewer.NoSelect := False;
+ Viewer.CharSet := DEFAULT_CHARSET;
+ Viewer.PrintMarginLeft := 2;
+ Viewer.PrintMarginRight := 2;
+ Viewer.PrintMarginTop := 2;
+ Viewer.PrintMarginBottom := 2;
+ Viewer.PrintScale := 1;
+ Viewer.OnMouseMove := ViewerMouseMove;
+ Viewer.OnProcessing := ProcessingHandler;
+ Viewer.OnPrintHTMLHeader := ViewerPrintHTMLHeader;
+ Viewer.OnPrintHTMLFooter := ViewerPrintHTMLFooter;
+ Viewer.OnInclude := ViewerInclude;
+ Viewer.OnSoundRequest := SoundRequest;
+ Viewer.OnMetaRefresh := MetaRefreshEvent;
+ Viewer.OnObjectClick := ObjectClick;
+ Viewer.OnRightClick := RightClick;
+ Viewer.Parent := Panel3;
+
{$IFNDEF LCL}
if Screen.Width <= 640 then
Position := poDefault; {keeps form on screen better}
@@ -848,6 +892,7 @@ end;
procedure TformBrowser.FormDestroy(Sender: TObject);
begin
HintWindow.Free;
+ MyPageLoader.Free;
end;
procedure TformBrowser.RightClick(Sender: TObject; Parameters: TRightClickParameters);
@@ -993,15 +1038,30 @@ end;
procedure TformBrowser.LoadURL(AURL: string);
begin
- MyPageLoader.LoadFromURL(AURL);
- Viewer.LoadFromString(MyPageLoader.Contents);
+ MyPageLoaderThread := TPageLoaderThread.Create(True);
+ MyPageLoaderThread.URL := AURL;
+ MyPageLoaderThread.PageLoader := MyPageLoader;
+ MyPageLoaderThread.OnPageLoadProgress := HandlePageLoaderProgress;
+ MyPageLoaderThread.OnPageLoadTerminated := HandlePageLoaderTerminated;
+ MyPageLoaderThread.FreeOnTerminate := True;
+ MyPageLoaderThread.Resume;
+end;
+
+procedure TformBrowser.HandlePageLoaderProgress(APercent: Integer);
+begin
+
+end;
+
+procedure TformBrowser.HandlePageLoaderTerminated(APageLoader: TPageLoader);
+begin
+ Viewer.LoadFromString(APageLoader.Contents);
Caption := Viewer.DocumentTitle;
// Load source and debug info
memoSource.Lines.Clear();
- memoSource.Lines.AddStrings(MyPageLoader.ContentsList);
+ memoSource.Lines.AddStrings(APageLoader.ContentsList);
memoDebug.Lines.Clear();
- memoDebug.Lines.AddStrings(MyPageLoader.DebugInfo);
+ memoDebug.Lines.AddStrings(APageLoader.DebugInfo);
end;
procedure TformBrowser.Timer1Timer(Sender: TObject);
diff --git a/applications/fpbrowser/pageloader.pas b/applications/fpbrowser/pageloader.pas
index 9e75495e5..344311db1 100644
--- a/applications/fpbrowser/pageloader.pas
+++ b/applications/fpbrowser/pageloader.pas
@@ -24,13 +24,54 @@ type
function URLToAbsoluteURL(AInput: string): string;
end;
-var
- MyPageLoader: TPageLoader;
+ TOnPageLoadProgress = procedure (APercent: Integer) of object;
+ TOnPageLoadTerminated = procedure (APageLoader: TPageLoader) of object;
+
+ { TPageLoaderThread }
+
+ TPageLoaderThread = class(TThread)
+ private
+ FOnPageLoadProgress: TOnPageLoadProgress;
+ FOnPageLoadTerminated: TOnPageLoadTerminated;
+ public
+ PageLoader: TPageLoader;
+ Progress: Integer;
+ URL: string;
+ destructor Destroy; override;
+ procedure Execute; override;
+ procedure CallPageLoadProgress;
+ procedure CallPageLoadTerminated;
+ property OnPageLoadProgress: TOnPageLoadProgress read FOnPageLoadProgress write FOnPageLoadProgress;
+ property OnPageLoadTerminated: TOnPageLoadTerminated read FOnPageLoadTerminated write FOnPageLoadTerminated;
+ end;
implementation
uses httpsend;
+{ TPageLoaderThread }
+
+destructor TPageLoaderThread.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TPageLoaderThread.Execute;
+begin
+ PageLoader.LoadFromURL(URL);
+ Synchronize(CallPageLoadTerminated);
+end;
+
+procedure TPageLoaderThread.CallPageLoadProgress;
+begin
+
+end;
+
+procedure TPageLoaderThread.CallPageLoadTerminated;
+begin
+ if Assigned(FOnPageLoadTerminated) then FOnPageLoadTerminated(PageLoader);
+end;
+
{ TPageLoader }
constructor TPageLoader.Create;
@@ -127,13 +168,5 @@ begin
Result := AInput;
end;
-initialization
-
- MyPageLoader := TPageLoader.Create;
-
-finalization
-
- MyPageLoader.Free;
-
end.