2013-02-27 6 views
2

Utilisation de Delphi XE2 et aussi Delphi 6Helpfile ne se ouvre pas à corriger le contexte avec la touche F1

J'ai découvert que frapper F1 pour ouvrir le fichier d'aide à un contexte d'aide ne pas ouvrir le fichier d'aide au contexte encore en utilisant l'élément de menu pour lequel F1 est le raccourci, ouvre le fichier d'aide dans le contexte approprié. J'ai aussi un bouton qui appelle le code de l'article du menu.

Je vérifia à la fois F1 et l'élément de menu et le bouton appellent exactement la même ligne de code et ils sont:

procedure TForm1.Help1Click(Sender: TObject); 
begin 
    Application.HelpContext(Self.HelpContext); 
end; 

valeur Self.HelpContext est modifiée en fonction de l'endroit où l'utilisateur est en le formulaire et j'ai vérifié que lorsque cette ligne est exécutée Self.HelpContext est la valeur correcte et est la même valeur lorsqu'il est appelé via F1 ou l'élément de menu ou le bouton.

J'ai vérifié ce problème existe aussi dans chaque version précédente de notre application écrite en Delphi 6.

Il doit y avoir quelque chose de simple que je suis absent ici. Des idées?

Répondre

2

Ce qui se passe, c'est que F1 reçoit un traitement spécial par le système. Oui, il est vrai que le gestionnaire de votre élément de menu a un raccourci de F1. Mais après que ce gestionnaire a tiré, l'application reçoit un message WM_HELP. Ce message WM_HELP est traité initialement par TCustomForm.WMHelp. Cela recherche l'ID de contexte d'aide associé au contrôle actif. Et puis Application.HelpContext est appelée en utilisant ce contexte d'aide. Et il est probable que l'ID de contexte d'aide du contrôle actif diffère de celui du formulaire. Par conséquent, bien que votre élément de menu ouvre le fichier d'aide sur votre sujet préféré, le WM_HELP suivant remplace l'élément de menu.

Il semble que vous souhaitiez que tous les champs F1 soient toujours acheminés vers l'ID de contexte d'aide du formulaire. Dans ce cas, mon conseil serait le suivant:

  • Définir le HelpContext pour le formulaire.
  • Supprimez toutes les propriétés HelpContext pour tous les autres contrôles de votre formulaire. En d'autres termes, rétablissez-les à la valeur par défaut 0.

Ensuite, lorsque le message WM_HELP est traité, il commence au contrôle actif et de trouver un contexte d'aide de 0. Ensuite, il va se lever à travers les parents à la forme, ce qui est non nul.

Je pense que je voudrais également supprimer le raccourci F1 de l'élément de menu/action. Et laissez le message WM_HELP être le mécanisme pour invoquer l'aide.

+0

Bonne prise! Un gestionnaire 'WM_HELP' pourrait également aider .. –

+0

@Sertac Merci. Je ferais probablement le tour et arrêterais de manipuler F1 dans le menu. /action. Et roulez avec le WM_HELP. –

+0

@DavidHeffernan - J'apprécie vraiment votre aide avec ceci et le dernier problème de fichier d'aide. Il s'avère qu'une application de test avec un fichier d'aide de test semble fonctionner. Un test avec mon application géante et le fichier d'aide au test fonctionne également! Quelque chose semble ne pas être heureux entre mon application géante et le fichier d'aide géant. Retrait F1 du raccourci semblait ne pas avoir d'effet. Même si cela ne résout pas mon problème spécifique, j'accepterai votre réponse ici parce que vous avez aidé. –

Questions connexes