FastFiber

[F1] - Helpbestand aanroepen

Gestart door EddyBeerke, vr 09 09 2011, 10:13:38

Vorige topic - Volgende topic

EddyBeerke

Ik wil graag met [F1] een help bestand aanroepen.
Met Lisp gaat dat als volgt:
(setfunhelp "c:testcommando" "Helpbestand" "topicinhelpbestand")

Dit gaat helemaal naar wens   :D
MAAR  :? ...
Als ik met Lisp een VBA-macro aanroep bv:
(command "-vbarun" (strcat path "VBAmacro.dvb!Module.Subroutine"))

Dan is het laatste commando in Acad: VBARUN, en geeft het daar de help bij.

Mijn vraag is dan ook hoe kun je tijdens het uitvoeren van een VBA-macro een topic in een eigen help bestand aanroepen met [F1] :vraagteken:
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

sschevers


EddyBeerke

Bedankt Stephan,
Maar deze had ik zelf ook al gevonden en doet niet wat ik wil.
Wel als ik een Form (venster) gebruik, dan kan ik dit wel gebruiken.

Wat ik wil is dus zonder Form, alleen via de commandline.
Eigenlijk een vangfunctie voor "keydown".
En dan de ingedrukte toets opvragen.
Als ik dat weet kan ik de help starten als het de [F1] is.
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

EddyBeerke

Ik heb iets gevonden... maar kan er nog niet veel mee omdat het in een loop zit, maar het werkt wel als je op [F1] drukt.

Wie kan mij verder helpen, of in de goede richting sturen?

Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long
Private Const VK_RMC = KeyCodeConstants.vbKeyF1


Private Sub Test_F1()
  Do
    If GetAsyncKeyState(VK_RMC) <> 0 Then
      Debug.Print VK_RMC
       MsgBox "Hier moet het aanroepen van de help komen i.p.v deze MsgBox."
       Exit Do
    End If
  Loop
End Sub
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

sschevers

#4
Eddy,

Ik heb ook nog wat verder gekeken en heb de volgende link gevonden
http://www.helpscribble.com/vb.html
Hier vind je 2 modules die je kunt gebruiken voor het oproepen van je help bestanden (.hlp of .chm)


'aanroep van je functies
' ByVal CLng(1234) is de het indexnummer van het help onderwerp
WinHelp(AcadApplication.HWND, <pad naar je  hlp bestand>, HELP_CONTEXT, ByVal CLng(1234))

'Aanroep voor chm bestanden
HtmlHelp(AcadApplication.HWND, <pad naar je  hlp bestand>, HH_HELP_CONTEXT, ByVal CLng(1234))





hopelijk lukt het hiermee je beoogde functionaliteit te maken

groeten

stephan

EddyBeerke

Stephan,

Ik heb gedaan wat op die site staat maar de code die daar staat is voor "vb" en niet voor "vba".
Nog geprobeerd om het aan te passen maar ik kom er niet uit.

Toen dacht ik als ik het path van de help verander ben ik er ook (tot het mis gaat met een error).
Maar ben er zeker NIET gelukkig mee, maar krijg wel mijn help-file te zien alleen niet het item waar het om gaat.

Hier de manier die ik vond:
Dim oldHelp
  oldHelp = ThisDrawing.Application.Preferences.Files.HelpFilePath
  ThisDrawing.Application.Preferences.Files.HelpFilePath = "X:Map_voor_HelpFile" & "MijnHelp.chm"


Later moet dan het path weer terug gezet worden naar "oldHelp"

ThisDrawing.Application.Preferences.Files.HelpFilePath = oldHelp

Als iemand een ander (dus beter idee) heeft graag...  :D
Misschien dan ook met voorbeeld code die ik kan gebruiken.

Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

roy_043

In lisp is dit mogelijk:
(startapp "hh.exe C:\\Program Files\\Bricsys\\Bricscad V11\\Help\\en_US\\Bricscad-CmdRef.chm::/F/FlatShot.htm")

Er wordt gebruik gemaakt van de 'command line switches' van hh.exe.

sschevers

De code op de site kun je ook gebruiken in vba. De bas bestanden kun je in laden in je vba project. Op die manier kun de code gebruiken. Ik had de aanroepen al in mijn vorige antwoord voor je aangepast.

Betere voorbeelden heb ik niet voor je kunnen vinden.

succes stephan

EddyBeerke

Citaat van: sschevers op do 15 09 2011, 10:58:54
De code op de site kun je ook gebruiken in vba. De bas bestanden kun je in laden in je vba project. Op die manier kun de code gebruiken. Ik had de aanroepen al in mijn vorige antwoord voor je aangepast.

Betere voorbeelden heb ik niet voor je kunnen vinden.

succes stephan

