Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Как создать собственный OCX компонент?

Поиск:
Создаем собственный OCX компонент - CoolTextBox!!!

УРОК 1
1. Открываем VB и создаем новый проект ака ActiveX control.
2. Кидаем на «форму» ListBox и делаем Visible = False
3. Потом кидаем ту да же TextBox (он и будет CoolTextBox-ом).
4. В области General объявляем одну переменную и одну API функцию. Примерно так:
Код

Option Explicit

Private Const LB_FINDSTRING = &H18F

Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) _
As Long

5. Пишем обработчик для UserControl_Initialize
Код

Private Sub UserControl_Initialize()
 List1.AddItem "Ваня"
 List1.AddItem "Маша"
 List1.AddItem "Коля"
 List1.AddItem "Лена"
 List1.AddItem "Вася"
 List1.AddItem "Женя"
 List1.AddItem "Андрей"
 List1.AddItem "Сергей"
 List1.AddItem "Марина"
End Sub

Здесь мы ручками заполняем список, из которого и будут выбираться значения.

6. Далее, мы будем обрабатывать событие Text1_Change, таким образом:
Код

Private Sub Text1_Change()
Dim pos As Long
 List1.ListIndex = SendMessage(List1.hWnd, LB_FINDSTRING, -1, ByVal CStr(Text1.Text))
If List1.ListIndex = -1 Then
 pos = Text1.SelStart
Else
 pos = Text1.SelStart
 Text1.Text = List1
 Text1.SelStart = pos
 Text1.SelLength = Len(Text1.Text) - pos
End If
End Sub

Тут мы выбираем первое попавшееся значение из списка.

7. Мы практически закончили, осталось только занести значение в наш TextBox:
Код

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
On Error Resume Next’ Если ошибка, то продолжаем
If KeyCode = 8 Then
If Text1.SelLength <> 0 Then
 Text1.Text = Mid$(Text1, 1, Text1.SelStart - 1)
 KeyCode = 0
End If
ElseIf KeyCode = 46 Then
 If Text1.SelLength <> 0 And Text1.SelStart <> 0 Then
 KeyCode = 0
End If
End If
End Sub

8. Подведем итоги. Мы создали собственный компонент на основе двух имеющихся – Text и List. В List мы держим список значений из которых производиться выборки. Ну а в Text мы просто давим кнопки smile. ВСЕ - НАШ КОМПОНЕНТ ГОТОВ!!!. Компилируем его..
9. Ну а дальше – создаем новый проект ака Standart EXE, цепляем наш OCX к палитре компонентов, размещаем его на форму и пробуем чего ни будь в него ввести.

УРОК №2
И так продолжим наши изыскания.
Теперь мы добавим новый метод к нашему компоненту.
Метод мы назовем AddItems и будет он добавлять новые значения в наш список.
Передавать методу мы, естественно, будем переменную типа String

Приступаем. В коде компонента пишем следующий код:
Код

Public Sub AddItems(Items As String)
If Items <> "" Then
  List1.AddItem (Items)
End If
End Sub

Теперь мы с легкостью можем добавить новые значения в список подстановок.
Код

Private Sub Command1_Click()
 UserControl11.AddItems ("Пример")
End Sub

Соответственно, нам может понадобиться метод для очистки нашего списка. Вот так это будет выглядеть:
Код

Public Sub ClearList()
 List1.Clear
End Sub


Правда же ничего страшного в создании собственных компонентов нету smile smile

Урок №3
Ну а теперь мы можем и приукрасить наш компонент.
А сделаем мы это путем добавления ему свойства Color.
Для начала под надписью Option Explicit (в коде компонента) мы определим новую структуру.
Код

Public Enum MyColor
 Red = 1 ‘Перечисляемый тип.
 Blue = 2
End Enum
Private m_blnColor As MyColor

И чтобы наше свойство можно было выбирать в инспекторе объектов мы напишем вот такую процедуру:
Код

Public Property Let Color(NewColor As MyColor)
 m_blnColor = NewColor
 If m_blnColor = Blue Then
   Text1.BackColor = vbBlue
 Else
   Text1.BackColor = vbRed
 End If
End Property

Теперь мы можем менять цвет нашего объекта.
Но это еще не все, ведь мы не можем узнать какой у него цвет на данный момент. По этому, мы добавим процедуру «определения» цвета. А выглядит она так:
Код

Public Property Get Color() As MyColor
 Color = m_blnColor
End Property

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

Урок 4
Вот мы заканчиваем моделирование нашего компонента.
Осталось нам только добавить необходимые события для комфортной работы пользователя.
И начнем мы с того, что в коде компонента, в области Option Explicit мы добавим вот такой код
Код

Option Explicit
..........
 Event MyKeyPress()
..........

Дальше нам нужно чтоб наш компонент отвечал на какие то события. наше. Например на события нажатия клавиш. А делаем мы это вот таким макаром:
Код

Private Sub Text1_KeyPress(KeyAscii As Integer)
 RaiseEvent MyChange
End Sub

Строка RaiseEvent MyKeyPress говорит, что в этом месте должно возникнуть наше событие MyKeyPress.
Можно компилировать и проверять наш OCX.

Вот собственно и все. Наш компонент готов.
Остальное вы можете сделать и своими руками. Главное желание и вдохновение.
Автор: ~Fox~
Сайт: http://






Просмотров: 5039

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную