ActiveX

Урок 2

ActiveX Control, невидимый во время работы

Вставка окна About в разрабатываемый контрол

Ну что ж, продолжим наши уроки. Сегодня мы будем создавать ActiveX Control невидимый во время работы программы (типа таймера). Будет он нести в себе только 2 функции, т.е. методов (ConvertToDOS и ConvertToWin), позволяющие преобразовывать файлы из DOS-кодировки в Windows'кую и наоборот.

Не буду повторяться как надо создать приложение, я думаю Вы этому уже научились :- ) . Перейдем сразу к делу: Назовем проект prjConverter, а сам контрол DosWin. В Project Description запишем "Конвертер кодировочных таблиц DOS-Windows". Разместим на ActiveX Control'е Image с координатами 0, 0 и поместим в него bmp-ешку с размерами 32 х 32 пиксела. Рисунок на Ваше усмотрение. Хорошим тоном считается если в свойство Toolbox Bitmap Вы поместите такой же рисунок но с форматом 16 х 15 пиксел.

Чтобы ActiveX Control был виден во время разработки приложения и невидим во время выполнения установите в окне Properties его свойство InvisibleAtRuntime равным True.

Запустим API Viewer, откроем файл Win32api.txt. В поле API Type выберем Declares и в появившемся списке найдем 4 функции, необходимые нам. Это: CharToOem, OemToChar, GetACP и GetOEMCP. Скопируем их в приложение в начало, в раздел деклараций.

NB! При копировании API-функций в коды UserControl'а, не забудьте установить опцию Private. Если API-функции копируются, допустим, в отдельный модуль, то они должны быть Public.

Сделаем не изменяемыми размеры нашего контрола:

Private Sub UserControl_Resize()

UserControl.Size Image1.Width, Image1.Height

End Sub

NB! функция Size работает только с твипами.

Теперь создадим 3 функции - 2 основные через которые мы будем обращаться (они будут нашими методами и, естественно, Public) и одну для внутренней проверки (эта - Private).

' функция конвертации из Win в DOS

Public Sub ConvertToDOS(PathStartingFile As String, PathConvertedFile As String)

'файл должен быть не более 32 кб

Dim InputStr$, OutputStr$, NewFile$

Dim Code&

' проверка на соответствие кодировочных таблиц

If Verification = True Then Exit Sub

 

On Error GoTo ErrDOSWin

'открываем файл для считывания

Open PathStartingFile For Input As #1

Do While Not EOF(1) ' до конца файла

' считываем строку файла

Line Input #1, InputStr

'необходимо создать вначале пустую строку

OutputStr = Space$(Len(InputStr))

' кодируем и записываем значение в переменную OutputStr

Code = CharToOem(InputStr, OutputStr)

NewFile = NewFile & OutputStr & vbCrLf

Loop

Close #1

'а теперь записываем в новый файл

Dim F%

F = FreeFile

Open PathConvertedFile For Output As #F

Write #F, NewFile

Close #F

Exit Sub

' при наличии ошибки выводим ее номер и описание

ErrDOSWin:

MsgBox "<" & Err.Number & "> - " & Err.Description

End Sub

Структура метода конвертации из DOS в Win аналогична предыдущей.

NB! В VB6 существует модель объектно-ориентированного метода работы с файлами - FSO (File System Object), которая упрощает работу с файлами последовательного доступа.

Функция проверки на соответствие кодовых таблиц:

Private Function Verification() As Boolean

Dim OemCP&, AnsiCP&

OemCP = GetOEMCP

AnsiCP = GetACP

If OemCP <> 866 Or AnsiCP <> 1251 Then

MsgBox "Несоответствие кодовых таблиц", vbExclamation + vbOKOnly, "Ошибка!"

Verification = True

Exit Function

End If

Verification = False

End Function

Вот, собственно говоря, и все, контрол - готов. Однако, все в этом мире склонно к развитию, склероз тоже : ) . Поэтому сделаем комментарии для себя и "того парня", который будет пользоваться Вашим контролом. Откроем окно с контролом (иначе меню будет заблокировано), а затем выберем меню Tools/Procedure Attributes… Выберем в поле Name - ConvertToDos, а в поле Description впишем: "Конвертирует файлы, записанные в кодовой таблице Windows, в кодовую таблицу DOS", затем выбираем ConvertToWin и записываем ему "Конвертирует файлы, записанные в кодовой таблице DOS, в кодовую таблицу Windows". Теперь эти комментарии станут доступны через Object Browser, а для свойств также и в нижней части окна свойств при его выборе.

"Страна должна помнить своих героев". Давайте добавим в окно свойств строку (About), по щелчку на котором выходит информация о создателе приложения и о самом приложении. Выберем меню Project/Add Form … В открывшемся окне щелкнем на About Dialog (в дальнейшем Вы будете делать свои окна About, а в данной ситуации мы просто упрощаем пример создания контрола). Вернемся в UserControl и запишем:

Public Sub About()

frmAbout.Show vbModal

End Sub

Снова заходим в Tools/Procedure Attributes… в поле Name выбираем метод About, нажимаем кнопку Advanced и в поле Procedure ID выберем опцию AboutBox.

Для проверки работоспособности нашего контрола создадим еще один проект Standart EXE. В окне проектов щелкнем на нем правой клавишей мыши и выберем меню Set us Start Up. Назовем проект prjTest, а форму frmTest. Размещаем наш контрол DosWin на форме: местоположение несущественно - он ведь невидим во время работы : ) . Обратите внимание на окно свойств для него - их там минимум. Добавим кнопку. В события кнопки вписываем:

' преобразование файла из DOS'овской кодировки в Window'скую

Private Sub Command1_Click()

' здесь для облегчения поиска файла можно подключить CommonDialog

DosWin1.ConvertToWin "C:\...", "C:\..." ' пути, естественно, укажете свои

MsgBox "Готово!"

End Sub

Eсли в окне свойств мы выберем (About), то появится наше окно frmAbout.

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

Полный листинг можно посмотреть здесь.

Ñêà÷àòü ïðèìåð

Назад

1999 г

Hosted by uCoz