В этом примере используется простой файл MATLAB ®, который принимает один вход и создает магический квадрат такого размера. Затем он строит COM-компонент, используя этот файл MATLAB в качестве метода класса. Наконец, в примере показана интеграция этого компонента в автономное приложение Microsoft ® Visual Basic ®. Приложение принимает размер магического квадрата в качестве входных данных и отображает матрицу в поле управления ListView.
Примечание
ListView - это элемент управления формы Windows ®, отображающий список элементов со значками. Для создания пользовательского интерфейса, подобного правой панели Проводника Windows, можно использовать представление списка. Дополнительные сведения о элементах управления формы Windows см. в библиотеке MSDN.
Для начала создайте файл MATLAB mymagic.m содержащий следующий код:
function y = mymagic(x); y = magic(x);
Находясь в MATLAB, откройте приложение компилятора библиотеки.
Выберите тип приложения Generic COM Component.
Добавить mymagic.m в список экспортируемых функций.
mymagic.m находится в MagicDemoComp папка.
Нажмите кнопку Пакет.
Примечание
В этой процедуре предполагается, что используется Microsoft Visual Basic 6.0.
Запустите Visual Basic.
В диалоговом окне «Новый проект» выберите в качестве типа проекта «Установленные» > «Шаблоны» > «Другие языки» > «Visual Basic» > «Windows Form Application» и нажмите кнопку «Открыть». При этом создается новый проект Visual Basic с пустой формой.
В главном меню выберите «Проект» > «Ссылки», чтобы открыть диалоговое окно «Ссылки проекта».
Выберите magicdemo 1.0 Type Library из списка доступных компонентов и нажмите кнопку ОК.
Возвращаясь к главному меню Visual Basic, выберите «Проект» > «Добавить компонент»... для открытия диалогового окна «Добавить новый элемент».
После создания проекта добавьте в пустую форму ряд элементов управления для создания формы со следующими параметрами.
| Тип элемента управления | Имя элемента управления | Свойства | Цель |
|---|---|---|---|
|
| Подпись = | Групповые элементы управления |
|
| Подпись = | Помечает поле редактирования магического квадрата. |
|
| Принимает ввод размера магического квадрата. | |
|
| Подпись = | При нажатии создается новый магический квадрат с текущим размером. |
|
| GridLines = LabelEdit = Вид = | Отображает магический квадрат. |
По завершении заполнения формы и элементов управления добавьте в форму следующий код. Этот код ссылается на перечисленные выше имена элементов управления и переменных. Если для любого элемента управления или переменной заданы разные имена, измените этот код, чтобы отразить эти различия.
Public Class magicvb
Private sizeMatrix As Double 'Holds current matrix size
Private theMagic As magicdemo.magicdemoclass 'magic object instance
Private Sub magicvb_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'This function is called when the form is loaded.
'Creates a new magic class instance.
On Error GoTo Handle_Error
theMagic = New magicdemo.magicdemoclass
sizeMatrix = 0
Exit Sub
Handle_Error:
MsgBox(Err.Description)
End Sub
Private Sub ShowMatrix(matrixMagic As Object)
'This function populates the ListView with the contents of
'y. y is assumed to contain a 2D array.
Dim szSquare As Long
Dim indxRow As Long
Dim indxCol As Long
Dim nLen As Long
On Error GoTo Handle_Error
'Get array size
If IsArray(matrixMagic) Then
szSquare = UBound(matrixMagic, 1)
Else
szSquare = 1
End If
lstMagic.Clear()
lstMagic.Columns.Add("")
For cIndx = 1 To szSquare
lstMagic.Columns.Add(CStr(cIndx))
Next
lstMagic.View = View.Details
For indxRow = 1 To szSquare
Dim item As New ListViewItem(CStr(indxRow))
For indxCol = 1 To szSquare
item.SubItems.Add(Format(matrixMagic(indxRow, indxCol)))
Next
lstMagic.Items.Add(item)
Next
Exit Sub
Handle_Error:
MsgBox(Err.Description)
End Sub
Private Sub btnCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click
'This function is called when the Create button is pressed.
'Calls the mymagic method, and displays the magic square.
Dim matrixMagic As Object
If sizeMatrix <= 0 Or theMagic Is Nothing Then Exit Sub
On Error GoTo Handle_Error
Call theMagic.mymagic(1, matrixMagic, sizeMatrix)
Call ShowMatrix(matrixMagic)
Exit Sub
Handle_Error:
MsgBox(Err.Description)
End Sub
Private Sub edtSize_TextChanged(sender As Object, e As EventArgs) Handles edtSize.TextChanged
'This function is called when ever the contents of the
'Text box change. Sets the current value of Size.
On Error Resume Next
sizeMatrix = CDbl(edtSize.Text)
If Err.Number > 0 Then
sizeMatrix = 0
End If
End Sub
End ClassПосле завершения кода создайте автономный исполняемый файл magic.exe:
Откройте проект повторно, выбрав в главном меню «Файл» > «Сохранить проект». Примите имя главной формы по умолчанию и введите magic.vbp для имени проекта.
Вернитесь в меню Файл. Выберите Файл > Make magic.exe для создания готового продукта.
Вы можете запустить magic.exe исполняемый, как и любая другая программа. Когда откроется главное диалоговое окно, введите положительное число в поле ввода и нажмите кнопку «Создать». Появляется магический квадрат входного размера.
ListView элемент управления автоматически осуществляет прокрутку, если магический квадрат больше 4 на 4.