Разработка ActiveX компонента, выполняющего сортировку методом Шелла

Страницы работы

Содержание работы

Лабораторная работа №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

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
169 Kb
Скачали:
0