FAQ Visual Basic

FAQ Visual Basic Consultez toutes les FAQ
Nombre d'auteurs : 50, nombre de questions : 300, dernière mise à jour : 15 juin 2021
Sommaire→Documentation et installation- Comment ouvrir mon fichier d'aide .hlp depuis mon application ?
- Comment ouvrir mon fichier d'aide .chm par du code ?
- Comment faire un programme d'installation ?
- Quels sont les fichiers nécessaires pour que mon logiciel fonctionne ?
- Comment enregistrer un ActiveX ?
- Pourquoi le setup de VB m'indique que des fichiers systèmes sont périmés pendant l'installation de mon application ?
- Comment inclure MDAC à mon programme d'installation ?
- Comment associer une extension à un programme ?
Lorsque l'utilisateur de votre programme appuie sur la touche F1, VB ouvre le fichier d'aide dont le chemin est spécifié dans App.HelpFile.
Si le fichier d'aide se trouve dans le répertoire de l'exécutable, et s'appelle Aide.hlp, il faudra donc placer cette ligne au début du programme :
App.HelpFile = App.Path & "\Aide.hlp"Si le fichier d'aide doit aussi s'ouvrir sur le clic d'un bouton ou d'un menu, il suffira de simuler un clic sur la touche F1 avec l'instruction SendKeys :
Private Sub btnAide_Click()
'ouvre le fichier d'aide quand on clique sur le bouton btnAide
SendKeys "{F1}"
End SubSi votre fichier d'aide est un fichier d'extension .chm, vous pouvez déclencher son ouverture lors de l'appui sur
la touche F1 de la même façon que celle décrite pour un fichier d'extension .hlp.
Si vous avez besoin de passer par le code, voici le source d'un module de classe à copier dans votre projet.
Créez donc un module de classe et nommez-le CHelp.
Private Enum HH_COMMAND
HH_DISPLAY_TOPIC = &H0
HH_HELP_FINDER = &H0
HH_DISPLAY_TOC = &H1
HH_DISPLAY_INDEX = &H2
HH_DISPLAY_SEARCH = &H3
HH_SET_WIN_TYPE = &H4
HH_GET_WIN_TYPE = &H5
HH_GET_WIN_HANDLE = &H6
HH_GET_INFO_TYPES = &H7
HH_SET_INFO_TYPES = &H8
HH_SYNC = &H9
HH_ADD_NAV_UI = &HA
HH_ADD_BUTTON = &HB
HH_GETBROWSER_APP = &HC
HH_KEYWORD_LOOKUP = &HD
HH_DISPLAY_TEXT_POPUP = &HE
HH_HELP_CONTEXT = &HF
HH_TP_HELP_CONTEXTMENU = &H10
HH_TP_HELP_WM_HELP = &H11
HH_CLOSE_ALL = &H12
HH_ALINK_LOOKUP = &H13
End Enum
Private Type structHH_FTS_QUERY
cbStruct As Long
fUniCodeStrings As Long
pszSearchQuery As String
iProximity As Long
fStemmedSearch As Long
fTitleOnly As Long
fExecute As Long
pszWindow As String
End Type
Private Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" _
(ByVal hwndCaller As Long, _
ByVal pszFile As String, _
ByVal uCommand As HH_COMMAND, _
dwData As Any) As Long
Public Sub Show(NewFile As String, Optional WindowPane As String, Optional ContextID)
Dim Fichier As String
Fichier = NewFile
If Len(WindowPane) Then
Fichier = Trim(Fichier) & ">" & Trim(WindowPane)
End If
If IsMissing(ContextID) Then
Call HtmlHelp(0, Fichier, HH_DISPLAY_TOC, ByVal 0&)
Else
Call HtmlHelp(0, Fichier, HH_HELP_CONTEXT, ByVal Clng(ContextID))
End If
End Sub
Public Sub ShowIndex(NewFile As String, Optional WindowPane As String)
Dim Fichier As String
Fichier = NewFile
If Len(WindowPane) Then
Fichier = Trim(Fichier) & ">" & Trim(WindowPane)
End If
Call HtmlHelp(0, Fichier, HH_DISPLAY_INDEX, ByVal 0&)
End Sub
Public Sub ShowSearch(NewFile As String, Optional WindowPane As String)
Dim Fichier As String
Dim HH_FTS_QUERY As structHH_FTS_QUERY
With HH_FTS_QUERY
.cbStruct = Len(HH_FTS_QUERY)
.fUniCodeStrings = 0&
.pszSearchQuery = "TEST"
.iProximity = 0&
.fStemmedSearch = 0&
.fTitleOnly = 0&
.fExecute = 1&
.pszWindow = ""
End With
Fichier = NewFile
If Len(WindowPane) Then
Fichier = Trim(Fichier) & ">" & Trim(WindowPane)
End If
Call HtmlHelp(0, Fichier, HH_DISPLAY_SEARCH, HH_FTS_QUERY)
End SubApp.HelpFile vous renvoie le nom du fichier d'aide que vous avez indiqué dans les propriétés du projet. Vous pouvez aussi modifier cette propriété à l'exécution. App.HelpFile doit bien sûr être ici un fichier .chm compilé.
Voyons comment afficher l'index de l'aide dans la fenêtre W1, celle-ci ayant été auparavant définie dans le projet d'aide. Le paramétrage de la fenêtre d'affichage est optionnel.
Dim objHelp As Chelp
Set objHelp = New Chelp
Call objHelp.ShowIndex(App.HelpFile, "W1")
Set objHelp = NothingNous pouvons aussi afficher le sommaire :
Dim objHelp As Chelp
Set objHelp = New Chelp
Call objHelp.Show(App.HelpFile, "W1")
Set objHelp = NothingAinsi que la page de recherche :
Dim objHelp As Chelp
Set objHelp = New Chelp
Call objHelp.ShowSearch(App.HelpFile, "W1")
Set objHelp = NothingIl n'est pas possible de transmettre la chaine à rechercher directement à l'onglet de recherche, comme l'indique cet article de Microsoft
Enfin voici comment afficher une page à partir de son ContextID :
Dim objHelp As Chelp
Set objHelp = New Chelp
Call objHelp.Show (App.HelpFile, "W1", 320)
Set objHelp = NothingVous pouvez utiliser l'assistant d'empaquetage et déploiement. Vous le trouverez dans le gestionnaire des suppléments de Visual Basic, ou dans les programmes du menu Démarrer, dans les outils Microsoft Visual Studio 6.0.
Il existe aussi des logiciels commerciaux complets et de bonne qualité, tels ceux édités par les sociétés Installshield et Wise.
Et enfin quelques outils gratuits :
- Inno Setup : vous permet de créer un programme d'installation personnalisé
- IsTool : interface graphique pour Inno Setup, permet aussi de convertir un fichier setup.lst créé par l'Assistant d'Empaquetage en fichier iss pour Inno Setup
- Visual Studio Installer 1.1 : créateur de programme d'installation, n'existe pas en français
Visual Basic 3.0
VBRUN300.DLL
Visual Basic 4.0
VB40032.DLL, OLEPRO32.DLL
Visual Basic 5.0
MSVBVM50.DLL, OLEAUT32.DLL, OLEPRO32.DLL, STDOLE2.TLB, ASYCFILT.DLL, COMCAT.DLL
Visual Basic 6.0
MSVBVM60.DLL, OLEAUT32.DLL, OLEPRO32.DLL, STDOLE2.TLB, ASYCFILT.DLL, COMCAT.DLL
Les versions des fichiers distribués dans les différents Service Packs de chaque produit sont souvent différentes de celles livrées dans la version d'origine.
Ces fichiers constituent le runtime Visual Basic de chaque version. Mais dans votre programme d'installation il faut ajouter les éventuels ActiveX et références que vous avez inclus dans votre projet. Si vous utilisez ADO, il faut inclure MDAC.
Un ActiveX doit figurer dans la base de registre afin qu'il soit pris en compte par le système et qu'il puisse fonctionner. Ceci est pris en charge par le programme regsvr32.exe qui se trouve dans le répertoire système.
Pour enregistrer un ActiveX :
regsvr32.exe <fichier>Pour l'opération inverse :
regsvr32.exe /u <fichier>Ce message a lieu si un ou plusieurs fichiers systèmes à mettre à jour sont chargés en mémoire par Windows au démarrage du système. Le fichier étant chargé en mémoire, Windows doit avoir redémarré pour que la version incluse dans votre setup soit chargée à la place de la version actuelle. Pour éviter ce désagrément, regardez quels sont les fichiers présents dans la section [bootstrap files] du fichier setup.lst. Vous pouvez fournir dans votre setup les versions de ces fichiers qui sont livrées avec VB6, plutôt que les mises à jour qui ont été installées sur votre système. En effet, plus les versions que vous fournirez seront récentes, plus les postes clients devant redémarrer lors de l'installation de votre programme seront nombreux. Les versions incluses dans votre setup sont celles qui sont présentes dans votre répertoire système.
Vérifiez aussi dans le fichier setup.lst que le fichier msvcrt.dll n'est pas dans la section [setup1 files] mais [bootstrap files], et déplacez-le dans cette section le cas échéant.
Si vous utilisez l'assistant d'empaquetage et déploiement, ajoutez le fichier Mdac_typ.exe à votre paquetage, et choisissez $(AppPath) pour son répertoire de destination. Lors de l'installation, le setup exécutera Mdac_typ.exe avant d'installer vos fichiers.
Pour pouvoir installer MDAC sous Windows 95 et Windows 98, vous devez d'abord avoir installé respectivement DCOM95 et DCOM98.
Le principe repose sur la création de plusieurs clés dans la base de registres. Il existe deux méthodes : l'utilisation du Windows Script Host Object Model et celle des API Windows.
Avec Wshom.ocx :
Dim MaCle As WshShell 'ou As object
Set MaCle = New WshShell 'ou Set MaCle = CreateObject("WScript.Shell")
'nom de votre type de fichier
MaCle.RegWrite "HKEY_CLASSES_ROOT\Test Ext\", "Test Ext", "REG_SZ"
'commande a exécuter pour ouvrir les fichiers de ce type
MaCle.RegWrite "HKEY_CLASSES_ROOT\Test Ext\shell\open\command\", "C:\jmarc\FAQ\TestExt.exe %1", "REG_SZ"
'icone à utiliser pour représenter les fichiers de ce type, ici la troisième icone contenue dans TestExt.exe
'(la première icone a l'index 0)
MaCle.RegWrite "HKEY_CLASSES_ROOT\Test Ext\DefaultIcon\", "C:\jmarc\FAQ\TestExt.exe,2", "REG_SZ"
""
'extension correspondant à ce type de fichier
MaCle.RegWrite "HKEY_CLASSES_ROOT\.jmr\", "Test Ext", "REG_SZ"Avec les anciennes versions de Wshom.ocx, la classe WshShell s'appelle IWshShell_Class.
Avec les API :
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String, _
phkResult As Long) As Long
Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" _
(ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal dwType As Long, ByVal lpData As String, _
ByVal cbData As Long) As Long
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const MAX_PATH = 255
Private Const REG_SZ = 1
Private Sub cmdAssocExt_Click()
Dim MaCle As Long
Call RegCreateKey(HKEY_CLASSES_ROOT, "Test Ext", MaCle)
Call RegSetValue&(MaCle, "", REG_SZ, "Test Ext", 0&)
Call RegSetValue&(MaCle, "shell\open\command", REG_SZ, "C:\jmarc\FAQ\TestExt.exe %1", MAX_PATH)
Call RegSetValue&(MaCle, "DefaultIcon", REG_SZ, "C:\jmarc\FAQ\TestExt.exe,2", MAX_PATH)
Call RegCreateKey&(HKEY_CLASSES_ROOT, ".jmr", MaCle)
Call RegSetValue&(MaCle, "", REG_SZ, "Test Ext", 0&)
End SubDans les deux cas, tout fichier ayant une extension ".jmr" sera ouvert avec le programme TestExt.exe.
Un autre exemple de programmer ces actions :
Private Declare Sub SHChangeNotify Lib "shell32.dll" ( _
ByVal wEventId As Long, _
ByVal uFlags As Long, _
dwItem1 As Any, _
dwItem2 As Any)
Private Const SHCNE_ASSOCCHANGED = &H8000000
Private Const SHCNF_IDLIST = &H0&
Private Function Associer(AdApp As String, AdIcon As String, Extention As Variant, NomDuFichier As String) As Boolean
On Error GoTo F
Set WshShell = CreateObject("Wscript.Shell")
For v = LBound(Extention, 1) To UBound(Extention, 1)
WshShell.RegWrite "HKEY_CLASSES_ROOT\." & Extention(v) & "\", NomDuFichier, "REG_SZ"
Next v
AdSp = "HKEY_CLASSES_ROOT\" & NomDuFichier & "\"
WshShell.RegWrite AdSp, "Khorne File Crypted", "REG_SZ"
WshShell.RegWrite AdSp & "DefaultIcon\", AdIcon, "REG_SZ"
WshShell.RegWrite AdSp & "Shell\open\command\", Chr(34) & AdApp & Chr(34) & " %1", "REG_SZ"
SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0
Associer = True
F:
End Function
Private Sub Form_Load()
Insérer
End Sub
Sub Insérer()
ExtentionAMettreEnRelation = Array("kh1", "kh2", "kh4")
CheminDeLAppli$ = "d:\sp\Khorne.exe"
CheminDeLicone$ = "d:\sp\Khorne.ico"
NomDuGenreDeFichier$ = "Image Cryptée Spécifique"
If Associer(CheminDeLAppli$, CheminDeLicone$, ExtentionAMettreEnRelation, NomDuGenreDeFichier$) Then
MsgBox "Changement réussi.", vbInformation, "Super ça a marché!!!"
Else
If (MsgBox("Ca n'a pas marché car l'un des paramétres insérés est mauvais.", vbCritical + vbYesNo, "Erreur") = vbYes) Then Insérer
End If
End Sub


