Visual2000 · Архив статей А.Колесова & О.Павловой
Андрей Колесов, Ольга Павлова
© 1997, Андрей Колесов, Ольга ПавловаПри работе с VB3 никаких особых проблем с установкой на компьютер модулей VBX не было: модули можно было просто скопировать на дискету, затем переписать на жесткий диск и сразу начать с ними работать. Для элементов управления OCX такой метод не подходит — их надо не просто переписать, но и зарегистрировать. Аналогичная проблема возникает и с in-process OLE-серверами, которые можно разрабатывать в VB4.
Для регистрации модулей OCX и OLE-серверов необходимо воспользоваться утилитами REGOCX16.EXE и REGOCX32.EXE, которые можно найти в каталоге /TOOLS/PSS на компакт-диске с VB4. Первая из этих утилит предназначена для 16-разрядных элементов управления OLE, а вторая — для 32-разрядных. Будет полезно скопировать обе утилиты на свой жесткий диск. Объяснение процедуры регистрации приведем на примере элемента управления SYSINFO.OCX, находящегося на том же на компакт-диске.
Сначала скопируем OCX-файл на жесткий диск (обычно это делается в каталог WINDOWS\SYSTEM). Затем воспользуемся утилитой REGOCX32.EXE для регистрации этого элемента управления:
REGOCX32.EXE SYSINFO.OCX
После того как утилита завершит свою работу, в диалоговом окне References (оно вызывается из меню Tools) появится новый элемент, который теперь можно пометить как доступный. Наконец, в меню Tools выберите позицию Custom Controls и установите флажок в строке "Microsoft SysInfo Control".
Для регистрации in-process OLE-сервера потребуется использовать файл REGSVR32.EXE, который также можно найти в каталоге /TOOLS/PSS на компакт-диске с VB. Данная утилита поддерживает следующие опции:
REGSVR32.EXE C:\MYDIR\MYINPROC.DLL
REGSVR32.EXE /U C:\MYDIR\MYINPROC.DLL
Эти утилиты можно использовать для регистрации элементов управления OCX, а также in-process DLL-библиотек, написанных в VB4. При создании автономных OLE-серверов они будут скомпилированы в исполняемый файл. Если дважды щелкнуть по OLE-серверу из Windows Explorer в Windows 95 или из Диспетчера Файлов (File Manager) в Windows 3.11, автономные OLE-серверы зарегистрируются самостоятельно. С другой стороны, можно зарегистрировать или отменить регистрацию автономных OLE-серверов из командной строки:
C:>MYOLESVR.EXE /REGSERVER
C:>MYOLESVR.EXE /UNREGSERVER
Проблема здесь заключается в том, что массив, зарезервированный в некоторой форме, нельзя описать как Public. Попытка такого объявления вызовет следующее сообщение об ошибке: "Constants, fixed-length strings, arrays, and Declare statements not allowed as Public members of class or form module". То есть для того чтобы сделать массив доступным, например в разных формах, его нужно поместить в общий программный модуль. Однако иногда бывает удобнее все же резервировать массив в модуле формы. Для доступа к нему из других форм можно предложить различные варианты.
Вариант 1. Следует объявить переменную Public Variant в форме, содержащей массив, а затем присвоить ей содержимое всего массива:
Option Explicit Public Array As Variant Private sArray (1 To 2) As String Private Sub Form_Load () sArray (1) = "Hello" sArray (2) = "World" Array = sArray () End Sub
Тогда другие формы смогут ссылаться на переменную Array, как если бы она была самим массивом:
Debug.Print frmOne.Array (1) ' Печатается 'Hello'
Вариант 2. Внутри формы можно создать процедуру Property Get, которая будет возвращать заданный элемент массива:
Public Property Get Array (ByVal iElement As Integer) As String Array = sArray (iElement) End Property
Используйте ту же самую команду, чтобы сослаться на свойство из внешней формы:
Debug.Print frmOne.Array (1) ' Печатается 'Hello'
Иногда бывает полезно уметь создавать быстрые клавиши в среде Windows 95 из программ, написанных на VB. Сделать это можно следующим образом.
В исходном коде, записанном в Setup Kit из VB4 (SETUP1.VBP), можно обнаружить следующее объявление функции:
Declare Function fCreateShellLink Lib "STKIT432.DLL" _ (ByVal lpstrFolderName As String _ ByVal lpstrLinkName As String _ ByVal lpstrLinkPath As String _ ByVal lpstrLinkArgs As String) As Long
Программа Setup обращается к этой функции, чтобы добавить быструю клавишу (в технической документации Microsoft она называется "Shell Link") для инсталлированной программы в меню Start в Win95. Не сразу очевидно, что данная функция может использоваться для создания быстрой клавиши в любой позиции каталога, содержащего меню Start.
Первый параметр этой функции (lpstrFolderName) относится к папке Programs из меню Start, которая в большинстве систем находится в каталоге \Windows\Start_Menu\Programs. Это означает, что если передать пустую символьную переменную в качестве первого параметра, Windows создаст быструю клавишу в самой папке Programs. Аналогично можно передвигаться от папки Programs к любому другому каталогу на жестком диске. Например, следующий код создает быструю клавишу на рабочем столе пользователя:
lResult = fCreateShellLink ("..\..\Desktop", _ "Название быстрой клавиши", "d:\path\appname.exe", "")