Лабораторная работа №4
ActiveX компоненты
Цель: Разработать ActiveX компонент, выполняющий сортировку методом шелла.
Задача: исследовать работу ActiveX компонент в MS Word
Описание
ActiveX - это 32 разрядные элементы, которые базируются на технологии COM, и которые поддерживают интерфейс элементов управления. Этот интерфейс может предоставлять:
Ø Свойства (properties)
Ø Методы (methods)
Ø События(event)
Технология ActiveX реализует взаимодействие различных приложений друг с другом.[1]
Ход работы
1. Установили и запустили Microsoft Visual C++ 6.0
2. Ознакомились с существующими вариантами проектов. Выбрали MFC ActiveX ControlWizard
3. Написали код нашего элемента ActiveX, позволяющего хранить в себе строку, и содержащего функцию сортировки методом вставок.
4. Открыли Microsoft Word, запустили редактор VBA
5. При помощи средств VBA создали форму, в которую внедрили наш ActiveX
6. Добавили возможности управления ActiveX через средства VBA: менять содержимое ActiveX, сортировать строку.
7. Добавили возможности вставки содержимого ActiveX в MS Office приложение: в Word.
Код программы на VBA
Пример формы на VBA и исходный текст макроса для Worda:
Пример работы макроса:
Вывод: в ходе лабораторной работе был написан ActiveX компонент реализующий сортировку методом шелла, для MS Word написан макрос, реализующий доступ к ActiveX компоненту, который при помощи метода ShellSort через ActiveX компонент, сортирует исходную строчку и вставляет ее в новый документ Worda.
Приложение
Фрагменты кода элемента ActiveX написанного при помощи средств Microsoft Visual C++ 6.0
// CMyelemetCtrl::CMyelemetCtrl - Constructor
CMyelemetCtrl::CMyelemetCtrl()
{
InitializeIIDs(&IID_DMyelemet, &IID_DMyelemetEvents);
m_myLongString = "My ActiveX 2";
}
// CMyelemetCtrl::DoPropExchange - Persistence support
void CMyelemetCtrl::DoPropExchange(CPropExchange* pPX)
{
ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
COleControl::DoPropExchange(pPX);
PX_String(pPX,"MyLongString",m_myLongString);
}
// CMyelemetCtrl message handlers
void CMyelemetCtrl::ShellSort()
{
tblIndex n, h, ub, lb;
T t;
char a[255];
CString Temp1;
ub = strlen(m_myLongString)-1;
lb = 0;
for (int j=0; j <= ub; j++)
a[j] = m_myLongString[j];
/* compute largest increment */
n = ub - lb +1;
h = 1;
if (n < 14)
h = 1;
else if (sizeof(tblIndex) == 2 && n > 29524)
h = 3280;
else {
while (h < n) h = 3*h + 1;
h /= 3;
h /= 3;
}
while (h > 0) {
/* sort-by-insertion in increments of h */
for (int i = lb + h; i <= ub; i++) {
t = a[i];
for (int j = i-h; j >= lb && compGT(a[j], t); j -= h) a[j+h] = a[j];
a[j+h] = t;
}
/* compute next increment */
h /= 3;
}
m_myLongString = "";
for (j=0; j <= ub; j++)
m_myLongString = m_myLongString + a[j];
}
[1] Fiststep mach-2003
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.