Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1015 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Fichier CHM et HHCTRL.OCX

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fichier CHM et HHCTRL.OCX

n°1253452
Tetranos
Posté le 25-11-2005 à 18:50:24  profilanswer
 

Bonjour à tous...
 
Je suis en train de développer un logiciel dans lequel j'ai besoin d'ouvrir des fichiers d'aide CHM. J'ai presque atteinds mon but en utilisant l'ocx HHCTRL de la façon suivante :
 

Code :
  1. //szPath : le fichier CHM à ouvrir
  2. //szParams : le mot recherché dans l'index
  3. iHdle := LoadLibrary('HHCTRL.OCX');
  4. @HtmlHelp := GetProcAddress(iHdle,'HtmlHelpA');
  5. iHelpHdle := HtmlHelp(0, PChar(szPath), HH_DISPLAY_INDEX, Cardinal(PChar(szParams)));


 
Ceci à bien pour effet d'ouvrir le fichier CHM et de mettre le mot (szParams) dans la zone de saisie de l'onglet Index, mais je souhaite maintenant que la section correspondante au mot recherché soit directement affichée (en gros faire comme si l'utilisateur avait cliqué sur le bouton afficher).
 
Voilà...j'attends vos pistes et solutions...
 
Par avance merci.

mood
Publicité
Posté le 25-11-2005 à 18:50:24  profilanswer
 

n°1253505
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-11-2005 à 20:54:20  profilanswer
 

Il suffit de lancer hh.exe avec certains paramètres il me semble :??:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1253590
Tetranos
Posté le 26-11-2005 à 00:49:38  profilanswer
 

Je pense pas qu'on puisse appeler directement l'exe avec des paramètres, en tout cas j'ai rien trouvé sur le net dans ce sens. J'ai quand même fini par trouver quelque chose.
 
Voici la solution (en tout cas une solution) :
 
1. Utiliser la fonction HtmlHelpA de l'ocx HHCTRL. Dans les exemples trouvés sur Internet la fonction est généralement liée en statique.
 

Code :
  1. function HtmlHelp(hwndCaller: HWND; pszFile: PChar; uCommand: UINT; dwData: DWORD): HWND; stdcall; external 'HHCTRL.OCX' name 'HtmlHelpA';


 
Mais il est également possible de lier dynamiquement la fonction.
 
2. Définir les variables d'appels aux commandes de HtmlHelp.
 

Code :
  1. HH_DISPLAY_TOPIC        = $0000;
  2. HH_HELP_FINDER          = $0000;
  3. HH_DISPLAY_TOC          = $0001;
  4. HH_DISPLAY_INDEX        = $0002;
  5. HH_DISPLAY_SEARCH       = $0003;
  6. HH_SET_WIN_TYPE         = $0004;
  7. HH_GET_WIN_TYPE         = $0005;
  8. HH_GET_WIN_HANDLE       = $0006;
  9. HH_ENUM_INFO_TYPE       = $0007;
  10. HH_SET_INFO_TYPE        = $0008;
  11. HH_SYNC                 = $0009;
  12. HH_KEYWORD_LOOKUP       = $000D;
  13. HH_DISPLAY_TEXT_POPUP   = $000E;
  14. HH_HELP_CONTEXT         = $000F;
  15. HH_TP_HELP_CONTEXTMENU  = $0010;
  16. HH_TP_HELP_WM_HELP      = $0011;
  17. HH_CLOSE_ALL            = $0012;
  18. HH_ALINK_LOOKUP         = $0013;
  19. HH_GET_LAST_ERROR       = $0014;
  20. HH_ENUM_CATEGORY        = $0015;
  21. HH_ENUM_CATEGORY_IT     = $0016;
  22. HH_RESET_IT_FILTER      = $0017;
  23. HH_SET_INCLUSIVE_FILTER = $0018;
  24. HH_SET_EXCLUSIVE_FILTER = $0019;
  25. HH_INITIALIZE           = $001C;
  26. HH_UNINITIALIZE         = $001D;
  27. HH_PRETRANSLATEMESSAGE  = $00FD;
  28. HH_SET_GLOBAL_PROPERTY  = $00FC;


 
Toutes ces commandes sont disponibles mais HH_DISPLAY_TOC et HH_KEYWORD_LOOKUP suffisent.
 
3. Définir la structure qui va être passé en paramètre de l'appel HH_KEYWORD_LOOKUP
 

Code :
  1. tagHH_AKLINK = record
  2.     cbStruct : Integer;
  3.     fReserved : Boolean;
  4.     pszKeywords : Cardinal;
  5.     pszUrl : Cardinal;
  6.     pszMsgText : Cardinal;
  7.     pszMsgTitle : Cardinal;
  8.     pszWindow : Cardinal;
  9.     fIndexOnFail : Boolean;
  10.   end;
  11.   HH_AKLINK = tagHH_AKLINK;
  12.   PHH_AKLINK = ^HH_AKLINK;


 
4. Remplir la structure HH_AKLINK
 

Code :
  1. iLink : PHH_AKLINK;
  2.       ...
  3.       new(iLink);
  4.       iLink.cbStruct := SizeOf(HH_AKLINK);
  5.       iLink.fReserved := False;
  6.       iLink.pszKeywords := Cardinal(PChar(szParams));
  7.       iLink.pszUrl := 0;
  8.       iLink.pszMsgText := 0;
  9.       iLink.pszMsgTitle := 0;
  10.       iLink.pszWindow := Cardinal(PChar('main'));
  11.       iLink.fIndexOnFail := True;


 
5. Ouvrir l'aide grâce à ces deux appels :
 

Code :
  1. HtmlHelp(0, PChar(szPath), HH_DISPLAY_TOC, 0);
  2. HtmlHelp(0, PChar(szPath), HH_KEYWORD_LOOKUP, Cardinal(iLink));


 
Avec szParams le mot recherché et szPath le chemin vers le fichier CHM.
 
HtmlHelp renvoie le handle de l'aide. Il est donc possible de tester si l'aide a pu être ouverte en regardant si le handle n'est pas nul.
 
Voilà vous savez tout, de l'aide est dispo aux adresses suivantes :
 
http://www.paranoia.clara.net/arti [...] _help.html
http://msdn.microsoft.com/library/ [...] lookup.asp
http://msdn.microsoft.com/library/ [...] aklink.asp (explique comment remplir la structure)
http://bdn.borland.com/article/0,1410,27842,00.html

Message cité 1 fois
Message édité par Tetranos le 26-11-2005 à 00:53:42
n°1253619
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-11-2005 à 10:29:05  profilanswer
 

Tetranos a écrit :

Je pense pas qu'on puisse appeler directement l'exe avec des paramètres, en tout cas j'ai rien trouvé sur le net dans ce sens.


 
Il y a des paramètres, c'est sûr.  
Pour lancer l'aide sur une rubrique précise il y a ceci que j'ai utilisé :
  Format('hh.exe -mapid %d %s', [HelpContext, strHelpFile])
Je ne suis plus sûr par contre qu'on peut passer un mot clé.  
Mais il y a ça sinon :
http://www.keyworks.net/keyhh.htm
Enfin, ta solution est probablement meilleure, merci de l'avoir postée ;)


Message édité par antp le 26-11-2005 à 10:29:38

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1277092
Tetranos
Posté le 04-01-2006 à 18:42:47  profilanswer
 

Désolé de remonter ce message mais la solution que j'ai donnée n'est pas totalement juste alors voici une précision.
 
En fait j'avais mal défini la structure ce qui provoque une erreur aléatoire. Voici comment la structure doit réellement être définie
 

Code :
  1. tagHH_AKLINK = record
  2.     cbStruct : Integer;
  3.     fReserved : BOOL;
  4.     pszKeywords : LPCTSTR;
  5.     pszUrl : LPCTSTR;
  6.     pszMsgText : LPCTSTR;
  7.     pszMsgTitle : LPCTSTR;
  8.     pszWindow : LPCTSTR;
  9.     fIndexOnFail : BOOL;
  10.   end;


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Fichier CHM et HHCTRL.OCX

 

Sujets relatifs
Supprimer HEX 1A en fin de fichier[serveur dédié] cmt prendre en compte les modifs du fichier de conf?
Modification d'un fichier vbscript[ASP] Lecture dans un fichier texte
[Résolu]Utiliser une fonction dans un fichier PHPutiliser un fichier .class sour eclipse
Boucle sur un fichier[VBS] afficher l'animation de copie de fichier - [résolu]
lecture date de fichier avec filemtimecopie de fichier multimedia+envoie dans un lecteur
Plus de sujets relatifs à : Fichier CHM et HHCTRL.OCX


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR