> On 21-7-2012 13:56, Reinier Olislagers wrote: >> Editing ChmHelpPkg to try and solve bug 22110 Help (at least CHM help) >> should open all help files to enable content/index search >> >> I want to open all .chm files in the help database when starting up >> lhelp, which allows browsing and searching through the entire >> documentation set. >> >> See modified code below. By explicitly adding an 'application/x-chm' mime type to some CHM help database classes, I now got the LCL.CHM help to open in addition to whatever lhelp will search for (and I'm avoiding opening online help). However, I still don't get e.g. rtl.chm open... what code would I need to edit there?
Wondering if this is the right way to go? Isn't there some way to recurse through all *.chm files in the chmd files dir and open the corresponding table of contents URL/node? Thanks, Reinier
Index: components/chmhelp/packages/idehelp/lazchmhelp.pas =================================================================== --- components/chmhelp/packages/idehelp/lazchmhelp.pas (revision 39547) +++ components/chmhelp/packages/idehelp/lazchmhelp.pas (working copy) @@ -340,6 +340,7 @@ function TChmHelpViewer.ShowNode(Node: THelpNode; var ErrMsg: string ): TShowHelpResult; var + i: integer; FileName: String; Url: String; Res: TLHelpResponse; @@ -347,6 +348,7 @@ Proc: TProcessUTF8; FoundFileName: String; LHelpPath: String; + WasRunning: boolean; begin if Pos('file://', Node.URL) = 1 then begin @@ -382,7 +384,25 @@ FileName := CleanAndExpandFilename(FoundFileName); if ExtractFileNameOnly(GetHelpExe) = 'lhelp' then begin + WasRunning := fHelpConnection.ServerRunning; fHelpConnection.StartHelpServer(HelpLabel, GetHelpExe); + // If the server is not already running, open all chm files after it has started + // This will allow cross-chm (LCL, FCL etc) searching and browsing in lhelp. + if not(WasRunning) then begin + for i := 0 to HelpDatabases.Count-1 do begin + // Only open chm help files (no online html help etc) + // Using SupportsMimetype would seem to be the solution here. + // This does mean that all classes providing chm file support add + // AddSupportedMimeType('application/x-chm'); + // in their constructors as they normally inherit + // text/html from their HTML help parents. + // this still does not open all help files such as rtl.chm + if HelpDatabases[i].SupportsMimeType('application/x-chm') then begin + HelpDatabases[i].ShowTableOfContents; + Sleep(200); //give viewer chance to open file. todo: better way of doing this? + end; + end; + end; Res := fHelpConnection.OpenURL(FileName, Url); end else begin if Trim(fHelpExeParams) = '' then Index: components/chmhelp/packages/idehelp/chmprog.pas =================================================================== --- components/chmhelp/packages/idehelp/chmprog.pas (revision 39547) +++ components/chmhelp/packages/idehelp/chmprog.pas (working copy) @@ -124,6 +124,8 @@ constructor TFPCDirectivesHelpDatabase.Create(TheOwner: TComponent); begin inherited Create(TheOwner); + // Needed for getting lhelp to auto-open this db on start: + AddSupportedMimeType('application/x-chm'); FDirectiveNodes := TFPList.Create; end; Index: components/chmhelp/packages/idehelp/chmlcl.pas =================================================================== --- components/chmhelp/packages/idehelp/chmlcl.pas (revision 39547) +++ components/chmhelp/packages/idehelp/chmlcl.pas (working copy) @@ -53,6 +53,8 @@ constructor TLclChmHelpDatabase.Create(TheOwner: TComponent); begin inherited Create(TheOwner); + // Needed for getting lhelp to auto-open this db on start: + AddSupportedMimeType('application/x-chm'); FBaseURL := THelpBaseURLObject.Create; FBaseURL.BaseURL := 'lcl.chm://'; BasePathObject := FBaseURL; Index: components/chmhelp/packages/idehelp/chmlangref.pas =================================================================== --- components/chmhelp/packages/idehelp/chmlangref.pas (revision 39547) +++ components/chmhelp/packages/idehelp/chmlangref.pas (working copy) @@ -68,6 +68,8 @@ constructor TLangRefHelpDatabase.Create(TheOwner: TComponent); begin inherited Create(TheOwner); + // Needed for getting lhelp to auto-open this db on start: + AddSupportedMimeType('application/x-chm'); FKeywordNodes := TList.Create; FKeyWordsList := TStringList.Create; FKeyWordsList.CaseSensitive := False;
-- _______________________________________________ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus