IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

intégration fichier d'aide .chm


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut intégration fichier d'aide .chm
    Bonjour,

    Auparavant mes fichiers d'aide étaient au format .hlp.

    Les dernières versions de Windows les rendant difficilement utilisables.
    J'ai donc grâce à la contribution du forum converti mes fichiers d'aides sans trop de difficulté au format .chm.

    je souhaite maintenant les intégrer à mes applications, sachant qu'il n'y a pas de contexte à gérer....

    Avec un bouton... ça passe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      HtmlHelp(Application.Handle,
      PChar('NINAPERF.CHM'), 
      HH_DISPLAY_TOPIC, 0);
    Il en va tout autrement de la gestion de la touche F1

    j'ai modifié de la façon suivante le .DPR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...           
               If Main.Autorise_Appli then
                  begin
                    Application.CreateForm(TCopyrightNinaPerf, CopyrightNinaPerf);
                    Application.CreateForm(TCorrection, Correction);
                    Application.HelpFile := 'NINAPERF.CHM';
                  end;  
                Application.Run;
                ReleaseMutex(Appli);
                CloseHandle(Appli);
              end;
    Dans TMain.Form

    HelpContext est mis à 1 // doit être different de zero.
    HelpFile est mis à ‘NINAPERF.chm’



    Merci par avance pour toute info.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 426
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 426
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonsoir à toutes et à tous,

    @ F@bien.fd, j'ai testé une approche :

    Avec F1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    if Key = VK_F1 then  showmessage('touche F1 appuyée');
    end;
    Avec un Tbutton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var
    noma, chappli : string;
    begin
    chappli := ExtractFilePath(Application.ExeName);
     
    noma := chappli + 'NINAPERF.CHM';
     
    if fileexists(noma) then
    ShellExecute(Handle,'Open',PChar(noma),'', '',SW_SHOWMAXIMIZED) else
    showmessage('le fichier d''aide n''existe pas ou n''est pas dans le bon dossier !');
    end;
    Edit, ceci fonctionne correctement sous D6 et Seven 64bits:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
    noma, chappli : string;
    begin
     
    chappli := ExtractFilePath(Application.ExeName);
     
    noma := chappli + 'NINAPERF.CHM';
     
    if Key = VK_F1 then 
    if fileexists(noma) then
     
    ShellExecute(Handle,'Open',PChar(noma),'', '',SW_SHOWMAXIMIZED) 
    else
    showmessage('le fichier d''aide n''existe pas ou n''est pas dans le bon dossier !');
    end;
    @+,

    Cincap

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    Merci pour cette réponse...
    Elle me pose néanmoins un soucis.

    A chaque fois que l'on envoie F1, elle ouvre une aide supplémentaire. On peut l’empêcher par une variable sur le bouton mais pas sur F1.

    J'ai bien trouvé une méthode qui permet de gérer les aides contextuelles, mais elle n'ouvre pas le fichier d'aide si on clic F1 après avoir cliqué sur la MainForm.

    J'intègre dans les uses hh_funcs et hh en rajoutant les modules hh_funcs.pas et hh.pas issues de phidels.com.
    Puis je rajoute le fichier aide.pas compilé par HelNDoc utilisant le fichier aide.chm. Ce fichier indique tous les topic de l'aide.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // Project: Aide 
    // Generated by HelpNDoc - http://www.helpndoc.com
     
    unit Aide_concernant_NinaPerf;
     
    interface
     
    const
      // Format: HELP_help-id = help-context
      HELP_AideNinaPerf = 1; 				 // Topic: "Aide NinaPerf"
      HELP_Sommaire = 2; 				 // Topic: "Sommaire."
      HELP_NiNaPerf = 3; 				 // Topic: "NiNaPerf..."
      HELP_Introduction = 4; 				 // Topic: "Introduction."
      HELP_TitrecodeIsinetcodeSicovam = 5; 				 // Topic: "Titre, code Isin et code Sicovam."
      HELP_Prixderevient = 6; 				 // Topic: "Prix de revient."
      HELP_Performance = 7; 				 // Topic: "Performance."
      HELP_Modedemploi = 8; 				 // Topic: "Mode d'emploi."
      HELP_Descriptiondelinterface = 9; 				 // Topic: "Description de l'interface."
    ..... etc....
    ensuite voici sur une petite appli comment je le gère... Je n'ai rien inventé, j'ai simplement essayé d'adapter...

    Après avoir chargé dans la propriété HelpContext des composants que l'on souhaite expliquer, la valeur correspondant au topic pour chacun d'eux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Spin, Buttons, AppEvnts, hh,hh_funcs ,Menus;   // Aide_concernant_NinaPerf,
     
    type
      TForm1 = class(TForm)
        SpinEdit1: TSpinEdit;
        SpinEdit2: TSpinEdit;
        Edit1: TEdit;
        Label1: TLabel;
        ButtonPlus: TButton;
        ButtonMoins: TButton;
        ButtonAideResultatContexte: TButton;
        Memo3: TMemo;
        ButtonAideResultatTopic: TButton;
        Memo1: TMemo;
        procedure ButtonAideResultatContexteClick(Sender: TObject);
        procedure ButtonAideResultatTopicClick(Sender: TObject);
        function FormHelp(Command: Word; Data: Integer;
                          var CallHelp: Boolean): Boolean;
        procedure FormCreate(Sender: TObject);
        procedure FormClick(Sender: TObject);
     
      private
        {Déclarations privées }
        procedure MessageAide(var msg:TMessage); message WM_HELP;
        function HelpHook(Command: Word; Data: LongInt; var CallHelp: Boolean): Boolean;  //   HelpHook
     
      public
      {Déclarations publiques }
       mHelpFile: string; //Variable servant à stocker le chemin du fichier CHM
       function AfficheAide(Data: Integer): Boolean;
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
    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';
     
    function TForm1.HelpHook(Command: Word; Data: LongInt; var CallHelp: Boolean): Boolean;
    begin
      CallHelp := False; //Désactivation des appels à l'aide 16-bit
      //Test sur le paramètre Command qui permet de savoir le type d'aide à ouvrir
      if (Command in [Help_Context]) then
        HtmlHelp(0, PChar(mHelpFile), HH_HELP_CONTEXT, Data) //Ouverture de l'aide
      else
        CallHelp := true; //En cas d'erreur, réactivation des appels à l'aide 16-bit
        result := true;
    end;
     
     
    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
     
       Memo1.Lines.Add(inttostr(Resultat));  //  pour visualiser dans le test
     
       Result:= (0<>Resultat);
    end;
     
    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;
     
    /////////////////////////////////////////////////////////////////////////////
    // Implémentation des procédures propres aux boutons
    /////////////////////////////////////////////////////////////////////////////
     
    procedure TForm1.ButtonAideResultatContexteClick(Sender: TObject);
    //Pour un Bouton "normal", il faut implémenter son
    //évènement OnClick de façon à déclencher "à la main"
    //l'aide. Ici, on montre une solution en utilisant un "Context"
    begin
      AfficheAide(6);
    end;
     
    procedure TForm1.ButtonAideResultatTopicClick(Sender: TObject);
    //Ici : un accès direct. (qui redonne la dernière page affichée).
    begin
      HtmlHelp(Application.Handle,
      PChar('Aide.chm'),
      HH_DISPLAY_TOPIC, 0);
    end;
     
    function TForm1.FormHelp(Command: Word; Data: Integer;
                             var CallHelp: Boolean): Boolean;
    begin
        HtmlHelp(Application.Handle,
        PChar('Aide.chm::/resultat.htm'),
        HH_DISPLAY_TOPIC, 0);
    end;
     
    end.
    La mainForm ne redonne pas son topic mais seulement le dernier montré...

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 426
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 426
    Points : 1 326
    Points
    1 326
    Par défaut
    @ F@bien.fd,

    A chaque fois que l'on envoie F1, elle ouvre une aide supplémentaire. On peut l’empêcher par une variable sur le bouton mais pas sur F1
    Je n'ai pas de souci à ce niveau la avec une nouvelle application, l'appui sur F1 m'affiche mon fichier "chm".

    As tu essayé directement dans l'inspecteur d'objets, les propriétés "HelpFile" et "HelpType", en principe ces propriétés sont gérée par F1 et ouvre le fichier "aide" qui se trouve dans le dossier de l'application.

    La méthode que tu annonces, je l'ai testée depuis un certain temps et le résultat n'a jamais été performant.

    Edit, impérativement la propriété "KeyPreview" de ta "form" à true.

    Je viens d'inclure mon code proposé en 1er, dans une ancienne application et cela fonctionne sous Seven 64bits.

    @+,

    Cincap

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    merci,
    Déjà effectivement "KeyPreview" de ta "form" était à false.

    je vais regarder où en sont les réglages que tu m'a indiqués de surveiller.
    "HelpType" correspond bien suffixe .chm de l'aide ?

    Apparemment j'ai toujours autant de fichiers d'aide qui s'ouvrent que de fois ou on appelle l'aide...

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 426
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 426
    Points : 1 326
    Points
    1 326
    Par défaut
    F@bien.fd,

    As tu vu ce lien, htmlhelp dans le cours Java jmdoudou : http://java.developpez.com/cours/

    Sinon avec les unités HTMLHelpViewer, HelpFile dans le uses

    Et ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    if Key = VK_F1 then HtmlHelp(0, pchar(Application.HelpFile), HH_HELP_CONTEXT, 30);
    end;
    J'arrive bien au topic n° 30 indiqué dans le sommaire du fichier "Aide" de test !

    @+,

    Cincap

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Depuis plusieurs versions déjà, l'aide en HTML est supportée.

    Sinon il serait peut être plus judicieux d'intercepter le message WM_HELP plutôt que de tester la touche F1.

  8. #8
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    Mais pour construire mes fichiers d'aide .HTML, .HCM ou .PDF, j'utilise HelpnDoc qui est super à mon sens.



    Citation Envoyé par cincap Voir le message
    Sinon avec les unités HTMLHelpViewer, HelpFile dans le uses
    Et ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    if Key = VK_F1 then HtmlHelp(0, pchar(Application.HelpFile), HH_HELP_CONTEXT, 30);
    end;
    J'arrive bien au topic n° 30 indiqué dans le sommaire du fichier "Aide" de test !
    ça je vais examiner, j'avais essayé un code proche de cela mais ça me donnait toujours la page index...

  9. #9
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par cincap Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    if Key = VK_F1 then HtmlHelp(0, pchar(Application.HelpFile), HH_HELP_CONTEXT, 30);
    end;
    semble fonctionner si je laisse les uses hh_funcs et hh SANS rajouter les modules hh_funcs.pas et hh.pas issues de phidels.com au projet . Et si j'enlève le uses hh_funcs, ça fonctionne.

    Par contre si je remplace par HTMLHelpViewer, HelpFile ça plante... HtmlHelp ne passe pas.

  10. #10
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    La solution fonctionne mais me chagrine...
    Ne disposant pas des uses HTMLHelpViewer et HelpFile, j'ai laissé uniquement la uses hh SANS rajouter au projet les modules hh_funcs.pas et hh.pas issues de phidels.com. J'ai uniquement conservé dans le dossier de travail le module hh.dcu suffisant pour la compilation au projet.
    Voici le code du test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Spin, Buttons, AppEvnts, Menus, hh, shellapi;
     
    type
      TForm1 = class(TForm)
        SpinEdit1: TSpinEdit;
        SpinEdit2: TSpinEdit;
        Edit1: TEdit;
        Label1: TLabel;
        ButtonPlus: TButton;
        ButtonMoins: TButton;
        ButtonAideResultatContexte: TButton;
        Memo3: TMemo;
        ButtonAideResultatTopic: TButton;
        Memo1: TMemo;
        Button1: TButton;
        procedure FormKeyDown(Sender: TObject; var Key: Word;
                              Shift: TShiftState);
        procedure Button1Click(Sender: TObject);
     
      private
        {Déclarations privées }
        procedure MessageAide  (var msg:TMessage); message WM_HELP;
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
     
     
    procedure TForm1.MessageAide( var msg:TMessage);
    begin
    // A conserver pour ne pas récupérer de message d'erreur
    end;
     
     
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
                                 Shift: TShiftState);
    begin
     if Key = VK_F1 then HtmlHelp(0, pchar('Aide concernant NinaPerf.chm'), HH_HELP_CONTEXT, 3);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      HtmlHelp(0, pchar('Aide concernant NinaPerf.chm'), HH_HELP_CONTEXT, 3);
    end;
     
    end.
    Voici ce qui m'ennuie...
    Je suis obliger dans la déclaration privée de laissé subsister la procédure
    MessageAide (var msg:TMessage); message WM_HELP; sous peine de récupérer message d'erreur suivant en appuyant sur F1 alors que ça passe tout seul avce le clic sur le bouton

    message d'erreur

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 426
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 426
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ F@bien.fd, je vais essayer de transmettre les fichiers HTMLHelpViewer et HelpFile pour ton test.

    @ Andnotor, je n'ai jamais affiché mon fichier d'aide personnelle avec F1 mais avec un TButton, je vais tenter d'explorer ta suggestion.

    @+,

    Cincap
    Fichiers attachés Fichiers attachés

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 426
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 426
    Points : 1 326
    Points
    1 326
    Par défaut
    @ F@bien.fd

    Rien que ceçi fonctionne correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, HTMLHelpViewer;
     
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
       procedure WMHELP(var Msg: TWMHelp); message WM_HELP;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.WMHELP(var Msg: TWMHelp);
    var
       ActiveCtrlID: Integer;
    begin
       ActiveCtrlID:= Screen.ActiveControl.HelpContext;
       //handle help ton message içi.
      //Test showmessage('ok');
      HtmlHelp(0, pchar(Application.HelpFile), HH_HELP_CONTEXT, 30);//Fichier avec Index !
    //ShellExecute(Handle,'Open', PChar(Application.HelpFile),nil,nil,SW_SHOWDEFAULT); //Si simple fichier *.chm sans Index et sans "HTMLHelpViewer" dans le uses
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     Application.HelpFile := ExtractFilePath(Application.ExeName) +
        'HelpFile.chm'; //Fichier sans index "Aide.chm"
    end;
     
    end.
    @+,

    Cincap

  13. #13
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    merci pour l'envoi ...

    dans les prochaines appli, je pense que je l'intégrerai. Pour l'heure voici comment j'ai pratiqué sur l'appli que je mets à jour. Sachant qu'elle peut fonctionner de 95 à seven, évidemment les fichiers d'aides doivent être distinctifs.J'avais déjà été ammené à identifier les différentes configurations.
    Je les ai réparties ensuite en deux groupe :
    - avant Xp
    - XP et les suivantes...
    une variable globale identifie les deux cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    unit UnitMain;
    interface
    uses
      Windows, Messages, [...], ImgList, Appel_PVMV, WinInet, hh;
    
      private                                      
      { Déclarations privées }
        procedure MessageAide(var msg:TMessage); message WM_HELP;
    
    var
    ....
      Version_type_XP: Boolean; // Signale si la version est du type XP.ou +

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TMain.MessageAide( var msg:TMessage);
    begin
    // A conserver pour ne pas récupérer de message d'erreur
    end;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    procedure TMain.FormCreate(Sender: TObject);
    var
      I, J        : Integer;
      Jour        : String;
      PathAppli   : String;
      Rect        : TRect;
      Fichier_Info: TIniFile;
      BitMap      : TBitMap;
     
    begin
    // Que l'on soit en mode Anglais(US) ou Français le format
    // des dates et du séparateur décimal seront conservés.
      DecimalSeparator := ',';  // 2012/11/30
      ShortDateFormat := 'dd/mm/yy'; // 2012/11/30
     
     
      Version_Windows := WindowsVersion;
      If (Version_Windows = 'Windows XP') or
         (Version_Windows = 'Windows Vista') or
         (Version_Windows = 'Windows Seven')
        then Version_type_XP := True
        else Version_type_XP := False;
    ...
     
    // Choix du type de fichier d'aide selon la configuration.
    // Par défaut il s'agit de Ninaperf.hlp :
    // par défaut HelpFile est à 'Ninaperf.hlp',
    // par défaut HelpContext est à 2000,
    // par défaut KeyPreview reste à True.
      If Version_type_XP then
        begin
          HelpFile := 'Ninaperf.chm';
          HelpContext := 1;
        end;
    Traitement de l'aide sur l'application en utilisant la touche F1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    procedure TMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    var
      nom: String;
    begin
      If Key = VK_F1 then
        begin
          If not Desactivationdescommandes1.Checked then // Mise à jour du journal de bord.
            begin
              If Version_type_XP then nom := 'NinaPerf.chm'
                                 else nom := 'NinaPerf.hlp';
              EcrireFichierLog('-> appel au fichier d''aide ' + '''' + nom + '''' +
                               ' avec la touche ' + '''' + 'F1' + '''' + '.', 2)
            end;
          If Version_type_XP // Si la version est au moins égale à Windows XP...
            then HtmlHelp(0, pchar('NinaPerf.chm'), HH_HELP_CONTEXT, 1) // appeler l'aide '.CHM'...
            else Application.HelpJump('som'); // sinon appeler l'aide '.HLP'...
        end
    end;
    Traitement de l'aide avec action sur le bouton d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TMain.AideNinaPerf1Click(Sender: TObject);
    var
      nom: String;
    begin
      If not Desactivationdescommandes1.Checked then // Mise à jour du journal de bord.
        begin
          If Version_type_XP then nom := 'NinaPerf.chm'
                             else nom := 'NinaPerf.hlp';
          EcrireFichierLog('-> appel au fichier d''aide ' + '''' + nom + '''' + '.', 2)
        end;
      If Version_type_XP // Si la version est au moins égale à Windows XP...
        then HtmlHelp(0, pchar('NinaPerf.chm'), HH_HELP_CONTEXT, 8) // appeler l'aide '.CHM'...
        else Application.HelpJump('som'); // sinon appeler l'aide '.HLP'...
    end;
    merci de toute l'attention que vous avez apporté à mon soucis.

    Dès que je mets en ligne, je vous donne les liens pour éventuellement l'utiliser.

  14. #14
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut Pour ceux que ça intéresse.
    Pour l'installateur de l'application :
    http://fabien.fd.free.fr/Bourse/Appl...on%20Alpha.zip ou http://fabien.fd.free.fr/Bourse/Appl...on%20Alpha.rar

    Après enregistrement et décompression lancer l'installation avec Lanceur.exe.

    rappel : Une fois installée, on peut la copier/coller autant de fois que l'on veut l'application dans différents dossiers, mais elles ne peuvent pas fonctionner simultanément, c'est délibéré.

    La dernière version de l'application mise à jour est systématiquement en ligne à l'adresse suivante :
    http://fabien.fd.free.fr/Bourse/Appl...s/NinaPerf.zip ou http://fabien.fd.free.fr/Bourse/Appl...s/NinaPerf.rar

    La dernière version de l'aide mise à jour est systématiquement en ligne à l'adresse suivante :
    http://fabien.fd.free.fr/Bourse/Appl.../aide_Nina.zip ou http://fabien.fd.free.fr/Bourse/Appl.../aide_Nina.rar

    Encore merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'un fichier d'aide chm avec HelpNdoc et intégration à Delphi
    Par gaby277 dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 26/02/2014, 15h26
  2. Réponses: 2
    Dernier message: 13/06/2006, 20h47
  3. Réponses: 11
    Dernier message: 04/01/2006, 17h32
  4. Lire et décoder un fichier d'aide CHM
    Par bob2553 dans le forum Outils
    Réponses: 6
    Dernier message: 22/06/2005, 19h21
  5. Réponses: 3
    Dernier message: 09/06/2005, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo