Afficher : Delphi C++
Préférences d'affichage

Ajout d'une action à la liste d'actions

De RAD Studio

Remonter à Extension de l'EDI - Index

L'indice de l'image obtenu dans la rubrique Ajout d'une image à la liste d'images est utilisé pour créer une action, comme indiqué ci-dessous. L'expert utilise les événements OnExecute et OnUpdate. Généralement un expert utilise l'événement OnUpdate pour activer ou désactiver l'action. Attention, l'événement OnUpdate doit rendre la main rapidement, sinon l'utilisateur remarquera que l'EDI devient plus lent une fois votre expert chargé. L'événement OnExecute de l'action est similaire à la méthode Execute de l'expert. Si vous utilisez un élément de menu pour appeler un expert fiche ou projet, vous pouvez appeler directement Execute dans l'événement OnExecute.



 NewAction := TAction.Create(nil);
 NewAction.ActionList := Services.ActionList;
 NewAction.Caption    := GetMenuText();
 NewAction.Hint       := 'Afficher une boîte de dialogue inutile';
 NewAction.ImageIndex := ImageIndex;
 NewAction.OnUpdate   := action_update;
 NewAction.OnExecute  := action_execute;



 action = new TAction(0);
 action->ActionList = services->ActionList;
 action->Caption    = GetMenuText();
 action->Hint       = "Affiche une boîte de dialogue inutile";
 action->ImageIndex = image;
 action->OnUpdate   = action_update;
 action->OnExecute  = action_execute;



L'élément de menu initialise sa propriété Action avec l'action qui vient d'être créée. Le problème dans la création d'un élément de menu, c'est de savoir où l'insérer. L'exemple suivant recherche le menu Voir > et insère le nouvel élément de menu comme premier élément du menu Voir. En général, il n'est pas judicieux de se baser sur une position absolue : en effet, vous ne savez jamais quand un autre expert va s'ajouter au menu. De plus, les versions ultérieures de Delphi peuvent également réorganiser les menus. Il est préférable de rechercher dans le menu un élément de nom donné. Dans un souci de clarté l'approche simpliste suit.



 for I := 0 to Services.MainMenu.Items.Count - 1 do
 begin
   with Services.MainMenu.Items[I] do
   begin
     if CompareText(Name, 'ViewsMenu') = 0 then
     begin
       NewItem := TMenuItem.Create(nil);
       NewItem.Action := NewAction;
       Insert(0, NewItem);
     end;
   end;
 end;



 for (int i = 0; i < services->MainMenu->Items->Count; ++i)
 {
 TMenuItem* item = services->MainMenu->Items->Items[i];
 if (CompareText(item->Name, "ViewsMenu") == 0)
 {
 menu_item = new TMenuItem(0);
 menu_item->Action = action;
 item->Insert(0, menu_item);
 }
 }



Une fois l'action ajoutée à la liste d'actions de l'EDI, l'utilisateur peut voir l'action quand il personnalise les barres d'outils. L'utilisateur peut sélectionner l'action et l'ajouter à une barre d'outils. Cela peut poser un problème quand votre expert est déchargé : tous les boutons de barre d'outils se retrouvent avec des pointeurs flottants sur une action et un gestionnaire d'événement OnClick inexistants. Pour éviter des violations d'accès, votre expert doit trouver tous les boutons d'outils faisant référence à ses actions et les supprimer.

Voir aussi

Exemples de code

Autres langues