Visual Basic: създаване на ActiveX контроли

0
158

Можете не само да използвате вградените контроли на Visual Basic, но и контроли, създавани от други хора. Това доста може да улесни работата ви. Но вие също така можете да създавате собствени ActiveX конторли, които да използвате в своите приложения или да предоставяте на други хора. Това от една страна много ще разшири пазара ви, още повече че теоретически ActiveX контролите са платформо-независими. Това означава, че контроли, писани във Visual Basic, могат да се използат както във Visual Basic, така и в Delphi и Visual C++, а също така в Access. Важна особеност на ActiveX е възможността да контролите да се вграждат в уеб-страници. Днес ActiveX е една отнай-перспективните технологии.
Една ActiveX контрола се състои от четири елемента: интерфейс, предоставяни от нея свойства и методи, и събития на които отговаря. Интерфейса се създава както и на всяка програма. Тук ще разгледаме другите три елемента

Свойства
Всяка контрола има свойства. Всяка ActiveX контрола също има свойства. Вие създавате ActiveX контролата на базата на готови компоненти, и нейните свойства изграждате на базата на свойствата на компонентите. Промяната на едно свойство на ActiveX контролата може да променя множество от съставящите я свойства. Трябва внимателно да планирате ActiveX контролата – какво е нейното предназначение и какви свойства трябва да предоставите, за да я направите по-полезна и по-функционална. Създаването на свойствата на ActiveX контролата има два основни етапа – записване и четене на свойствата и тяхното запомняне. Ако свойствата не се запомнят, то след всяко стартиране на програмата, свойствата на компонентите ще се възтановяват в първоначалните си стойности и тяхната настройка ще е практически невъзможна от страна на програмистта.

Създаване на свойства
За да се се показва текущата стойност на едно свойство, необходимо е използването на процедурата Property Get. Да приемем, че контролата има етикет с име lblCaption, и свойство Caption, определено от заглавието а този етикет. В такъв случай процедурата ще изглежда така:

Код:


Public Property Get Caption() As String 
     Caption = lbl.Caption 
End Property

Тази процедура присвоява на свойството Caption стойността на свойството Caption на етикета. Разбира се можете да не пишете контрукцията на процедурата и да въведете само втория ред – от менюто Tools изберете Add Procedure, в полето Name въведете Caption, а в Type изберете Property Option. Visual Basic ще приготви процедурите Property Get и Property Let, само че трябва да промените техния тип от Variant на String, тъй като свойството Caption трябва да приема String.

Промяна на свойството
Property Get се използва за прочитане на свойството. Когато трябва да му се присвои нова стойност се използва една от процедурите Property Let или Property Set. Двете процедури са еднакви – втората се използва, ако свойството е обект, например Image. Така че исползвайте Property Let за обикновени свойства, а Property Set за обекти. Процедурата изглежда така:

Код:


Public Property Let Caption(ByVal NewCaption As String) 
     lblCaption.Caption = NewCaption 
     PropertyChanged "Caption" 
End Property

Запазване на променените по време на работа свойства Когато някой работи с вашата контрола, той ще настрои свойствата й и ще стартира програмата да провери дали всичко е така, както иска. Когато отново се върне към формата, свойствата на контролата трябва да са същите, каквито ги е оставил. За целта вие имате нужда от две процедури – една за запис на свойствата, и една за прочитане на техните стойности. Свойствата на контролите се записват в обект, наречен PropertyBag. Записването на свойствата става чрез процедурата WriteProperties:

Код:


Private Sub UserControl_WriteProperties(PropBag As PropertyBag) 
     PropBag.WriteProperty "Caption", Caption, VefaultValue 
End Sub

Процедурата WriteProperty приема свойство, което да запише, неговата стойност и стойност по подразбиране. Стойност по подразбиране се използва за спестяване на време – ако свойството не е било променяно, няма защо да се записва. Как се създава стойност по подразбиарне е описано малко по-нататък.

Четенето на свойствата става с процедурата ReadPropertyes:

Код:


Private Sub UserControl_ReadProperties(PropBag As PropertyBag) 
     Caption = ProgBag.ReadProperty("Caption", DefaulVvalue) 
End Sub

И тук се използва DefaulValue със същата цел. Двете прецедури са достъпни от списъка с процедурите в Code Window

Създаване на стойност по подразбиране

Свойствата на вашата ActiveX контрола трябва да имат съответната първоначална стойност. Това става чрез процедурата InitProperties, достъпна от списъка с процедури в CodeWindow:

Код:


Private Sub UserControl_InitProperties() 
     Caption = DefaulValue 
End Sub

Последната стъпка, която би трябвало да се изпълни първа, е декларирането на свойството. То се декларира както всяка една променлива – с име и тип. Това се отнася за всички свойства, които не отговарят на свойства на някоя от съставящите контроли.

Енумерация на свойствата

Някои свойства дават възможност на потребителя на изобор от няколко варианта. Но използването на цифри за различните възможи стойности е неодубно. Затова обикновено се предлага текстова константа, асоциирана с всяка една от възможните стойности. Например свойството Aligment на контролата TextBox има три възможни стойности – 0, 1, 2. Но не е необходимо да помните коя цифра какво означава, тъй като с всяка една е асоцииран текст. Такива свойства, които предлагат възможност на избор от няколко стойности, се наричат енумерирани свойства. Енумерацията се създава в блок от код в декларационната част на модула чрез използването на процедурата Enum, имаща следния тип:

Код:


Public Enum PropertyName 
     Name1 = 0 
     Name2 = 1 
     Name3 = 2 
     Name4 = 3 
     ... 
Wnd Enum

Всъщност не е необходимо да определяте числовите стойности на елементите. Ако не ги определите, те се присвояват автоматично в реда, по който са декларирани, започвайки от 0.

Ако едно свойство е декларирано като Boolean то потребителя автоматично получава възможността за изобр между True и False. В този случай енумерация не е необходима.

Създаване на обяснителен текст
Избирането на някое от свойствата на която и да е от контролите във Visual Basic или на самата форма, води до появаа на текст в долната част на Properties Window, съдържащ обяснение на действието на конкретното свойство. Можете да създадете такъв текст като от менюто Tools изберете Procedure Attributes и в появилия се диалогов прозорец изберете процедура от списъка Name. След това в полето Description можете да въведете обяснителен текст за вашето свойство

Методи
Вие можете да създадете метод във вашата контрола също толкова лесно, колкото и процедура или функция; синтаксисът е същия, защото всяка процедура или функция, декларирана като public във вашата контола се предоставя като неин метод

Събития
Вашите контроли трябва да предоставят събития, които да бъдат обработвани от потребителя. За целта трябва да създадете събитие и да създадете прихващането на това събитие. Например ако искате да предоставите събитие onclick за контролата, трябва да създадете това събитие, а след това събитието onclick на всеки един компонент в контролата, както и на самата форма, трябва да предизвика събитието onclick на контолата. Ако в контролата си имате текстово поле, промяната на текста ще предизивка събитието onchange, вие сигурно ще искате да предоставите това събитие под формата на onchangetext. За целта първо създавате събитието onchangetext а след това в събитието onchange на полето предизвиквате събитието onchangetext. По този начин вие позволявате на потребителя да пише код, с който да контролира работата на контолата – например да провери дали текстът в полето отговаря на изискванията. По-нататък са разгледани двата етапа на създаване на събитие на контролата.

Създаване на събитие:

За да създадете събитие на контолата, вие я декларирате в декларационната част на модула. Декларацията съдържа името на събитието и може, но не е задължително, да съдържа параметри, които се подават при предизвикване на събитието. Синтаксисът на декларацията е следната:

Код:


Public Event EventName([ByVal variable AS datatype])

След като сте създали събитие, можете да го предизвикате чрез следния код:

Код:


RaiseEvent EventName

Определяне на събитие по подразбиране
Вие можете да определите дадено събитие като такова по подразбиране. Събитието по подразбиране е първото събитие, което се появява в code window. За да направите някое събитие такова по подразбиране, трябва да изпълните следното:

1.От менюто Tools изберете Procedure Attributes
2. Отваря се диалоговия прозорец Procedure Attributess. В комбинираното поле Name изберете събитието, което искате да определите като такова по подразбиране.
3. Натиснете бутона Advanced
4. Диалоговия прозорец се разширява. Активирайте полето User Interface Default
5. Натиснете OK.

Автор: Максим Крижановски

ДОБАВИ КОМЕНТАР

Коментирай това преди всички други

Извести ме за
avatar
wpDiscuz