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