[Lazarus] ChmHelpPkg: better way to show all CHMs when starting lhelp?

Reinier Olislagers reinierolislagers at gmail.com
Mon Oct 29 10:13:07 CET 2012

Let's see if somebody has some good ideas about the problem described below.


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.
> Though this seems to work (I get the RTL, FCL, LCL and reference guide
> CHMs displayed, and the proper help subject is shown), it's clunky:
> - using built-in sleep periods seems clunky. Tried removing this, but
> IIRC the reference guide then fails to load.
> - the commented out mime type support detection seems to fail, which
> causes other help databases to display (e.g. browser-based help)
====> this is my main problem.

Any hints on how to solve this?

> - lhelp flashes while the dbs are being loaded; I suppose there's
> nothing we can do about that?

> lazarus\components\chmhelp\packages\idehelp\lazchmhelp.pas
> function TChmHelpViewer.ShowNode(Node: THelpNode; var ErrMsg: string):
> TShowHelpResult;
> var
> ...
>   WasRunning: boolean;
> ...
>   if ExtractFileNameOnly(GetHelpExe) = 'lhelp' then begin
>     //start of modifications
>     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
>         //this doesn't seem to work - no dbs opened:
>         //if HelpDatabases[i].SupportsMimeType('application/x-chm') then
> begin // Only open chm help files
>         HelpDatabases[i].ShowTableOfContents;
>         Sleep(200); //give viewer chance to open file. todo: better way
> of doing this?
>       end;
>     end;
>     //end of modifications
>     Res := fHelpConnection.OpenURL(FileName, Url);

More information about the Lazarus mailing list