Doppelpunkt vor dem Helpkeyword



  • Herzliche Dank für die Hilfe.

    Wie du vorgeschlagen hast zu debuggen geht bei mir nicht. Ich habe nur eine Profesionelle Version. Wenn ich mit F7 in die Funktion "HelpKeyword" springen möchte geht er einfach darüber hinweg.

    Die Idee mit dem zusenden des Projektes war nicht so gut. Denn in der Version XE hatte es bei mir auch funktioniert. Das Problem tauchte erst mit der Version XE3 auf.

    Ich bin trotzdem einen Schritt weiter gekommen. Denn folgende Zeile konnte ich einfühgen:

    _di_IHtmlHelpTester HtmlHelpTester;
    

    Denn beim Funktionsaufruf "GetHelpStrings" wird geprüft ob "HtmlHelpTester" vorhanden ist. Also die Variable konnte ich deklarieren. Nun muss ich ihr noch einen gültigen Wert zuweisen. Die grosse Frage ist aber welchen. Vielleicht hat da jemand eine Idee.

    Gruss Renato



  • s. XE3: Enabling Help in Applications

    Also nur ein Include einfügen:

    #include <Vcl.HtmlHelpViewer.hpp>
    

    Edit: Ups, sehe gerade, dies hast du ja im ersten Beitrag schon geschrieben.

    PS: Kannst du den Schreibfehler im Titel korrigieren (Hekpkeyword -> HelpKeyword) - ich wußte erst überhaupt nicht, was du meinst 😉



  • Danke für den Hinweis. Habe es übersehen.





  • Leider bringt mich dieser Hinweis auch nicht weiter. Denn THTMLHelpViewer gibt es bei mir nicht. Ich verstehe den Inhalt dieses Artikels nicht.

    Hat mir nicht jemand ein Beispiel.

    Gruss Renato



  • Schau dir doch auch mal die Hilfe für deine Version an:

    http://docwiki.embarcadero.com/RADStudio/XE7/de/IExtendedHelpViewer_implementieren

    Es ist ja durchaus möglich, das sich seit XE3 da was geändert hat

    😉

    Edit: Ich hab das bei mir etwas anders gelöst, war seinerzeit noch mit XE2 erstellt worden, und ich habe nicht HelpKeyWord, sondern HelpKontext benutzt:

    SHELLEXECUTEINFO m_shinfo; //In der h-Datei definiert.
    
    void __fastcall TMain::FormCreate(TObject *Sender)
    {
      Application->OnHelp = AppHelp;
      memset(&m_shinfo,0,sizeof(m_shinfo));
      m_shinfo.cbSize = sizeof(m_shinfo);
    ....
    
    }
    
    bool __fastcall TMain::AppHelp(Word Command, int Data, bool &CallHelp)
    {
    	HWND hwnd = FindWindow(0,TEXT("Anwendungshilfe"));
    
            //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)+"Anwendungshilfe.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_SHOWMAXIMIZED;
    
    	::ShellExecuteEx(&m_shinfo);
    
    	CallHelp = false;
    	return false;
    }
    
    void __fastcall TMain::FormClose(TObject *Sender, TCloseAction &Action)
    {
      //Wenn hilfe noch offen, dann schliessen bei Programmende
    
      HWND hwnd = FindWindow(0,TEXT("Anwendungshilfe"));
    
      if (hwnd)
      {
        SendMessage(hwnd,WM_CLOSE,0,0);
      }	
    }
    

    "Anwendungshilfe" ist der Titel, dem du das Helpfile in der hhp Datei gegeben hast.



  • Herzlichen Dank für all die Hilfe. Dies ist ein supper Forum.

    Ich muss mich etwas tiefer in dieses Thema einarbeiten. Offensichtlich ist es nicht so einfach wie ich es mir gedacht hatte. Ich werde mir das obige Beispeil mal näher betrachten.

    Was mich zum staunen bringt, ist der Umstand, dass C++ Code in Delphi übersetzt wird um im C++Builder zu verwenden. Wenn ich in C++ Programmiere, dann möchte ich, dass auch alles in C++ ist. Darf ich indiesem Fall keine Komponenten verwenden? Oder ist die VCL daran Schuld.

    Gruss Renato



  • Robbiani schrieb:

    Was mich zum staunen bringt, ist der Umstand, dass C++ Code in Delphi übersetzt wird um im C++Builder zu verwenden.

    Wird er nicht. Wie kommst du auf die Idee?

    Robbiani schrieb:

    Wenn ich in C++ Programmiere, dann möchte ich, dass auch alles in C++ ist. Darf ich indiesem Fall keine Komponenten verwenden? Oder ist die VCL daran Schuld.

    Die VCL ist in Delphi geschrieben. Die meisten Komponenten auch. Hindert dich nicht daran, dein eigenes Programm in C++ zu schreiben. Aber beim Umgang mit C++Builder ist es immer von Vorteil (lies: für jeden ernstzunehmenden Programmierer unumgänglich), Delphi lesen zu können, weil man öfters mal Delphi-Code debuggen muß.

    Und eben dazu habe ich dir in der Mail ja auch geraten. Der VCL-Quelltext ist dem C++Builder beigelegt; du kannst darin Haltepunkte setzen und so sehr einfach nachvollziehen, warum deinem Hilfe-String dieser Präfix vorangehängt wird. Wenn du dabei auf Schwierigkeiten oder Unklarheiten stößt, frage einfach hier.



  • Nun habe ich alles mal mit HelpContext ausprobiert. O Wunder. Wenn ich die Laufzeit-Package entferne, wird keine Hilfe mehr geöffnet, sonder es erscheint eine Fehlermeldung, dass die Hilfe nicht aufgerufen werden kann.

    Nun denke ich, dass ich was mit der Initialisierung der Hilfe falsch mache. Wie schon beschrieben mache ich das folgende :

    #include <Vcl.HtmlHelpViewer.hpp>
    #pragma link "Vcl.HTMLHelpViewer"
    

    Benötigt das Programm noch mehr? Oder muss ich noch was anderes machen für die Hilfe?

    Gruss Renato



  • Ciao Burkhi

    Herzlichen Dank für deine Hilfe. Leider funktioniert es unter 64 Bit nicht.
    Beim kompilieren kommt der folgende Fehler:

    **
    [bcc64 Fehler] start_frm.cpp(83): Zuweisen an 'THelpEvent' (aka 'bool (__closure *)(System::Word, NativeInt, bool &) __attribute__((fastcall))') aus inkompatiblem Typ 'bool (__closure *)(Word, int, bool &) __attribute__((fastcall))'
    **

    Ich muss mal schauen wo genau das Problem ist.

    Gruss Renato



  • Hallo zusammen

    So geht es.

    bool __fastcall TForm1::AppHelp(WORD Command, NativeInt Data, bool &CallHelp)
    

    Gruss Renato


Anmelden zum Antworten