Как реализовать функцию записи макросов, аналогичную Microsoft Excel? - PullRequest
4 голосов
/ 03 августа 2010

Как реализовать такой «макрос записи» в Microsoft Excel? Насколько я знаю, я могу встроить интерпретатор сценариев (например, javascript) и сделать объекты c ++ видимыми для сценариев, аналогично DOM в веб-браузере.

Мой вопрос: как вы записываете действия пользователя, а затем генерируете соответствующий код JavaScript? В Excel мы можем записать макрос, и он сгенерирует соответствующий код VBA.

Кто-нибудь знает, как реализовать эту функцию на C ++ или на других языках?

PS: Может быть любой язык / платформа - я просто хочу понять, как это сделать.

Ответы [ 2 ]

1 голос
/ 04 августа 2010

Один из способов сделать это - иметь двойные обработчики событий для каждого пункта меню / нажатия кнопки.

Когда запускаются стандартные обработчики событий, запускаются события вашего вторичного макро-компоновщика.Когда запускаются макросы, вы записываете список выполненных действий, например,

ActiveDocument->Save.
ActiveDocument->SaveAs.
ActiveDocument->Print.
Find (AllDocument,"ThisText").SelectFirst
Edit.Cut
Find().SelectNext

. Затем вы можете перевести эти действия на желаемый язык сценариев.

Надеюсь, это поможет.

0 голосов
/ 08 февраля 2011

Взгляните на шаблон команды . Каждое действие в программе может быть представлено объектом Command. Поэтому, когда вы записываете макрос, вы оба выполняете команду и сохраняете ее в списке. Когда вы хотите воспроизвести макрос, вы просто просматриваете созданный вами список и снова выполняете каждую команду.

Вам не обязательно даже использовать отдельные объекты, хотя, вероятно, это будет легче в долгосрочной перспективе. Например, Emacs имеет клавиатурные макросы, которые просто записывают каждое нажатие клавиши, а затем имитируют эти нажатия клавиш при воспроизведении макроса.

...