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

Lazarus Pascal Discussion :

Appel par code à une aide HTML [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut Appel par code à une aide HTML
    Bonjour,

    Je suis désolé de poser une nouvelle fois la question de l'appel à une aide HTLM dans une feuille Lazarus, d'autant plus que j'ai déja été confronté au problème mais cette fois la solution que j'avais retenue échoue .
    Je dispose du fune feuille appelée F_Lanc à partir de laquelle je souhaite faire apparaître une aide au format html par appui sur la touche F1 sachant que les fichiers constitutifs de cette aide qui s'appelle BD_FastAD.htlm est parfaitement affichée par mon navigateur Firefox. Elle est placée dans un répertoire appelé DocHTML qui est un sous répertoire de celui qui héberge l'application construite avec Lazarus version 1.6 sous W10.
    Pour cela j'ai placé sur cette feuille F_Lanc les contrôles de l'onglet System HTLMH_DB1 et HTLM_Br1 renseignés par :
    - pour HTLMH_DB1 : autoregister à True ; Base URL appelé par code plus tard ; KeywordPrefix : 'HTLM/'
    - pour HTLMBr_1 : Autoregister à True BrowserParams à %s

    J'ai ensuite programmé par code à la création de la feuille F_Lanc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TF_Lanc.FormCreate(Sender: TObject);
       Var CheminAide2 : String ; // chemin d'accès à l'aide
    begin
       // Accès à l'aide par F1
        CheminAide2 := 'File:///D:Ap_Lazarus/Gene_AD/DocHTML/BD_FastAD.html' ;// accès à l'aide par la touche F1 - ce chemin est provisoire pour le test et sera ensuite remplacé par 'File://' + ExtractFilePath(Application.ExeName) +'DocHTML/' ;extractpathfilename(.exe)
        EDit1.Text := CheminAide2 ;
        HTMLH_DB1.BaseURL := CheminAide2 ;
        F_lanc.HelpType := htKeyword  ;
        F_lanc.HelpKeyword :='HTML/BD_FastAD.html' ;  
        //Fin accès à l'aide
    end;
    J'ai toujours un message d'erreur qui s'affiche : Ne trouve pas le mot clef 'HTML/BD_FastAD.html'

    Je vous serais reconnaissant de m'indiquer où cela ne colle pas.

    Merci

    R. O.

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Yep !
    Citation Envoyé par OR34a Voir le message
    cette aide qui s'appelle BD_FastAD.htlm est parfaitement affichée par mon navigateur Firefox.

    CheminAide2 := 'File:///D:Ap_Lazarus/Gene_AD/DocHTML/BD_FastAD.html' ;

    J'ai toujours un message d'erreur qui s'affiche : Ne trouve pas le mot clef 'HTML/BD_FastAD.html'

    Je vous serais reconnaissant de m'indiquer où cela ne colle pas.
    Dans l'extension du nom de fichier, peut-être ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut Suite à la réponse de jipété
    Bonjour,

    Merci pour la réponse rapide à ma discussion. Malheureusement ce n'est pas simplement une erreur d'extension de nom du fichier (htlm à la place de html) qui n'était qu'une coquille de frappe dans mon message. L'erreur doit se trouver quelque part au niveau de la définition du KeywordPrefix ou du mode de gestion de la feuille dans les instructions concernant l'appel à l'aide ( HelpContext, HelpFile, HelKeyword, HelpType) que l'on laisse généralement aux valeurs par défaut lors de la construction du code mais où? . D'ailleurs j'en profite pour poser une autre question sachant que, dans le code définitif le chemin d'accès à l'aide sera indiqué par le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheminAide2 := 'File://' + extractFilePath(application.exeName) + 'DocHTML/' ;
    et que cette instruction renvoie D:Ap_Lazarus\Gene_AD\DocHTML/' et non pas D:Ap_Lazarus/Gene_AD/DocHTML/ ' est-ce que le renvoi de l'antiSlah au lieu du slah est-il génant ?
    Cordialement

    R.O.

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Yep !
    Citation Envoyé par OR34a Voir le message
    Malheureusement ce n'est pas simplement une erreur d'extension de nom du fichier (htlm à la place de html) qui n'était qu'une coquille de frappe dans mon message.
    Je ne pouvais pas le deviner, même si je l'ai supposé.

    Citation Envoyé par OR34a Voir le message
    L'erreur doit se trouver quelque part au niveau de la définition du KeywordPrefix ou du mode de gestion de la feuille dans les instructions concernant l'appel à l'aide (HelpContext, HelpFile, HelKeyword, HelpType) que l'on laisse généralement aux valeurs par défaut lors de la construction du code mais où ?.
    Pas la moindre idée, je passe

    Citation Envoyé par OR34a Voir le message
    D'ailleurs j'en profite pour poser une autre question sachant que, dans le code définitif le chemin d'accès à l'aide sera indiqué par le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheminAide2 := 'File://' + extractFilePath(application.exeName) + 'DocHTML/' ;
    et que cette instruction renvoie D:Ap_Lazarus\Gene_AD\DocHTML/' et non pas D:Ap_Lazarus/Gene_AD/DocHTML/ ' est-ce que le renvoi de l'antiSlah au lieu du slah est-il génant ?
    Facile à tester, ça : if FileExists(CheminAide2 + 'nom_de_fichier_témoin') then... else...

    Et agir en fonction du résultat.

  5. #5
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut
    Bonsoir à tous

    @OR34a

    ajouter LCLintf et LCLType à uses; keypreview=True.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TF_Lanc.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
     var str:string;
    begin
      if key=VK_F1 then
      begin
      str:=ExtractFilePath(Application.ExeName)+'/DocHTML/BD_FastAD.html'
      OpenUrl(str);
      end;
    end;

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut
    Citation Envoyé par FOCUS77 Voir le message
    Bonsoir à tous

    @OR34a

    ajouter lclintf à uses; keypreview=True.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TF_Lanc.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
     var str:string;
    begin
      if key=VK_F1 then
      begin
      str:=ExtractFilePath(Application.ExeName)+'/DocHTML/BD_FastAD.html'
      OpenUrl(str);
      end;
    end;

    Bonjour Focus77,

    Merci pour votre réponse à ma question.

    J'ai bien compris que votre code indique que, lorsque l'on presse la touche F1 sur la procédure TF_Lanc.Form.KeyDown on ouvre l'URL correspondant au chemin indiqué dans la chaine de caractères str ce qui est parfait.
    J'ai 2 questions à ce sujet :
    - 1 : Chez moi (W10, Lazarus 32 version 1.6) l'essai renvoi une erreur sur if Key = VK_F1 Then ..... ( si je remplace VK_F1 par 'F1') j'obtien une erreur de type (String au lieu de Word) . Il s'agit certainement d'un problème de reconnaissance de la touche F1 par code dans l'EDI . Comment connaître ces codes pour le diverses touches ? J'utilise déjà #13 pour la touche Return sans problème.
    - 2 Est-ce que cette procédure dispense de la mise en place sur la feuille des contrôles THTMLHelpDatabase et THTMLBrowser et de la définition des propriétés liées à Help de la feuille ?

  7. #7
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut
    Bonjour à tous

    @OR34a

    Heureux que tu as réglé ton problème.

    1. Voici une piste pour la liste des virtuels keys:

    http://delphi.about.com/od/faqstipst...by-Windows.htm


    2. Oui tu n'as plus besoin de ces composants ( THTMLHelpDatabase et THTMLBrowser), moi je ne les utilise plus

    car ils ne sont pas nécessaires.

  8. #8
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Bonjour,

    De mémoire, les constantes Keys se trouvent dans l'unité LCLType (et non dans LCLIntf).

    A la liste mentionnée par Focus77, sous Lararus, tu as en plus les lettres et les chiffres : VK_A, VK_B, VK_1...

    Cordialement
    Thierry

  9. #9
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut
    Bonjour Thwilliam

    En fait LCLintf est pour OpenUrl() pas pour Virtuals keys.

    Les Virtuals keys appartiennent à l'unité Windows.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut Affichage aide suite
    Citation Envoyé par FOCUS77 Voir le message
    Bonjour à tous

    @OR34a

    Heureux que tu as réglé ton problème.

    1. Voici une piste pour la liste des virtuels keys:

    http://delphi.about.com/od/faqstipst...by-Windows.htm


    2. Oui tu n'as plus besoin de ces composants ( THTMLHelpDatabase et THTMLBrowser), moi je ne les utilise plus

    car ils ne sont pas nécessaires.

    Bonjour,

    Effectivement j'ai vu les clefs sur le lien et F1 correpond à 70.
    Maleureusement mon problème n'est pas réglé car si je spécifie l'appui sur la touche F1 ( ou une incompatibilité de type ( Got CHar expected LongWord ) est renvoyée à la compilation.
    Si je met la condition en remarque, bien sur l'appui sur n'importe qu'elle touche provoque l'affichage de l'aide !!!
    Donc question comment faire admettre que l'on doit utiliser la touche F1 et seulement elle pour afficher l'aide ? (Transtypage de #70 ou VK_1 en "type Word" .

  11. #11
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut
    Bonjour

    chez moi le code marche impeccablement pour un laz 1.6 Windows 7 32bits.
    personnellement je n'ai pas la réponse.

    Peut-être un problème lié à la configuration du système

  12. #12
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Bonjour Focus77,

    Sorry, je n'avais pas vu ton instruction OpenUrl.
    Pour les Keys : unité LCLType ou Windows. Sous Linux, tu n'as pas le choix.

    Bonjour OR34a,

    VK_F1 est égal à 70 en hexadécimal, soit 112 en décimal.
    Donc dans la procédure OnKeyDown tout ceci marche :
    if key = VK_F1 then...
    if key = 112 then...
    if key = $70 then...

    et non pas : #70

    Cordialement
    Thierry

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut Aide HTML - suite et fin
    Bonjour à tous,

    Un grand merci à tous, cela fonctionne enfin, après avoir été buté plusieurs jour (en pointillé heureusement).
    Pour information et terminer la discussion ci-après le code utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TF_Lanc.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
     var OuvrAid:string;
    begin
     if key = $70 then    //70 est le code de la touche F1 en delphi hexadecimal  (112 en decimal )
      begin
      OuvrAid :=ExtractFilePath(Application.ExeName)+'/DocHTML/BD_FastAD.html'   ;
      OpenUrl(OuvrAid);
      end;
    end;
    C'était pourtant simple... mais encore fallait-il y penser et déjouer le piège du codage de F1.

    Cordialement

    R.O.

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

Discussions similaires

  1. [Lazarus] Afficher une Aide HTML par la touche F1
    Par OR34a dans le forum Lazarus
    Réponses: 1
    Dernier message: 20/08/2015, 10h00
  2. Appel servlet depuis une page html
    Par aziz0108 dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 02/12/2008, 18h18
  3. Réponses: 1
    Dernier message: 08/09/2007, 17h12
  4. Comment appeller par code le contenu d'une liste
    Par sakia dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/05/2007, 19h50
  5. [HTML] Comment afficher une aide html & créer un jar // JDIC
    Par michaeljeru dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 24/04/2007, 17h03

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