У меня есть проект (Delphi 10 Seattle, win32) с множеством меню и множеством элементов в этих меню. Некоторые элементы меню создаются во время разработки, некоторые из них во время выполнения.Logging MenuItem OnClick Event
Что я хочу сделать, это зарегистрировать некоторую информацию о TMenuItem, такую как имя/подпись, метка времени и т. Д., Когда запускается событие OnClick.
Я мог бы просто добавить вызов процедуры к началу каждой функции, которая назначена событию TMenuItem OnClick, но мне было интересно, было ли более элегантное решение.
Кроме того, я пробовал Embarcadero's AppAnalytics, но я нашел, что он не дал мне информации или гибкости, которую я хотел, и был довольно дорогой.
Редактировать: Я добавлю дополнительную информацию о том, какие варианты я рассмотрел (что я, вероятно, должен был сделать для начала).
Простое добавление функции к каждому щелчку menuitem, который я хочу записать, что означало бы выполнение этого для множества функций и добавление его к каждому добавленному новому пункту меню.
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 Event ,
Или другой вариант, который я рассматривал, заключается в создании класса, унаследованного от TMenuItem, который будет отменять TMenuItem.Click и выполнять регистрацию перед генерированием события OnClick. Но тогда я не знал, как это будет работать для пунктов меню дизайна без большой работы, переделывая меню.
Небольшой совет: прекратите использовать события onlick и вместо этого используйте Actions. – whosrdaddy
воронка всех кликов на одно и то же событие, используйте Sender для оценки и регистрации каждого из них, а затем маршрутизируйте их в свое собственное событие. –
@whosrdaddy вы могли бы очертить преимущества использования действий над OnClick –