InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте







Размещение сквозной ссылки

 

Как создать свой ActiveX Control - 3


Михаил Эскин


 

Сегодня мы не будем создавать ActiveX Control, а возьмем тот, который уже существует, и добавим в него свои свойства. В своих приложениях я часто сталкивался с тем, что в текстовые поля необходимо ввести ограничения для ввода пользователем (допустим только числа или только латинские буквы). Появились стандартные функции, которые кочевали у меня из программы в программу. Собственно говоря, благодаря этому (лень - двигатель прогресса) и родился этот контрол, который включает в себя стандартный набор всего, что содержит TextBox плюс "маленький довесок" от меня.

Добавлять свойства и методы к стандартному контролу - занятие неблагодарное. Мы должны повторить описание того, что уже есть и потом уже добавить свое. Вот здесь-то и становится незаменимым Мастер по созданию ActiveX Control'ов, выполняя всю рутинную работу за Вас. Приступая к описанию создания этого контрола, хочу сразу оговориться, что в данной статье использованы только несколько из основных свойств, методов и событий (ведь пример-то учебный), делающих наш ActiveX Control вполне функциональным. При желании, разобравшись, что к чему, я думаю, Вы сами легко сделаете необходимые дополнения.

Итак, открываем новый проект и помещаем на него TextBox. Называем проект NewTextBox (запишем в Dtscription "TextBox с дополнительными свойствами"), а UserControl переименуем в NewText, заодно изменим в Text1 свойство Text так же на NewText.

Не откладывая в долгий ящик, сделаем зависимыми размеры TextBox'a от размеров UserControl'a:

Private Sub UserControl_Resize() 	Text1.Move 0, 0, Width, Height End Sub

Запускаем мастера и выбираем для нашего контрола следующее:

Свойства: BackColor, BorderStyle, Font, ForeColor, MaxLength, Text

События: Change, Click, KeyUp, KeyPress, KeyDown, MouseUp, MouseMove, MouseDown

В следующем шаге мастера нам предлагают включить свои "изобретения". Ну что ж, добавим два своих свойства: Format и SelectedText. Идем дальше. Всем стандартным свойствам и событиям присваиваем свойства и события от Text1. А на следующем шаге займемся своими свойствами. Свойству Format в DataType выберем пока тип Long (в дальнейшем мы это исправим) и DefaultValue оставим равным 0; а свойству SelectedText определим тип Boolean и DefaultValue = False. Нажимаем кнопку Finish и смотрим, что у нас получилось. Основная часть кода (та, что связана со стандартными свойствами и событиями) "готова к употреблению". Дело за малым подправить собственные свойства. Для начала опишем константы для свойства Format - это свойство "узаконивает" введение определенных знаков в текстовое поле:

Public Enum constFormat 	Нет = 0      	Заглавные = 1 	Прописные = 2  	Числа = 3 End Enum

И исправим объявление Property для него: Public Property Get Format() As constFormat и Public Property Let Format(ByVal New_Format As constFormat) соответственно. А так же объявление внутренней переменной для него.

Dim m_Format As constFormat

Теперь чтобы это свойство заработало, внесем дополнения в событие KeyPress для Text1.

Private Sub Text1_KeyPress(KeyAscii As Integer)  	Select  Case m_Format  	Case Заглавные 		KeyAscii  = Asc(UCase(Chr(KeyAscii)))  	Case Прописные   		KeyAscii = Asc(LCase(Chr(KeyAscii)))   	Case Числа 		Select Case KeyAscii 		Case 0, 8, 48 To 57 		Case Else 			KeyAscii = 0 			Beep 		End Select 	End Select 	RaiseEvent KeyPress(KeyAscii) End Sub

Со свойством SelectedText (он при параметре True выделяет весь текст при попадании фокуса на контрол) все гораздо проще. Добавим событие GotFocus для Text1.

Private Sub Text1_GotFocus() If Len(Text1) > 0 And m_SelectedText = True Then 	Text1.SelStart = 0 	Text1.SelLength = Len(Text1) End If End Sub 

Вот и все по написанию кода. В ToolboxBitmap определим картинку, какую бы мы хотели увидеть на панели инструментов для нашего контрола. Откроем меню Tools/Procedure Attributes… Сделаем описания для всех свойств, методов и событий нашего ActiveX Control'a.

Задержимся поподробнее на свойстве Text. Во-первых, нам хотелось бы сделать его свойством по умолчанию (например, мы смогли бы обратиться к нему NewText1, а не выписывать целиком NewText1.Text). Нажмем кнопку Advanced и в поле Procedure ID выберем опцию (Default). Во-вторых, желательно бы было подключать наш контрол к базе данных. Для этого включите CheckBox Property is data bound и подключите, ставшие доступными следующие за ним четыре опции.

Осталось протестировать вновь созданный контрол. Как это делается Вы, наверное, помните (если нет, посмотрите предыдущие две статьи).

Ну и напоследок полный листинг нашего АctiveX Control'a.

[Назад][Содержание][Вперед]


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua