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

Langage Delphi Discussion :

Créer une Aide contextuelle


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut Créer une Aide contextuelle
    J'utilise Delphi 2007 Win32

    Bonjour,
    Je voudrais attribuer une aide contextuelle à chaque commande d'un menu
    déroulant sans utiliser un système d'aide conventionnel que je trouve trop
    lourd pour de petits projets.

    Le principe est le suivant:
    l'Utilisateur focaliserait une commande d'un menu, taperait «F1» et l'Aide
    contextuelle s'afficherait simplement dans un "Showmessage" ou similaire.

    J'utilise toujours les «Hints» mais les possibilités sont assez limitées.

    Existe t-il un moyen d'intercepter la commande «F1» pour afficher un showmessage.

    Merci d'avance.

  2. #2
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Points : 116
    Points
    116
    Par défaut
    une procédure avec l'événement onMouseMove pourrait peut-être te dépanner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
     if MessageDlg('Bienvenue dans mon application Pascal Objet. Quitter?',
        mtConfirmation, [mbYes, mbNo], 0) = mrYes then
      begin
        MessageDlg('Fin de l''application Pascal Objet.', mtInformation,
          [mbOk], 0);
      end;
    end;
    Sans icone: mtCustom

    Salutation

    Duan

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    @Duan
    Faire un MessageDlg dans un MouseMove ! Difficile de cliquer sur le bouton, non ?

    @Faucon
    Pour intercepter la touche F1 tu peux utiliser l'évènement OnKeyPress de la Form sans oublier de mettre la propriété KeyPreview à True.
    Ensuite il suffit d'afficher l'aide qui correspond au contrôle qui détient le focus.

    @+ Claudius

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Pour intercepter la touche F1 j'utiliserais plutôt ...FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); (car ...FormKeyPress(Sender: TObject; var Key: Char); poserait des problèmes)

    if key=VK_F1 {Touche F1} then ...

    A+

    EDIT : autres suggestions :
    - pourquoi ne pas afficher l'aide dans un Statusbar lorsque la souris passe au-dessus ne n'importe quel bouton, label, etc ... ça règlerait le problème des composants qui ne peuvent détenir le focus et ça évite d'avoir à utiliser la touche F1.
    - autre variante : un click-souris-droite sur n'importe quel composant peut être utilisé pour faire surgir une lucarne qui comporte un petit TMemo incluant le texte de l'aide.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Pour intercepter la touche F1 tu peux utiliser l'évènement OnKeyPress de la Form sans oublier de mettre la propriété KeyPreview à True.
    Ensuite il suffit d'afficher l'aide qui correspond au contrôle qui détient le focus.
    J'ai essayé avec FormKeyPress et FormKeyDown mais ça ne fonctionne pas.
    Quand un menu est déroulé ces deux événements sont neutralisés.
    Idéalement il faudrait un événement du genre KeyDown dans MainMenu mais
    ça n'existe pas.
    Il existe aussi une possibilité avec un PopupMenu mais ça fait bricolage.

    Merci de vos conseils...

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Remarque judicieuse Gilbert
    D'ailleurs l'appui sur F1 ne déclenche même pas l'évènement OnKeyPress.

    @+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Pour intercepter la touche F1 j'utiliserais plutôt ...FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); (car ...FormKeyPress(Sender: TObject; var Key: Char); poserait des problèmes)
    Ca ne fonctionne pas non plus, dommage.
    Quand un menu est déroulé il n'y a que les événements de MainMenu qui sont actifs.
    J'affiche de toute façon toujours un concentré de l'aide contextuelle dans le Statusbar, mais c'est rarement suffisant.
    J'ai aussi testé plusieurs autres possibilités mais sans totale satisfaction, le réflexe naturel des Utilisateurs étant de taper «F1» pour accéder à une aide contextuelle, d'où ma question:
    Comment faire pour intercepter la frappe de la touche «F1»? "si c'est faisable"

    Merci de vos conseils.

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-Salut,

    [intercepter la touche F1] : Ca ne fonctionne pas non plus, dommage.
    ... si,si! ça fonctionnera si comme l'a dit Claudius "sans oublier de mettre la propriété KeyPreview [de la Form] à True".
    j'ai seulement rectifié en disant j'utiliserais plutôt ...FormKeyUp que FormKeyPress mais sans remettre en cause le KeyPreview.
    ... ça au moins ça doit marcher, ça marche chez moi sous Delphi-5 et ça marche depuis Delphi 3.1 (pas testé les versioons + anciennes)

    ... par contre quand un menu est déroulé on n'a pas de MouseMove pour détecter l'item sous la souris. Une bidouille consisterait à remplacer le mainMenu par une série de boutons qui font surgir chacun une ListBox avec les items correspondants.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    ... si,si! ça fonctionnera si comme l'a dit Claudius "sans oublier de mettre la propriété KeyPreview [de la Form] à True".
    j'ai seulement rectifié en disant j'utiliserais plutôt ...FormKeyUp que FormKeyPress mais sans remettre en cause le KeyPreview.
    ... ça au moins ça doit marcher, ça marche chez moi sous Delphi-5 et ça marche depuis Delphi 3.1 (pas testé les versioons + anciennes)
    Je suis le premier à le regretter mais ça ne fonctionne pas en Delphi 7, ni en Delphi 2007.
    J'ai refait les tests maintenant avec FormKeyDown et FormKeyUp et toujours le même message d'erreur qui apparaît...
    "Aucune aide contextuelle n'est installée".
    Je précise encore que je tape «F1» quand un menu est déroulé et qu'une commande de ce menu est focalisée (couleur bleu)
    J'ai également fait des tests avec et sans «WinHelpViewer» dans la clause Uses.
    Merci beaucoup de votre attention.

    A+

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    J'ai fait un test avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin     Keypreview:=true;
     
    end;
     
    procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin     if key=vk_F1 then showmessage('F1');
              if key=vk_F2 then showmessage('F2');
     
    end;
    Résultats :
    1) que j'appuie sur F1 ou sur F2 le showMessage apparaît normalement tant qu'aucun menu n'est déroulé (et sans message du type "Aucune aide contextuelle n'est installée").
    2) par contre lorsque un menu est déroulé le showMessage n'apparaît effectivement pas : c'est le menu qui devenant actif doit neutraliser l'interception des touches-clavier (?)
    Mais de toutes façons même si la détection de la touche F1 marchait lorsqu'un menu est déroulé on n'a aucun événement dans le menu qui permettrait d'indentifier l'Item sélectionné en bleu pour lui associer le texte de l'aide correspondante mis à part le onClick qui sert à autre chose.

    Comme déjà dit, une bidouille consistererait à remplacer le menu par des SpeedButton d'en-tête où un click rend visible la ListBox correspondante avec ses Items et qui permet d'utiliser toutes sortes d'événements, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin     if (key=vk_F1) and (ListBox1.ItemIndex>=0)
              then showmessage(ListBox1.Items[ListBox1.ItemIndex]);
    end;
    ... testé marche également : affiche le texte de l'item en bleu suite à appui sur F1.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Mais de toutes façons même si la détection de la touche F1 marchait lorsqu'un menu est déroulé on n'a aucun événement dans le menu qui permettrait d'indentifier l'Item sélectionné en bleu pour lui associer le texte de l'aide correspondante mis à part le onClick qui sert à autre chose.
    Bonjour,
    J'ai aussi refait quelques tests et surprise !!, la touche F10 associée à l'événement FormKeyUp permet de résoudre une partie du problème.
    Pour tester, il suffit d'écrire un Shomessage(' Bonjour ') dans l'événement FormKeyUp et de taper F10 sur n'importe quelle commande d'un menu et le message apparait.
    Mais comme vous le faites remarquer, il faut pouvoir lire une référence de l'item focalisé, et là, je n'ai toujours pas de solution.

    Conclusion.
    Rien ne presse. Je vais laisser mûrir le problème et continuer comme j'ai toujours fait c'est à dire:
    créer un menu «Aide» contenant les principales commandes utilisées et documenter chaque commande dans une fenêtre un peu élaborée, du type MessageDlg.
    Je pars du principe que l'aide doit toujours se trouver là où on en a besoin et c'est rarement le cas.

    Un grand merci à vous pour votre gentillesse.

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Mais comme vous le faites remarquer, il faut pouvoir lire une référence de l'item focalisé, et là, je n'ai toujours pas de solution.
    ... il y au moins la solution "sytstème D" formée par des SpeedButton qui font surgir chacun une ListeBox qui lui est associée comme le ferait un menu déroulant... et dans la listBox on récupère l'itemIndex de la ligne sélectionnée en bleu : c'est aussi chouette qu'un menu déroulant et on peut même faire une ListBox avec des bandes alternées de couleur un petit Bmp faisant office d'icône et j'en passe vu les nombreuses possibilité de tracer des trucs sur son canvas.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    ... il y au moins la solution "sytstème D" formée par des SpeedButton qui font surgir chacun une ListeBox qui lui est associée comme le ferait un menu déroulant... et dans la listBox on récupère l'itemIndex de la ligne sélectionnée en bleu : c'est aussi chouette qu'un menu déroulant et on peut même faire une ListBox avec des bandes alternées de couleur un petit Bmp faisant office d'icône et j'en passe vu les nombreuses possibilité de tracer des trucs sur son canvas.
    Rebonjour,
    Je reconnais que la solution "système D" offre des possibilités mais elle s'écarte de la philosophie Windows.
    De plus, mon objectif est d'améliorer l'Aide de projets existants, comportant une interface Windows traditionnelle avec menus, barre à boutons, etc... (look windows).
    En fait, quand un programme est réalisé avec Delphi 2007 ou Delphi 7 et que vous tapez F1 sur une commande de menu, un message d'erreur de type MessageDlg affiche "Aucune aide contextuelle n'est installée".
    C'est tout "simplement" cette forme d'aide que je voudrais utiliser.

    Conclusion..
    Nous ne sommes pas autorisés à faire simple puisque nous avons à disposition des outils qui nous permettent de faire compliqué.

    Encore merci..

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

Discussions similaires

  1. [Lazarus] Créer une aide CHM pour une application
    Par OR34a dans le forum Lazarus
    Réponses: 2
    Dernier message: 27/01/2014, 10h25
  2. créer une aide intégré dans visual studio
    Par ola-oz dans le forum Visual Studio
    Réponses: 0
    Dernier message: 23/09/2010, 08h58
  3. Créer une aide de son application
    Par g_barthe dans le forum Général Python
    Réponses: 3
    Dernier message: 20/05/2008, 18h53
  4. Créer une aide en ligne
    Par sunvialley dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 07/05/2008, 09h36
  5. outil pour créer une aide en ligne
    Par delas dans le forum Struts 1
    Réponses: 2
    Dernier message: 28/11/2006, 10h23

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