У меня есть проект (Delphi 10 Seattle, win32) с множеством меню и множеством пунктов в этих меню. Некоторые элементы меню создаются во время разработки, некоторые - во время выполнения.
Я хочу записать некоторую информацию о TMenuItem, такую как имя / заголовок, временная метка и т. Д., Когда запускается событие OnClick.
Я мог бы просто добавить вызов процедуры в начало каждой функции, которая назначена событию TMenuItem OnClick, но мне было интересно, есть ли более элегантное решение.
Также следует отметить, что я пробовал AppAnalytics от Embarcadero, но обнаружил, что он не предоставил мне информацию или гибкость, которую я хотел, и было довольно дорого.
Изменить: я добавлю дополнительную информацию о том, какие варианты я рассмотрел (что, вероятно, мне следовало сделать для начала).
Простое добавление функции к каждому элементу меню, щелчок по которому я хочу записать, что означало бы выполнение этого для множества функций и необходимость добавления ее к каждому новому добавленному элементу меню.
procedure TSomeForm.SomeMenuItem1Click(Sender: TObject);
var
item : TMenuItem;
begin
item := Sender as TMenuItem;
LogMenuItem(item); // Simple log function added to the start of each menuitem click
end;
Под «более элегантным решением» я имею в виду, можно ли добавить «перехватчик», чтобы все события TMenuItem OnClick запускали другую процедуру (которая будет вести журнал) перед вызовом процедуры, назначенной событию OnClick.
Или другой вариант, который я рассматривал, - это создание класса, унаследованного от TMenuItem, который переопределяет TMenuItem.Click и выполняет регистрацию перед генерацией события OnClick. Но тогда я не знал, как это будет работать с элементами меню времени разработки без большой работы по переделке меню.