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.