Maar er verschijnen wel errors die eerst uit de weg geruimd moeten worden in die .bas files.
Voorbeeld:
rcWindowPos As RECT
Dat "... as RECT" snapt mijn vba niet. Ik heb hier een variant van gemaakt.

Jou code heb ik als volgt aangepast:
Dim HelpFilePath As String
  HelpFilePath = "U:\Acad_2010\Lisp\" & "Tools Help.chm"
'aanroep van je functies
' ByVal CLng(1234) is de het indexnummer van het help onderwerp
Call WinHelp(AcadApplication.hwnd, HelpFilePath, HELP_CONTEXT, ByVal CLng(1234))
'Aanroep voor chm bestanden
Call HTMLHelp(AcadApplication.hwnd, HelpFilePath, HH_HELP_CONTEXT, ByVal CLng(1234))


Als ik er geen "Call" voor zet dan kan vba de "WinHelp" en de  "HTMLHelp" niet vinden.

Ik krijg hier mee nog steeds de "Acad 2010 Help", en niet mijn "Tools Help.chm".
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

EddyBeerke

Citaat van: roy_043 op do 15 09 2011, 10:09:12
In lisp is dit mogelijk:
(startapp "hh.exe C:\\Program Files\\Bricsys\\Bricscad V11\\Help\\en_US\\Bricscad-CmdRef.chm::/F/FlatShot.htm")



In Lisp had ik al dit:
(setfunhelp "c:testcommando" "Helpbestand" "topicinhelpbestand")
Maar dat is het probleem niet.
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

roy_043

Ik heb nauwelijks kennis van VBA, maar ik zat aan deze pseudo code gebaseerd op jouw bijdrage #3 te denken:

Private Sub Test_F1()
  Do
    If GetAsyncKeyState(VK_RMC) <> 0 Then
       VertaalDitNaarVBA: (startapp "hh.exe C:\\Program Files\\Bricsys\\Bricscad V11\\Help\\en_US\\Bricscad-CmdRef.chm::/F/FlatShot.htm")
    End If
  Loop
End Sub

EddyBeerke

Citaat van: roy_043 op do 15 09 2011, 11:59:33
Ik heb nauwelijks kennis van VBA, maar ik zat aan deze pseudo code gebaseerd op jouw bijdrage #3 te denken:

Private Sub Test_F1()
  Do
    If GetAsyncKeyState(VK_RMC) <> 0 Then
       VertaalDitNaarVBA: (startapp "hh.exe C:\\Program Files\\Bricsys\\Bricscad V11\\Help\\en_US\\Bricscad-CmdRef.chm::/F/FlatShot.htm")
    End If
  Loop
End Sub

Oh, oke. Maar dit zit in een "Do .... Loop".
Deze in de uitvoering wacht vba op de [F1]- toets.

Maar wat als de gebruiker geen "help" nodig heeft... dan moet hij/zij gewoon verder kunnen werken.
Anders krijg je zo iets als:
"Druk op F1 om verder te gaan." Waarna de help opent en je dan pas verder kunt.
Voor de gebruikers niet echt handig en voor mij niet iets wat ik wil.
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

EddyBeerke

Het is alweer een poosje geleden maar ik zit weer te stoeien met mijn helpbestand.

Ik heb de volgende code geprobeerd:
(setfunhelp "c:Xreflijst" "http://www.eddylucas.co.nf/Xreflijst.htm")
Dit werkt wel maar zonder css in het normale acadhelp-venster.
Maar ik wil het op de server (P-schijf) van ons bedrijf zetten en niet uploaden met ftp.

Nu zou ik het volgende willen gebruiken maar dit werk niet.
(setfunhelp "c:Xreflijst" "P:/help/Xreflijst.htm")

Maar als ik het op mijn eigen D-schijf zet gaat het in eens wel weer en met css:
(setfunhelp "c:Xreflijst" "D:/help/Xreflijst.htm")

Iemand een idee hoe dit op te lossen?
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

sschevers

#13
Eddy,

probeer het volgende eens in vba:

Shell "HH <pad naar chm>", vbNormalFocus


toch nog even aan het zoeken geweest
http://msdn.microsoft.com/en-us/library/office/aa164218(v=office.10).aspx

stephan

EddyBeerke

Bedankt voor je reactie Stephan, maar dit wil ik niet in VBA oplossen.

Als ik (setfunhelp "c:Xreflijst" "D:/help/Xreflijst.htm") gebruik dan gaat het goed.
Maar het is de bedoelling dat het hier op de server geplaatst wordt, op de P-schijf.
Verschillende kantoren, dus verschillende locaties, krijgen s'nachts een update van deze P-schijf.
Als ik het netwerkpath op geef werkt het ook.
Dit laatste lijkt een oplossing, maar handiger is een schijf aanwijzen zoals "P:\" of in lisp "P:/" ("P:\\")
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

FastFiber