Doppelpunkt vor dem Helpkeyword



  • Hallo zusammen

    Ich habe ein Problem dem ich einfach nicht beikomme.

    Ich entwickle mit dem C++ Builder XE7. Jedoch habe ich dasselbe Problem schon seit der Version XE.
    In meinem Programm verwende ich eine HTML-Hilfedatei im chm Format. Alles funktioniert ohne Probleme. Ich kann mit HelpKeyword ein bestimmts Kapitel der Hilfe aufrufen, welches ich zuvor als Index im Helpworkshop registriert habe.

    Den Helpviewer habe ich wie folgt in mein Programm eingebunden.

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

    Sobald ich aber die Laufzeit-Packages nicht mehr mit Linke wird den HelpKeyword immer eine Doppelpunkt und ein Leerschlag (": ") voran gestellt. Somit werden die Indexe nicht mehr gefunden und die Kapitel werden nicht mehr aufgeschlagen.

    Kennt jemand eine Lösung für dieses Problem?

    Gruss Renato



  • Offensichtlich ist mein Problem nicht so trivial. Daher möchte ich noch einige Erläuterungen dazu geben.

    Also das Problem besteht seit der Installation von RAD Studio XE3. Diese hatte ich auf eine Windows Vista Rechner. Damals dachte ich, dass das Problem daran liegt, dass ich gleichzeitig noch RAD Studio XE installiert hatte.

    Nun bin ich auf einen neuen Rechner mit Windows 8.1 umgestiegen. Dort habe ich RAD Studio XE7 installiert. Und es zeigt sich dasselbe Peoblem.

    Meine HTML-Hilfe rufe ich mit dem folgenden Befehl auf:

    Application->HelpKeyword("Ort");
    

    Wenn ich nun die Laufzeit-Package entferne führt dies zum Ergebnis, dass dem Keyword ein ": " vorangestellt wird. Dies führt dann zu Ergebnis, dass die Hilfedatei wie folgt aufgerufen wird ": Ort". Somit wird im Index nichts gefunden.

    Ich habe eine Testaplikation erstllt. Währe jemand bereit dies mal bei sich laufen zu lassen. So könnte ich schauen ob es an meiner Installation liegt oder ob das Problem bei meinem Programm liegt.

    Hilfsbereite Kollegen können sich unter renato.robbiani@robbisoft.ch melden.

    Ich danke allen die mir weiterhelfen können.

    Gruss Renato



  • Gibt es einen Grund, warum du die Testanwendung nicht einfach irgendwo hochlädst und für alle zugänglich machst?

    Ansonsten kannst du sie mir meinetwegen mal schicken, dann schaue ich sie mir an.



  • Ciao Audacia

    Ich habe dir ein Mail gesendet mit dem Projekt. Ich hoffe, dass du damit klar kommst. Sonst melde dich wieder bei mir.

    Natürlich hat es einen Grund, dass ich mein Projekt nicht irgend wo hinstelle. Ich habe einfach nicht daran gedacht. Aber ich werde dies noch nachholen.

    Danke für deine Hilfe

    Gruss Renato



  • 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