Recherche
1 connecté

  Actuellement : 0 commentaire

Utilisation des fichier d'aide .CHM :
intégration dans Delphi : aide contextuelle

dernière mise à jour le : 12/22/03

Introduction

Delphi, au moins jusqu'à la version D7 n'est pas conçu pour utiliser directement les aide CHM dans les aides contextuelles.
Nous allons donc faire ça un peu "à la main" mais, rassurez-vous : rien de très compliqué.

A noter que je n'ai pas voulu utiliser directement l'évènement OnHelp de l'application ou de la Form car cela ne fonctionne pas avec toutes les versions de Delphi.

Dans tout ce qui suit, on supposera le fichier .CHM déjà créé comme indiqué à la leçon précédente. De même, on partira du programme créé à cette occasion Pour télécharger les fichiers de la leçon précédente, cliquez ici mais en retirant toutes les fonctions et procédures présentes dans l'unit1 sauf :

const
  HH_HELP_CONTEXT         = $000F;
  HH_DISPLAY_TOPIC        = $0000;

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

Programmation:

  • La forme principale de notre application possède une propriété HelpFile qui contiendra le nom de notre fichier .CHM .Ici, entrez 'TestAide.chm'
  • Les contrôles (composants) posés sur cette form possèdent une propriété HelpContext qui contiendra la valeur numérique correspondant à l'aide voulu . Cette valeur est celle que l'on avait inscrit dans le fichier d'extension .H. Entrez la valeur correspondante pour chaque contrôle de la Form1.
    Pour mémoire, nous avions rentré :
    	#define GENERALITE	1000
    	#define ADITION		1001
    	#define SOUSTRACTION	1002
    	#define RESULTAT	1003
  • Création d'une fonction qui sera chargée d'appeler le fichier d'aide :

Ajouter dans la partie public de la déclaration de Form1 :

  public
    function AfficheAide(Data: Integer): Boolean; 

Implémentez la comme suit :

function TForm1.AfficheAide( Data: Integer) : Boolean;
var Resultat:HWND;
begin
      Resultat:=HtmlHelp(Application.Handle,
      PChar(HelpFile), // Propriété de Form1
      HH_HELP_CONTEXT,
      Data); // correspond à la propriété HelpContext
      Result:=(0<>Resultat)
end;

 

  • Il faut maintenant créer une fonction qui sera déclenchée à chaque fois que l'aide sera déclenchée par F1 c'est à dire à chaque fois que la Form recevra un message WM_HELP. (Pour plus de compréhension, allez voir le tutorial sur les messages).

Dans la partie private, entrez :

private
	procedure MessageAide (var msg:TMessage); message WM_HELP;

Dans la partie implémentation, implémentez cette fonction comme suit :

procedure TForm1.MessageAide( var msg:TMessage);
// cette procédure est déclenchée automatiquement à chaque fois
// qu'un utilisateur demande de l'aide (F1)
begin
    // S'il est différent de 0, on passe le HelpContext du contrôle (=du composant)
    //qui a le focus
    if ActiveControl.HelpContext<>0 then
    begin
      if not AfficheAide(ActiveControl.HelpContext)
      then ShowMessage('Erreur. Vérifiez la présence du fichier .chm dans le bon dossier');
    end;
    //inherited;// si on veut continuer à propager le message. Ici : non
end;
  • Lancez votre programme (F9) et testez. Lorsque vous cliquez sur F1, l'aide contextuelle voulue doit s'afficher.

 

Pour télécharger tous les fichiers de cette partie : cliquez ici