Hilfe-Aufruf kontextsensitiv

G. Carl, Donnerstag, 05.07.2007, 15:50 (vor 6112 Tagen)

Hallo.

Wir rufen unsere chm-Hilfe aus einem Programm kontextsensitiv auf. Die Hilfe soll offen bleiben, gleichzeitig soll der Benutzer im ursprünglichen Programm weiter arbeiten können. Die Framework-Funktionen, die wir benutzen, öffnen die Hilfe aber modal. Also entweder Hilfe ansehen oder im Programm arbeiten, beides geht nicht.
Als Alternative haben wir es mit der HH API versucht. Da klappt aber die Übergabe eines Parameters nicht.

Wer kann uns helfen>
---------------------

Der Aufruf etwas genauer:

.NET Framework-Funktion (funktioniert), mit
HelpFile: Name der Hilfedatei (mit Pfad)
Text: Kennziffer des gewünschten Topics.
[code]Help.ShowHelp(Nothing, HelpFile, Helpnavigator.TopicID, Text)[/code]

Funktion der HH API
, mit
HelpFile: Name der Hilfedatei (mit Pfad)
TopicID: Kennziffer des gewünschten Topics.
[code]HTMLHelpA(Nothing, HelpFile, HH_Help_Context, TopicID)[/code]
Mit dem API-Aufruf bleibt die Hilfe einfach tot. Was wohl bedeutet, dass der Parameter TopicID nicht richtig übergeben wird. Wir vermuten, dass die Hilfe einen String erwartet, aber einen Int32 bekommt. Probieren mit anderen Datentypen hat nicht geholfen.

Damit keine Verwirrung aufkommt: Ich hatte schon mal hier gepostet, da hatten wir noch mit dem Aufruf KeywordIndex gearbeitet. Das ist inzwischen (leider) überholt, wir benutzen (und brauchen) jetzt TopicID.

Danke, Guido

Hilfe-Aufruf kontextsensitiv

Ulrich Kulle ⌂, Dienstag, 10.07.2007, 09:34 (vor 6107 Tagen) @ G. Carl

Hallo Guido,

» Wir rufen unsere chm-Hilfe aus einem Programm kontextsensitiv auf. Die
» Hilfe soll offen bleiben, gleichzeitig soll der Benutzer im ursprünglichen
» Programm weiter arbeiten können. Die Framework-Funktionen, die wir
» benutzen, öffnen die Hilfe aber modal. Also entweder Hilfe ansehen oder im
» Programm arbeiten, beides geht nicht.
» Als Alternative haben wir es mit der HH API versucht. Da klappt aber die
» Übergabe eines Parameters nicht.
»
» Wer kann uns helfen>
» ---------------------

warum schaut der Entwickler sich nicht einmal die folgende VB2005 ClickOnce Anwendung an und lädt das Beispielprojekt herunter>

In der ClickOnce Anwendung (Siehe Hauptmenü Help > HH API ..) muss das Hilfefenster allerdings vorher einmal über eine andere Funktionalität aufgerufen werden.

http://www.help-info.de/de/Visual_Basic_2005/vb_2005.htm

Nach folgenden Code-Auszug sollte es funktionieren:

[code]### aus frmMain.vb ###
Private Sub mnuHelpApiTopicId_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuHelpApiTopicId.Click
'--- now working with new API call parameters
ShowTopicID(1, 20010)
End Sub

### aus modHelp.vb ###

Public Declare Function HTMLHelp_BaseCall Lib "hhctrl.ocx" Alias "HtmlHelpA" _
(ByVal hWnd As IntPtr, _
ByVal lpHelpFile As String, _
ByVal uCommand As Int32, _
ByVal dwData As Int32) As Int32

Public Sub ShowTopicID(ByVal intHelpFile As Integer, ByVal IdTopic As Int32)
Dim RetVal As Int32
RetVal = HTMLHelp_BaseCall(IntPtr.Zero, HFile(intHelpFile), HH_HELP_CONTEXT, IdTopic)
End Sub[/code]

--
Mit besten Grüßen
Ulrich Kulle
Microsoft Help MVP (2007-2009)
************************
http://www.help-info.de
Unterstützen Sie Help-Info.de durch eine PayPal Spende!
https://www.paypal.com

Hilfe-Aufruf kontextsensitiv - Danke

Guido @, Dienstag, 10.07.2007, 10:50 (vor 6107 Tagen) @ Ulrich Kulle

Hallo Ullrich,

vielen Dank. Das war genau die passende Antwort.

» In der ClickOnce Anwendung (Siehe Hauptmenü Help > HH API ..) muss das
» Hilfefenster allerdings vorher einmal über eine andere Funktionalität
» aufgerufen werden.
Hier liegt der Hase im Pfeffer!! Entscheidend ist, dass das Hilfefenster vorher schon einmal aufgerufen wurde. Wir haben also jetzt 2 Aufrufe hintereinander gestellt: Index aufrufen und TopicId aufrufen. Das war's.
Gut, es würde reichen, den Index nur einmal, z. B. beim Programmstart zu öffnen, oder den Index-Aufruf nur beim ersten Aufruf voranzustellen. Aber es macht fürs Auge keinen Unterschied.

Allerdings: Wir haben Dein Beispiel einmal durchgesehen und dabei festgestellt, dass der TopicId-Aufruf dort funktioniert, OHNE dass das Hilfefenster vorher auf andere Weise aufgerufen wurde. Das ist nun seltsamerweise ein anderes Verhalten als bei unserer Hilfe. Aber das will ich jeztzt gar nicht genauer verstehen.
Schließlich funktioniert erst einmal alles wie gewünscht.

Danke, Guido

Hilfe-Aufruf kontextsensitiv - Danke

Ulrich Kulle ⌂, Dienstag, 10.07.2007, 11:07 (vor 6107 Tagen) @ Guido

Hallo Guide,

» » In der ClickOnce Anwendung (Siehe Hauptmenü Help > HH API ..) muss das
» » Hilfefenster allerdings vorher einmal über eine andere Funktionalität
» » aufgerufen werden.
» Hier liegt der Hase im Pfeffer!! Entscheidend ist, dass das Hilfefenster
» vorher schon einmal aufgerufen wurde. Wir haben also jetzt 2 Aufrufe
» hintereinander gestellt: Index aufrufen und TopicId aufrufen. Das war's.
» Gut, es würde reichen, den Index nur einmal, z. B. beim Programmstart zu
» öffnen, oder den Index-Aufruf nur beim ersten Aufruf voranzustellen. Aber
» es macht fürs Auge keinen Unterschied.
»
» Allerdings: Wir haben Dein Beispiel einmal durchgesehen und dabei
» festgestellt, dass der TopicId-Aufruf dort funktioniert, OHNE dass das
» Hilfefenster vorher auf andere Weise aufgerufen wurde. Das ist nun
» seltsamerweise ein anderes Verhalten als bei unserer Hilfe. Aber das will
» ich jeztzt gar nicht genauer verstehen.
» Schließlich funktioniert erst einmal alles wie gewünscht.

mein Hinweis auf den notwendigen Vorabaufruf der CHM bezog sich nur auf eine direkte Verwendung der ClickOnce Anwendung über das Internet ohne Installation. Ich konnte bisher nicht klären warum das mit ClickOnce nicht funktioniert.

Bei Download und Verwendung des VB2005 Beispielprojektes sollte hingegen alles funktionieren.
Hierbei ist *zu beachten*, dass in meinen Beispielprogramm unter Menu > Help im oberen Teil .NET FRAMEWORK Funktionen genutzt werden und im unteren Teil der Aufruf über HH API erfolgt und hier auch zwischen den Fenstern umgeschaltet werden kann.

Daher weiß ich jetzt nicht so recht welche und wie ihr die Funktion genau aufruft.

--
Mit besten Grüßen
Ulrich Kulle
Microsoft Help MVP (2007-2009)
************************
http://www.help-info.de
Unterstützen Sie Help-Info.de durch eine PayPal Spende!
https://www.paypal.com

Hilfe-Aufruf kontextsensitiv - Danke

Ulrich Kulle ⌂, Mittwoch, 11.07.2007, 18:16 (vor 6106 Tagen) @ Ulrich Kulle

Offline Posting als Antwort zum Abschluss des Threads:

Wir haben den HH API Show Topic (ID) im unteren Teil benutzt.
Nachdem wir das Programm Zeile für Zeile verfolgt haben, sind wir sicher,
dass unser Aufruf absolut identisch ist. Trotzdem funktioniert der
TopicId-Aufruf erst dann, wenn vorher (mindestens einmal) ein API-Aufruf
stattgefunden hat, z. B. HH API Show Index.

Hilfe-Aufruf kontextsensitiv - Danke

Maximos @, None, Samstag, 04.08.2007, 17:49 (vor 6082 Tagen) @ Guido

Cool!

powered by my little forum