Toon posts:

[Visual basic] Helpbestand aanroepen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Vanuit een applicatie waarin ik een formulier heb gedefinieerd roep ik mijn helpfile aan (in elkaar geklust met de HTMLHelp workshop). Met de onderstaande code werkt dit naar behoren, er gebeurt echter iets vreemds wat mij doet vermoeden dat er ergens iets fout zit in mijn code.

Nadat het helpbestand is aangeroepen en ik het weer heb gesloten laat de applicatie deze als het ware niet meer los. Ik kan het helpbestand niet meer verplaatsen of hernoemen. Ook als ik het formulier sluit van waaruit het helpbestand is aangeroepen verandert dit niet. Ik moet de complete applicatie sluiten voordat het helpbestand weer beschikbaar komt.

Ik heb geprobeerd in HelpEntry() zoiets als FormHelpFile = nothing in te voegen of na het echte helpbestand een dummy bestand aan te roepen maar dat helpt allemaal niets (en zelfs al zou het werken is dat laatste geen nette oplossing)

Heeft er iemand een idee waardoor het komt dat mijn helpbestand gegijzeld wordt zelfs nadat het formulier gesloten is?

Visual basic:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit

'HTML help API
Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" _
        (ByVal hwndCaller As Long, ByVal pszFile As String, _
         ByVal uCommand As Long, ByVal dwData As Long) As Long

Const HH_DISPLAY_TOPIC = &H0
Const HH_SET_WIN_TYPE = &H4
Const HH_GET_WIN_TYPE = &H5
Const HH_GET_WIN_HANDLE = &H6
Const HH_DISPLAY_TEXT_POPUP = &HE
Const HH_HELP_CONTEXT = &HF
Const HH_TP_HELP_CONTEXTMENU = &H10
Const HH_TP_HELP_WM_HELP = &H11

'Get handle of active window
Public Declare Function GetActiveWindow Lib "user32" () As Long


code:
1
2
3
4
5
6
7
8
9
10
Public Sub Show_Help(HelpFileName As String, MycontextID As Long)
Dim hwndHelp As Long

'Get handle for active window    
hwndHelp = GetActiveWindow()
    
'Call HTMLHelp
hwndHelp = HtmlHelp(hwndHelp, HelpFileName, _
                       HH_HELP_CONTEXT, MycontextID)
End Sub


De onderstaande code wordt uitgevoerd vanuit het formulier.
code:
1
2
3
4
5
6
7
8
9
10
11
12
Public Function HelpEntry()
Dim FormHelpID As Long, FormHelpFile As String

'Help file location    
FormHelpFile = ThisDocument.Path & "\FLSAHelp.chm"

'Context ID    
FormHelpID = 2001

'Invoke the help window
Show_Help FormHelpFile, FormHelpID
End Function

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Volgens mij gaat het ergens fout in de Show_help. Op dit moment ben ik niet zo helder, maar ik denk dat het te maken heeft met het feit dat je daar een handle gebruikt bij de aanroep van je helpfile. Hierdoor is degene van wie de handle is degene die zorg moet dragen voor het opruimen van de help. Aangezien je die nergens meer freed bij een onclose van de help bijvoorbeeld, blijft de help wachten tot jouw applicatie de help opruimt. Jij doet dat nergens in code, dus gebeurt het pas als jouw applicatie gesloten wordt. Probeer in plaats van de handle mee te geven in die functie eens om null mee te geven, wellicht dat het probleem dan is opgelost.

Disclaimer: in verband met een extreem lange werkdag en slaaptekort sta ik niet in voor de juistheid van deze post ;)

My personal website


Verwijderd

Topicstarter
Klinkt goed, maar een handle is nodig om de HTMLhelp aan te roepen.

Ik heb de voorgebakken code bekeken die je kunt gebruiken om vanuit MS Access een HTMLHelp bestand aan te roepen en daar wordt 'Application.hWndAccessApp' gebruikt om de handle te krijgen van de active window in MS Access. Aangezien ik het helpbestand wilde aanroepen vanuit een andere applicatie kwam ik op het idee om 'Public Declare Function GetActiveWindow Lib "user32" () As Long' the gebruiken.

Om een lang verhaal kort te maken, ik denk dat je in de goede richting zit (brak of niet ;) !) met je veronderstelling dat het te maken heeft met de handle.

Dus ik ben nog eens even gaan experimenteren .... :Y)

Een handle van Null wordt niet gepikt (invalid use of Null), maar 0 is echter wel OK. Het helpbestand wordt normaal gestart op het juiste topic. Iedere andere waarde zorgt ervoor dat mijn applicatie crashed (en dat is geen prettig gezicht kan ik je vertellen :( ). De 0 lost echter ook mijn probleem niet op, maar heb ik wel een probleem?

Ik heb namelijk ook geprobeerd om met standaardcode van MS mijn helpbestand te openen vanuit MS Access (nu dus met 'Application.hWndAccessApp') en guess what hetzelfde fenomeen doet zich voor. Pas nadat Access geheel is gesloten is het helpbestand weer beschikbaar. Dit is dus met standaardcode, schijnbaar is dit normaal bij het gebruik van de HTMLHelp API en heb ik toch goede code geschreven :*).

Voor de volledigheid wil ik nog even vermelden dat het mij toch niet lekker zit, het zou namelijk niet de eerste bug zijn die ik tegen ben gekomen bij het gebruik van HTMLHelp :X...