| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() |
Как создать свой 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. [Назад][Содержание][Вперед] |
|
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
|