Modification du comportement suite à un double-clic
Remonter à Ajout d'éditeurs de composants
Lorsque vous double-cliquez sur le composant, la méthode Edit Lorsque vous double-cliquez sur le composant, la méthode Edit exécute la première commande ajoutée au menu contextuel. Ainsi, dans l'exemple d'Implémentation des commandes, le fait de double-cliquer sur le composant exécute la commande DoThis.
Même si l'exécution de la première commande est généralement une bonne idée, vous pouvez modifier ce comportement par défaut. Par exemple, vous pouvez définir un comportement différent si :
- vous n’ajoutez aucune commande au menu contextuel ;
- vous souhaitez afficher une boîte de dialogue qui combine plusieurs commandes lorsque l’utilisateur double-clique sur le composant.
Redéfinissez la méthode Edit pour spécifier un nouveau comportement lorsque l'utilisateur double-clique sur le composant. Par exemple, la méthode Edit suivante appelle une boîte de dialogue de fontes lorsque l'utilisateur double-clique sur le composant :
procedure TMyEditor.Edit; var FontDlg: TFontDialog; begin FontDlg := TFontDialog.Create(Application); try if FontDlg.Execute then MyComponent.FFont.Assign(FontDlg.Font); finally FontDlg.Free end; end;
void __fastcall TMyEditor::Edit(void) { TFontDialog *pFontDlg = new TFontDialog(NULL); pFontDlg->Execute(); ((TMyComponent *)Component)->Font = pFontDlg->Font; delete pFontDlg; }
Remarque : Si vous souhaitez qu'un double-clic sur le composant affiche l'éditeur de code d'un gestionnaire d'événement, utilisez TDefaultEditor comme classe de base pour votre éditeur de composants au lieu de TComponentEditor. Ainsi, au lieu de redéfinir la méthode Edit, redéfinissez la méthode protégée TDefaultEditor.EditProperty. EditProperty recherche les gestionnaires d'événement du composant et affiche le premier qu'il trouve. Vous pouvez modifier ce comportement pour visualiser un événement particulier. Par exemple :
procedure TMyEditor.EditProperty(PropertyEditor: TPropertyEditor; Continue, FreeEditor: Boolean) begin if (PropertyEditor.ClassName = 'TMethodProperty') and (PropertyEditor.GetName = 'OnSpecialEvent') then // DefaultEditor.EditProperty(PropertyEditor, Continue, FreeEditor); end;
void __fastcall TMyEditor::EditProperty(TPropertyEditor* PropertyEditor, bool &Continue, bool &FreeEditor) { if (PropertyEditor->ClassNameIs("TMethodProperty") && CompareText(PropertyEditor->GetName, "OnSpecialEvent") == 0) { TDefaultEditor::EditProperty(PropertyEditor, Continue, FreeEditor); } }