Berlin 10.1 HelpContents



  • Hej folks,

    das Aufrufen von 'Hilfe' funktioniert. Ich möchte aber auch den Inhalt (Contents) der Hilfe anzeigen. Laut der Embarcadero-Hilfe muss so vorgegangen werden:

    #include <system.helpIntfs.hpp>
    #include <HTMLHelpViewer.hpp>
    
    void __fastcall TfmMainTocs::HelpContents1Execute(TObject * Sender){
    	if (CanShowTableOfContents()){
    		ShowTableOfContents();
    	}
    }
    

    Beim Kompilieren kommt aber schon die Mitteilung, dass beide Funktionen (CanShowTableOfContents(), ShowTableOfContents()) undefiniert sind.

    Was habe ich vergessen? Danke für einen Hinweis!

    Dieter



  • Du benötigst eine Instanz vom Typ ICustomHelpViewer.

    In VCL-Anwendungen implementiert TWinHelpViewer diese Schnittstelle und stellt das globale Objekt 'HelpViewer' bereit.



  • Danke!
    Jetzt muss ich mal schauen, dass ich ein Beispiel finde. Es ist nicht so leicht zu durchschauen wie das mit Instanzieren, Registrieren etc. funktioniert.



  • Ciao Dieter

    Dir Fehlt wol das da

    //-------Für die Hilfe-------------------------------------------------------
    #include <Vcl.HtmlHelpViewer.hpp>
    #pragma link "Vcl.HTMLHelpViewer"
    //---------------------------------------------------------------------------
    

    Ich an deiner Stelle würde dies nicht so machen. Da handelst du dir nur diverse Probleme ein. Mach es doch auf diese Art

    // Header
    SHELLEXECUTEINFO m_shinfo;
    bool __fastcall AppHelp(WORD, NativeInt, bool &);
    

    und im Programm

    bool __fastcall TForm1::AppHelp(WORD Command, NativeInt Data, bool &CallHelp)
    {
    		HWND hwnd = FindWindow(0,TEXT("sonne"));
    
    		//Wenn Hilfe schon offen, dann schliessen
        //Sonst geht jedesmal ein neues Hilfefenster auf.
    		if (hwnd)
    		{
          SendMessage(hwnd,WM_CLOSE,0,0);
    		}
    
    //		UnicodeString s = "-mapid "+IntToStr(Data)+" "+ExtractFilePath(Application->ExeName)+"sonne.chm";
    		UnicodeString s = "-mapid "+ IntToStr(Data) + " .\\sonne.chm";
    
        m_shinfo.hwnd = Handle;
        m_shinfo.lpVerb = TEXT("open");
    		m_shinfo.lpFile = TEXT("hh");
    		m_shinfo.lpParameters = s.c_str();
    		m_shinfo.nShow = SW_SHOWNORMAL;//SW_SHOWMAXIMIZED;
    
    		::ShellExecuteEx(&m_shinfo);
    
        CallHelp = false;
        return false;
    }
    
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
      //Wenn hilfe noch offen, dann schliessen bei Programmende
      HWND hwnd = FindWindow(0,TEXT("sonne"));
    
      if (hwnd)
      {
        SendMessage(hwnd,WM_CLOSE,0,0);
      }
    }
    

    Dies ist reines C++ das andere macht den Umweg über Delphi.

    Gruss Renato



  • Danke! Ich werde das mal probieren.
    Gruß
    Dieter



  • Na so ein Zufall, das sieht ja ganz nach dem Code aus, den ich hier mal gepostet hab 😃 😃 😃


Anmelden zum Antworten