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

Reinier Olislagers reinierolislagers at gmail.com
Sat Jul 21 13:56:21 CEST 2012


Hi list,

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)
- lhelp flashes while the dbs are being loaded; I suppose there's
nothing we can do about that?

Any suggestions?

Thanks,
Reinier

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