Gestion de l'événement OnPopup
Remonter à Manipulation des contrôles - Index
Il peut être nécessaire de préparer certains éléments d'un menu surgissant avant d'afficher celui-ci, comme vous devez spécifier les éléments activés ou désactivés d'un menu normal. Avec un menu normal, l'événement OnClick correspondant à l'affichage du menu est généralement associé au titre de ce menu.
Comme les menus surgissants n'ont pas de barre de menu, vous devez gérer l'événement dans le composant lui-même. Le composant menu surgissant offre pour cela un événement particulier appelé OnPopup.
Pour préparer des éléments d'un menu surgissant avant de les afficher,
- Sélectionnez le composant menu surgissant.
- Attachez un gestionnaire à son événement OnPopup.
- Ecrivez dans le gestionnaire d'événement le code activant, désactivant, dissimulant ou affichant les éléments du menu.
Dans le code suivant, un gestionnaire existant pour l'événement Edit1Click décrit précédemment dans la section Désactivation des éléments de menu est attaché à l'événement OnPopup du composant menu surgissant. Une ligne de code est ajoutée à Edit1Click pour chaque élément du menu surgissant.
procedure TEditForm.Edit1Click(Sender: TObject);
var
HasSelection: Boolean;
begin
Paste1.Enabled := Clipboard.HasFormat(CF_TEXT);
Paste2.Enabled := Paste1.Enabled;{Ajouter cette ligne}
HasSelection := Editor.SelLength <> 0;
Cut1.Enabled := HasSelection;
Cut2.Enabled := HasSelection;{Ajouter cette ligne}
Copy1.Enabled := HasSelection;
Copy2.Enabled := HasSelection;{Ajouter cette ligne}
Delete1.Enabled := HasSelection;
end;
void __fastcall TMainForm::EditEditClick(TObject *Sender)
{
// Active ou désactive l'élément de menu Coller
Paste1->Enabled = Clipboard()->HasFormat(CF_TEXT);
Paste2->Enabled = Paste1->Enabled; // Ajouter cette ligne
bool HasSelection = (RichEdit1->SelLength > 0); // true si du texte est sélectionné
Cut1->Enabled = HasSelection; // activer l'élément de menu si HasSelection vaut true
Cut2->Enabled = HasSelection; // ajouter cette ligne
Copy1->Enabled = HasSelection;
Copy2->Enabled = HasSelection; // ajouter cette ligne
Delete1->Enabled = HasSelection;
}