1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| Unit Utils;
Interface
Uses
Windows, Messages, SysUtils, Classes, TLHelp32;
Const
// constante utilisée pour afficher l'aide selon divers paramètres
HH_DISPLAY_TOPIC = $0000;
HH_DISPLAY_TOC = $0001;
HH_CLOSE_ALL = $0012;
Type
// type utilisé pour récupérer la fonction contenue dans le OCX chargé par la fonction HtmlHelp
TFNHtmlHelpA = Function(hwndCaller: HWND; pszFile: PAnsiChar; uCommand: UINT; dwData: DWORD): HWND; Stdcall;
Var
HelpModule: HModule;
FHtmlHelp: TFNHtmlHelpA;
Procedure HtmlHelp(hwndCaller: HWND; pszFile: PChar; uCommand: UINT; dwData: DWORD; HelpFileName: String = ''; Language: String = '');
Function ExtractOfRes(ResName, FileName: String): Boolean;
Implementation
Procedure HtmlHelp(hwndCaller: HWND; pszFile: PChar; uCommand: UINT; dwData: DWORD; HelpFileName: String = ''; Language: String = '');
Begin
If Not FileExists(HelpFileName) Then // si le fichier d'aide n'existe pas
ExtractOfRes('help' + Language, HelpFileName); // alors on essaie de l'extraire selon la langue du programme actuel
If HelpModule = 0 Then // on vérifie que le module n'est pas déjà chargé et on le charge
Begin
HelpModule := LoadLibrary('HHCTRL.OCX'); // on charge le fichier OCX pour gérer le fichier d'aide
@FHtmlHelp := GetProcAddress(HelpModule, 'HtmlHelpA'); // on récupère l'adresse de la fonction qui permet d'afficher un fichier d'aide
End;
If (HelpModule <> 0) And (@FHtmlHelp <> nil) Then // le module est déjà chargé et on connaît l'adresse de la fonction
FHtmlHelp(hwndCaller, pszFile, uCommand, dwData); // on lance la commande qui permet d'afficher le fichier spécifié à la page demandée
End;
Function ExtractOfRes(ResName, FileName: String): Boolean;
Var
ResourceStream: TResourceStream;
FichierStream: TFileStream;
Begin
If FileExists(FileName) Then // on vérifie que le fichier à extraire n'existe pas déjà
DeleteFile(FileName); // sinon on le supprime
If Not FileExists(FileName) Then // si le fichier n'existe pas alors on l'extrait
Begin
ResourceStream := TResourceStream.Create(hInstance, ResName, RT_RCDATA); // création d'un flux mémoire donnant accès à la ressource compilé
Try
FichierStream := TFileStream.Create(FileName, fmCreate); // FileStream permet aux applications de lire et écrire dans un fichier disque.
Try
FichierStream.CopyFrom(ResourceStream, 0); // copie du flux donnant accès aux ressources vers le flux fichier
Finally
FichierStream.Free; //libération mémoire du stream fichier
End;
Finally
ResourceStream.Free; //libération mémoire du flux mémoire
End;
End;
Result := True;
End;
initialization
HelpModule := 0;
FHtmlHelp := nil;
End. |
Partager