Modification du comportement suite à un double-clic

De RAD Studio
Aller à : navigation, rechercher

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);
}
}