Probleme mit HTML Help (CHM)



  • Ich rufe meine CHM Hilfedatei auf, geht auch soweit. Nur habe ich jetzt ein Problem.

    Ich habe eine Hauptform, von dort rufe ich meine Hilfe auf. Wird angezeigt und Fenster ist auch aktivierbar. Rufe ich in meinem Programm jetzt ein modales Fenster auf, so ist mein Hilfefenster deaktiv. Rufe ich in dem modalen Fenster ein Hilfethema auf, so wird es auch im Hilfefenster angezeigt, aber das Hilfefenster ist trotzdem nicht aktivierbar. Man kann also im Modalenfenster nicht in der Hilfe navigieren. Beim Aufruf des HelpTopics habe ich als Handle schon das Application->Handle, NULL und GetDesktopWindow genommen, Verhalten ist immer gleich. Wo kann das Problem liegen?

    Das Hilfefenster scheint immer nur bei dem Fenster aktiv zu sein, bei dem es das erstemal aufgerufen wurde. Es soll aber natürlich in der gesamten Applikation aktiv sein......

    Hier mein Code:

    Globale

    FPHH htmlHelp;
    HINSTANCE HtmlHelpInst;
    bool HTML_Help_Availible;
    DWORD dwCookie;
    

    Laden der Hilfe

    bool __fastcall LoadHtmlHelp()
    {
       HtmlHelpInst = LoadLibrary( "HHCTRL.OCX" );
       if(HtmlHelpInst == 0)  // Konnte nicht geladen werden
       {
          htmlHelp = NULL;
          HTML_Help_Availible = false;
          return false;
       }
    
       ( FARPROC& ) htmlHelp = GetProcAddress( HtmlHelpInst, "HtmlHelpA" );
       htmlHelp(NULL, NULL, HH_INITIALIZE, (DWORD)&dwCookie);
    
       HTML_Help_Availible = true;
       return true;
    }
    

    Aufruf eines Topics:

    bool ShowHTMLHelp(AnsiString Helpfile, AnsiString Helpindex)
    {
       if(!HTML_Help_Availible)
          return false;
    
       if(!FileExists(Helpfile))
          return false;
    
       AnsiString Topic = Helpfile + "::/" + Helpindex + ".htm";
       //htmlHelp( NULL, Topic.c_str(), HH_DISPLAY_TOPIC, NULL );
       //htmlHelp( Application->Handle, Topic.c_str(), HH_DISPLAY_TOPIC, NULL );
       htmlHelp( ::GetDesktopWindow(), Topic.c_str(), HH_DISPLAY_TOPIC, NULL );
    
       return true;
    }
    


  • Ich bin's nochmal. Kann es sein, das ich das Laden der Hilfe in einem eigenen Thread machen muss?

    Kann mir jemand bestätigen das das Phänomen so ist, oder liegt es irgendwie an meiner Umgebung?



  • Also ich rufe die Hilfe so auf:

    //AnsiString HtmlHelpFile = ExtractFilePath(Application->ExeName)+Application->Title+"meinehilfe.chm";
    AnsiString HtmlHelpFile = "c:\\meinehilfe.chm";
    
    //Topic Öffnen
      HtmlHelp(NULL, HtmlHelpFile.c_str(), HH_DISPLAY_TOPIC, 0);
    

    und das klappt auch vom modalen Fenster so, das ich in der Hilfe weiter suchen kann.

    Gruß myerscola



  • So,
    jetzt bin ich etwas weiter. Habe das "HH_INITIALIZE" aufgenommen, weil ich Probleme beim beenden des Programms hatte. Dann war das Problem weg. Im nachhinein stellte sich heraus, das das INITIALIZE das Problem hervorruft, das es bei modalen Fenstern nicht mehr geht. Mein ursprüngliches Problem wird durch HH_CLOSE_ALL hervorgerufen. Zwischen diesem Kommando und dem FreeLibrary muss etwas Zeit vergehen. Sonst crasht es. Ist ein KnowknBug von Mircosoft.

    Gruss
    Jörn


Anmelden zum Antworten