7. ACTIVEX KOD BİLEŞENLERİNİ YARATMA

7.1. GİRİŞ

Bir ActiveX bileşeni, çalıştırılabilir bir kod birimidir. Bu bir .exe, .dll veya .ocx dosyası olabilir. Bu dosyalar ActiveX nesnelerini ve bu nesnelerin belirtimlerini içerir.

ActiveX bileşenleri çok farklı amaçlar için kullanılabilir. Bu amaçlar sayısal analiz araçları, kullanıcı arayüzü elemanları v.b. olabilir. ActiveX bileşeni geliştirme işlemi nesneye yönelik programlamadan (OOP) yararlanarak yapılır. Nesneye yönelik programlama, nesne tabanlı bileşen yaratmada kullanılırken, ActiveX ise bu farklı biçimlerde ve ortamlarda yaratılmış nesnelerin birarada çalışmasını sağlar.

ActiveX bileşeni yaratmak için özellikler

ActiveX kod bileşenleri

Kod bileşenleri, nesne kütüphaneleri gibidir. Herhangi bir uygulama, kod bileşeninde tanımlı bir nesne sınıfından bir nesne tanımlayarak bu nesnenin özellik metot ve olaylarını kullanabilir. Bunlar OLE Otomasyon sunucuları olarak da adlandırılırlar.

Visual Basic kullanılarak üretilen kod bileşenleri iki biçimde olabilir. Bunlar iç-bileşen ve dış bileşen olarak adlandırılır. İç-bileşenler daha hızlıdır ve uygulama ile aynı bellek alanında işlem yaparlar. Dış-bileşenlerin işlem yaptıkları kendi bellek alanları vardır.

Kod bileşenleri kullanılarak bir çok dialog kutusu sunan bir kütüphane yapılabilir.

Ancak genellikle kod bileşenlerinin ayrı bir kullanıcı arabirimi yoktur.

Kod bileşenleri yukarıda da belirtildiği gibi iki farklı şekilde olabilir. Bunlar iç-bileşen veya dış-bileşenlerdir.

İç bileşenler

Bir iç bileşen, diğer bir deyişle ActiveX DLL, başka bir uygulamanın içinde, onun bir parçası olarak çalışır.

Avantajları:

Dezavantajları:

Dış bileşenler

Bir dış bileşen, diğer bir deyişle ActiveX EXE, tek başına kendi bellek alanında çalışır ve diğer uygulamalrın kendi nesnelerini kullanmasına izin verir.

Avantajları:

Dezavantajları:

7.2. VISUAL BASIC İLE NESNE YARATMA

Visual Basic ile bir nesne yaratmak için önce bir Class Module yaratılır. Class Module yapısı nesne sınıfları yaratmak için önemli kolaylıklar ve yollar sağlar. Şimdi bir nesnenin nasıl yaratılabileceğini ve kullanılabileceğini aşamalar halinde görelim.

1. Standart EXE türünde yeni bir proje başlatın ve adını Kredi olarak değiştirin.

2. Form1 formunun ismini frmKredi ve başlığını da KREDI ODEMELERI olarak değiştirin.

3. Projeye bir Class Module ekleyin ve ismini clsKredi olarak değiştirin.

4. Bu sınıf modülünün içine aşağıdaki kodu ekleyin.

Public Miktar As Currency
Public YillikFaiz As Single
Private Ay1 As Integer
Private Ba() As Currency
Property Let Aylar(ay)

Ay1 = ay

End Property

Property Get Aylar()

Aylar = Ay1

End Property

Property Let Yillar(Y)

Ay1 = Y * 12

End Property

Property Get Yillar()

Yillar = Ay1 / 12

End Property

Property Get Odeme()

Dim AylikFaiz As Single

'Verify that all properties are loaded

If Miktar = 0 Or YillikFaiz = 0 Or Ay1 = 0 Then

Odeme = 0

Else

AylikFaiz = YillikFaiz / 1200

Odeme = (-AylikFaiz * Miktar) / _

((AylikFaiz + 1) ^ (-Ay1) - 1)

End If

End Property

Public Sub OdemeHesapla()

Dim i

Dim bakiye As Currency

Dim Odenen As Currency

ReDim Ba(0)

Ba(0) = Miktar

Odenen = CCur(Odeme / 100) * 100

Do Until Ba(i) <= 0

i = i + 1

ReDim Preserve Ba(i)

Ba(i) = Ba(i - 1) * (1 + YillikFaiz / 1200)

Ba(i) = Ba(i) - Odenen

Ba(i) = CCur(Ba(i) / 100) * 100

Loop

End Sub
 
 

Property Get bakiye(N)

If N > UBound(Ba) Or N < 1 Then

bakiye = 0

Else

bakiye = Ba(N)

End If

End Property

5. Bu sınıf tanımında kredi nesnesi için özellikler ve metotlar tanımlanmıştır. Bunu kullanmak için frmKredi formunun Form_Click olayına aşağıdaki kodu ekleyin.

Private Sub Form_Click()

Dim KrediTest As New clsKredi

Dim ay As Integer

Dim bakiye As Currency

'Set loan parameters

Me.Cls

KrediTest.Miktar = 180000000

KrediTest.Aylar = 12

KrediTest.YillikFaiz = 100

'Display parameters used

Print "Miktar: ", , Format(KrediTest.Miktar, "Currency")

Print "Ay sayisi: ", , KrediTest.Aylar

Print "Faiz: %", , Format(KrediTest.YillikFaiz _

/ 100, "Percent")

Print "Aylik Odeme: ", Format(KrediTest.Odeme, "Currency")

Print

KrediTest.OdemeHesapla

Do

ay = ay + 1

bakiye = KrediTest.bakiye(ay)

If bakiye <= 0 Then Exit Do

Print "Ay: "; ay,

Print "Bakiye: "; Format(bakiye, "Currency")

Loop

End Sub

6. Eklenen bu kod ile formun üstüne mouse ile tıklandığında kredi geri ödemlerinin bir liste halinde form üzerinde gözükmesi sağlanır. Programın çalışması aşağıdaki gibidir.




Bu program alınan bir kredi için %100 faiz uygulayarak, 1 yıllık sabit ödeme miktarını ve bu ödeme biçiyle devam ederken kalan borç miktarını hesapmaktadır. Bunun için bir Kredi nesnesi kullanılmaktadır. Kredi nesnesinin OdemeHesapla metodu 12 aylık bakiye miktarlarını hesaplayıp bir dizi içine atmaktadır. Daha sonra kredi nesnesinin bakiye özelliği kullanılarak tüm aylar için bakiyeler hesaplanmakta ve form üzerine yazılmaktadır.

Bir nesne yaratılırken dikkat edilmesi gereken önemli bir nokta da sahip olacağı özellik ve metotların belirlenmesidir. Çünkü nesneyi kolay kullanılır ve verimli hale getiren sahip olduğu özellikler ve metotlardır.
 
 

7.3 ACTIVEX KOD BİLEŞENİ PROJELERİNİN TASARLANMASI VE GERÇEKLEŞTİRİMİ

7.3.1. DIŞ-BİLEŞENLER

ActiveX kod bileşenlerinden ayrı bir bellek alanında çalışan ve nesnelerini başka uygulamaların kullanmasına izin veren bileşenlere dış-bileşen denir. Bir uygulama, bir dış-bileşen nesnesinden bir iş yapmasını istediğinde ondan cevap beklemek zorunda değildir. İş bildirimi aktarılır ve uygulama kendi işine devam eder. Bu işleme zamanuyumsuz bildirim denir.

Şimdi bir ActiveX EXE projesinin gerçekleştirilmesini adımlar halinde gerçekleştirelim. Bu projede BIBLIO veritabanının PUBLISHERS tablosuna erişim için bir nesne oluşturulacak ve bu nesneyi başka uygulamaların kullanmasına olanak tanınacak.

  1. File menüsünden yeni bir proje yaratma seçeneğini seçin.
  2. Beliren pencereden ActiveX EXE seçeneğini seçin. Bu yeni projeye Class1 adlı bir sınıf modülü otomatik olarak eklenir.
  3. Proje ismini yayinevi olarak değiştirin.
  4. Proje menüsünden Properties seçeneğini seçin. General sekmesini aşağıdaki gibi doldurun.

  5. Project menüsünden References seçeneğini seçin ve DAO 3.5 nesne kütüphanesi ile projeyi ilişkilendirin.
  6. Sınıf ismini clsYayinevi olarak değiştirin ve projeyi kaydedin.
  7. Aşağıdaki kodu clsYayinevi sınıfının içine ekleyin.

  8.  

     
     
     
     

    Option Explicit

    Private db As Database

    Private rs As Recordset

    Private yno As Long

    Private yad As String

    Private sad As String

    Private adres As String

    Private sehir As String

    Private eyalet As String

    Private pkodu As String

    Private tel As String

    Private faks As String

    Private yorum As String

    Public Enum hareket

    ilk = 1

    son = 2

    birsonraki = 3

    bironceki = 4

    End Enum

    Private Sub Class_Initialize()

    Dim dosyaAdi As String

    dosyaAdi = "d:\devstudio\vb\biblio.mdb"

    Set db = DBEngine.Workspaces(0).OpenDatabase(dosyaAdi)

    Set rs = db.OpenRecordset("select * from publishers" & _

    " where (PubId < 100)", dbOpenDynaset, _

    dbSeeChanges, dbOptimistic)

    TutanakOku

    End Sub

    Private Sub Class_Terminate()

    rs.Close

    Set rs = Nothing

    db.Close

    Set db = Nothing

End Sub

Public Function AlanSay() As Integer

    AlanSay = 10

    End Function

    Public Function AlanOku(alan As Integer) As Variant

    Select Case alan

    Case 0: AlanOku = yno

    Case 1: AlanOku = yad

    Case 2: AlanOku = sad

    Case 3: AlanOku = adres

    Case 4: AlanOku = sehir

    Case 5: AlanOku = eyalet

    Case 6: AlanOku = pkodu

    Case 7: AlanOku = tel

    Case 8: AlanOku = faks

    Case 9: AlanOku = yorum

    End Select

    End Function

    Public Property Get KutukBasi() As Boolean

    KutukBasi = rs.BOF

End Property

Public Property Get KutukSonu()

    KutukSonu = rs.EOF

End Property

Public Property Get TutanakSay() As Long

    Dim bm As Variant

    bm = rs.Bookmark

    rs.MoveLast

    TutanakSay = rs.RecordCount

    rs.Bookmark = bm

End Property

Private Sub TutanakOku()

    If Not IsNull(rs![PubId]) Then yno = rs![PubId]

    If Not IsNull(rs![Name]) Then yad = rs![Name]

    If Not IsNull(rs![Company Name]) Then sad = rs![Company Name]

    If Not IsNull(rs![Address]) Then adres = rs![Address]

    If Not IsNull(rs![City]) Then sehir = rs![City]

    If Not IsNull(rs![State]) Then eyalet = rs![State]

    If Not IsNull(rs![Zip]) Then pkodu = rs![Zip]

    If Not IsNull(rs![Telephone]) Then tel = rs![Telephone]

    If Not IsNull(rs![Fax]) Then faks = rs![Fax]

    If Not IsNull(rs![Comments]) Then yorum = rs![Comments]

    End Sub

    Public Sub git(htur As hareket)

    Select Case htur

    Case ilk: rs.MoveFirst

    Case son: rs.MoveLast

    Case birsonraki: rs.MoveNext

    Case bironceki: rs.MovePrevious

    End Select

    If Not (rs.EOF Or rs.BOF) Then TutanakOku

    End Sub

    Sub Main()

    End Sub

    Bu sınıf, BIBLIO.MDB veritabanının PUBLISHERS tablosunun ilk 100 tutanağını bir Recorset yapısına alıp, başka programların bu bilgilere erişmeleri için nesne tanımı yapmalarına olanak tanır.

  1. Dosya menüsünden Make yayinevi.exe seçeneğini seçin ve proje için çalışır bir dosya yaratın.
  2. Programı çalıştırın.
  3. Microsoft Excel programını çalıştırın. Açık olan çalışma kitabını yayinevi.xls olarak kaydedin.
  4. Bu çalışma kitabı içinde, Tools menüsünün Makro seçeneğini kullanarak yayinevi adında bir makro yaratın.
  5. Yaratılan bu makronun içine aşağıdaki visual basic kodunu yazın.

Sub yayinevi()

Dim AlanSay As Long

Dim objYayinevi As Object

Set objYayinevi = CreateObject("yayinevi.clsYayinevi")

Dim i As Integer

Dim j As Integer

AlanSay = objYayinevi.AlanSay

Sheets.Add
 
 

ActiveSheet.Cells(1, 1).Select

Selection.FormulaR1C1 = "Yayinevi No"

Selection.Font.FontStyle = "Bold"

Selection.HorizontalAlignment = xlCenter

Selection.ColumnWidth = 12
 
 

ActiveSheet.Cells(1, 2).Select

Selection.FormulaR1C1 = "Yayinevi Adi"

Selection.Font.FontStyle = "Bold"

Selection.HorizontalAlignment = xlCenter

Selection.ColumnWidth = 30
 
 

ActiveSheet.Cells(1, 3).Select

Selection.FormulaR1C1 = "Sirketi"

Selection.Font.FontStyle = "Bold"

Selection.HorizontalAlignment = xlCenter

Selection.ColumnWidth = 30
 
 

ActiveSheet.Cells(1, 4).Select

Selection.FormulaR1C1 = "Adresi"

Selection.Font.FontStyle = "Bold"

Selection.HorizontalAlignment = xlCenter

Selection.ColumnWidth = 30
 
 

ActiveSheet.Cells(1, 5).Select

Selection.FormulaR1C1 = "Sehir"

Selection.Font.FontStyle = "Bold"

Selection.HorizontalAlignment = xlCenter

Selection.ColumnWidth = 10
 
 

ActiveSheet.Cells(1, 6).Select

Selection.FormulaR1C1 = "Eyalet"

Selection.Font.FontStyle = "Bold"

Selection.HorizontalAlignment = xlCenter

Selection.ColumnWidth = 7
 
 

ActiveSheet.Cells(1, 7).Select

Selection.FormulaR1C1 = "Posta Kodu"

Selection.Font.FontStyle = "Bold"

Selection.HorizontalAlignment = xlCenter

Selection.ColumnWidth = 12
 
 

ActiveSheet.Cells(1, 8).Select

Selection.FormulaR1C1 = "Telefon"

Selection.Font.FontStyle = "Bold"

Selection.HorizontalAlignment = xlCenter

Selection.ColumnWidth = 12
 
 

ActiveSheet.Cells(1, 9).Select

Selection.FormulaR1C1 = "Faks"

Selection.Font.FontStyle = "Bold"

Selection.HorizontalAlignment = xlCenter

Selection.ColumnWidth = 12
 
 

i = 0

objYayinevi.git (1)

Do While Not objYayinevi.KutukSonu

i = i + 1

For j = 0 To AlanSay - 2

ActiveSheet.Cells(i + 1, j + 1).Select

ActiveCell.FormulaR1C1 = objYayinevi.AlanOku(j)

Next j

objYayinevi.git (3)

Loop

ActiveSheet.Cells(1, 1).Select

Set objYayinevi = Nothing

End Sub

Bu makro içinde yapılan, bir kere çalıştırılıp windows için kaydı yapıldıktan sonra, ActiveX otomasyonunu destekleyen herhangi bir uygulama içinde kullanılabilir duruma gelen Yayınevi nesnesinin kullanımıdır.

Önce Alan isimleri Excel tablosunun birinci satırına yazılmaktadır.

Daha sonra bir döngü içinde yaratılan Yayınevi nesnesinin tüm tutanakları bu tablonun içine alanlarına göre yazılmaktadır.

7.3.2. İÇ-BİLEŞENLER

İç bileşenler, kullanıldıkları uygulama ile aynı bellek alanında çalışan nesneleri içeren kütüphanelerdir. İç bileşenler ActiveX DLL olarak adlandırılır.

Yukarıda verilen örneği bir iç bileşen olarak da gerçekleştirmek mümkündür.

Visual Basic ile ActiveX DLL oluşturmak, değişken tanımlamak veya yordam yazmak kadar kolaydır.

ActiveX DLL ile normal bir DLL arasındaki fark, ActiveX DLL kullanırken içindeki fonksiyonların tanımını yapma yerine içerdiği nesneleri ve fonksiyonları doğrudan kullanabilme olanağı sağlamasıdır.

Şimdi ActiveX DLL yaratma işlemini adımlar halinde bir örnek içinde açıklayalım.

Bu örnekte kesirli matematik işlemlerini yapan bir nesne sınıfının tanımı yapılacak ve bu nesnenin kullanımı açıklanacaktır.

  1. File menüsünden yeni bir proje yaratma seçeneğini seçin.
  2. Beliren pencereden ActiveX DLL seçeneğini seçin. Bu yeni projeye Class1 adlı bir sınıf modülü otomatik olarak eklenir.
  3. Proje ismini KesirIslem olarak değiştirin.
  4. Proje menüsünden Properties seçeneğini seçin. General sekmesini aşağıdaki gibi doldurun.

  5. Sınıf ismini clsKesir olarak değiştirin ve projeyi kaydedin.
  6. Aşağıdaki kodu sınıfın içine ekleyin.

  7.  

     

    Option Explicit

    Public pay

    Public payda

    Public Sub ekle(pay1, payda1)

    pay = pay * payda1 + payda * pay1

    payda = payda * payda1

    Indirge

    End Sub

    Public Sub Cikar(pay1, payda1)

    pay = pay * payda1 - payda * pay1

    payda = payda * payda1

    Indirge

    End Sub

    Public Sub Carp(pay1, payda1)

    pay = pay * pay1

    payda = payda * payda1

    Indirge

    End Sub

    Public Sub Carp(pay1, payda1)

    pay = pay * payda1

    payda = payda * pay1

    Indirge

    End Sub

    Private Sub Indirge()

    Dim s, t, u

    s = Abs(pay)

    t = Abs(payda)

    If t = 0 Then Exit Sub

    Do

    u = (s \ t) * t

    u = s - u

    s = t

    t = u

    Loop While u > 0

    pay = pay \ s

    payda = payda \ s

    If payda < 0 Then

    pay = -pay

    payda = -payda

    End If

    End Sub

  8. File menüsünden Make KesirIslem.dll seçeneğini seçerek KesirIslem.dll dosyasının oluşturulmasını sağlayın.
  9. 7. Adımdaki işlem yaratılan ActiveX DLL dosyasının windows Registry dosyasına kaydının yapılmasını sağlar. Bu işlemin kayıt işlemini yapmadığı durumlarda Run menüsünden Start With Full Compile seçeneği ile proje çalıştırılırsa kayıt yapılabilir.

Bu örnek kesirli sayılarla dört işlem yapmak için bir nesne sınıfı tanımlamakta ve bu nesne sınıfı ActiveX otomasyonunu destekleyen uygulamalar tarafından kullanılabilir.

Bu örneği test etmek için Standart EXE türünde yeni bir proje yaratın.

  1. Projenin formuna aşağıdaki nesneleri ileride verilecek form görüntüsüne uygun olarak yerleştirin.

  2.  

     

    Form  Name  frmKesir
    TextBox  Name  Text1 ControlArray(0-5)
    CommandButton  Name  Command1 ControlArray(0-3)


     

  3. Project menüsünün Preferences seçeneğini seçin. Çıkan dialog kutusundan Kesirli Sayilar seçeneğinin yanındaki kutucuğu işaretleyin ve projeyi kaydedin.
  4. Formun kod kesimine aşağıdaki kodu ekleyin

Option Explicit

Public Kesir As New clsKesir

Private Sub Command1_Click(Index As Integer)

Cls

CurrentX = 1300

CurrentY = 350

FontSize = 30

Kesir.pay = Text1(0)

Kesir.payda = Text1(1)

Select Case Index

Case 0

Kesir.ekle Text1(2), Text1(3)

Print "+"

Case 1

Kesir.Cikar Text1(2), Text1(3)

Print "-"

Case 2

Kesir.Carp Text1(2), Text1(3)

CurrentY = CurrentY + 50

CurrentX = CurrentX + 50

FontSize = 25

Print "x"

Case 3

Kesir.Bol Text1(2), Text1(3)

CurrentY = CurrentY + 100

CurrentX = CurrentX + 100

FontSize = 25

Print "/"

Case Else

End Select

Text1(4) = Kesir.pay

Text1(5) = Kesir.payda

End Sub

Program çalıştırıldığında aşağıdaki form görüntüsü belirecektir. Burada iki kesiri yazın ve aşağıda sıralanmış işlem butonlarından birine basın. İşlem sonucu en sağdaki kesir içinde gözükecektir.
 
 






7.4. ACTIVEX KOD BİLEŞENLERİNİN TEST EDİLMESİ

ActiveX kod bileşenlerini test etmek için veya hatalarını ayıklamak için iki yol vardır.

  1. Projeyi çalışır durumda bırakıp, başka bir uygulama açmak ve nesneleri kullanmak. Bu başka uygulama Visual Basic programının kendisi de olabilir. Bunun için Visual Basic programının yeniden çalıştırılması gerekir.
  2. ActiveX bileşeni oluşturmak için kullanılan proje açık iken File menüsünden Add Project seçeneği kullanılarak yeni bir proje eklemek ve bir proje grubu oluşturmak.

Bu yollardan birincisi yukarıdaki ActiveX EXE ve ActiveX DLL örneklerinde yapılan işlemin aynıdır. Yukarıdaki projeler test aşamasında iken, örneğin ActiveX EXE programı, bu projeler kapatılmadan ve çalışır durumda bırakılarak içindeki nesneleri kullanmak mümkündür. Bu işlem, bileşenlerin windows için kaydı yapılmamışken yapılır. Böylece bileşenin doğru çalıştığından emin olunduktan windows kaydı yapılır.

ActiveX bileşenlerinin çalışıp çalışmadığını test etmek için şu ana kadar kullanılan yöntem birinci yöntemdir.

Şimdi yeni bir ActiveX bileşeni yaratalım ve ikinci yöntemi kullanarak bu bileşeni nasıl test edeceğimizi görelim.

Örneğin başkalarının da kullanabileceği, herhangi bir sisteme giriş için veya bir uygulamayı kullanan kullanıcıların denetlenmesi sırasında kullanılabilecek bir PASSWORD dialog kutusu tasarlayalım. Bu dialog kutusunun Kullanıcı Adı ve Kullanıcı Password’u adlı iki tane metin kutusu ve Tamam ve İptal adlı iki tane butonu olsun.

Şimdi bu projenin oluşturulmasını adımlar halinde gösterelim.

  1. ActiveX DLL türünden yeni bir proje yaratın. İsmini Pass olarak değiştirin.
  2. File menüsünden Pass Properties seçeneğini kullanarak çıkan dialog kutusundan Project Description kısmına Password Alma Formu yazın.
  3. Projenin içindeki Class1 sınıfının ismini passWord olarak değiştirin.
  4. Projeye aşağıdaki formu ekleyin.
  1. Buradaki nesnelerin özelliklerini aşağıdaki gibi değiştirin.
     
     

    Form Name  frmPass
    TextBox  Name  txtKAd
    TextBox  Name  txtPass
      Passwordchar  *
    C.Button  Name          cmdTamam
      Default                True
    C.Button  Name                  cmdIptal
                       Cancel True

     

  2. passWord sınıfına aşağıdaki kodu ekleyin.
  3. Property Get kullaniciAd()

    kullaniciAd = frmPass.txtKAd

    End Property

    Property Get passWord()

    passWord = frmPass.txtPass

    End Property

    Sub Gizle()

    frmPass.Hide

    End Sub

    Sub Goster(sol As Long, ust As Long)

    frmPass.Move sol, ust

    frmPass.Show vbModal

    End Sub

    Private Sub Class_Initialize()

    Load frmPass

    End Sub

    Private Sub Class_Terminate()

    Unload frmPass

    End Sub

  4. frmPass formuna aşağıdaki kodu ekleyin.

  5.  

     

    Option Explicit

    Private Sub cmdTamam_Click()

    Hide Me

    End Sub

    Private Sub Iptal_Click()

    txtKAd=""

    txtPass=""

    Hide Me

    End Sub

  6. Projeyi test etmek için projeye yeni bir proje ekleyin.
  7. Yeni eklenen projenin ismini PassTest olarak değiştirin. İçindeki formun ismini frmPassTest, Caption özelliğini PASSWORD TEST olarak değiştirin.
  8. Forma cmdPassWordAl adlı ve Caption özelliği Password Al olan bir Command Button yerleştirin ve aşağıdaki kodu forma ekleyin.

  9.  

     
     
     

    Option Explicit

    Dim objPass As New pass.passWord

    Private Sub cmdPasswordAl_Click()

    Dim kAd As String

    Dim pass As String

    Cls

    CurrentX = 0

    CurrentY = 2000

    FontSize = 14

    objPass.Goster frmPassTest.Left, frmPassTest.Top

    kAd = "Kullanıcı Adı : " & objPass.kullaniciAd

    Print kAd

    pass = "Password : " & objPass.passWord

    Print pass

    End Sub

  10. Project menüsünden References seçeneğini seçin. Çıkan dialog kutusundan ActiveX DLL projesinin ismi olan Pass satırının yanını işaretleyin. Bu işlem diğer projeden ActiveX DLL projesinin nesnelerinin görülmesine olanak verir.
  11. Yukarıdaki kod yeni tanımladığımız ActiveX bileşeninin formunu kullanarak Kullanıcı Adı ve Password bilgilerini almaktadır. Bu bilgiler daha sonra formun üzerine yazılmaktadır. Şimdi programı çalıştırın. Password girilip TAMAM tuşuna basıldığında aşağıdaki gibi bir form görüntüsü oluşacaktır.

  12. Password alma formu gösterilirken konumu da Goster metoduna parametre olarak verilmektedir.
  13. Programın çalışmasını bu şekilde test edip doğru çalıştığından emin olduktan sonra, File menüsünden Open Project seçeneğini kullanarak Pass.vbp projesini açın.
  14. Daha sonra File menüsünden Make Pass.dll seçeneğini kullanarak ActiveX bileşeni için nesne kütüphanesini oluşturun ve windows kaydını yapın.
  15. Bu işlem yapıldıktan sonra Visual Basic programını kapatın ve yeniden açın. Daha sonra Project menüsünden References seçeneğini seçin. Aşağıdaki gibi bir dialog kutusu çıkacaktır.




Bu dialog kutusundan da görüldüğü üzere yeni yaratılan ActiveX bileşeninin windows kaydı yapılmıştır. Artık ActiveX otomasyonunu destekleyen herhangi bir uygulama içinde bu bileşeni kullanmak mümkündür.

7.5. BİLEŞENLERİN İÇİNDE OLAY KULLANIMI.

ActiveX bileşenleri içinde tıpkı normal nesnelerde olduğu gibi olay tanımlamak mümkündür. Bunu örneklemek için kesir işlemleri için kullanılan daha önceki örnek üzerinde bir kısmı değişiklikler yapalım. KesirIslem.vbp projesini açın.

  1. clsKesir sınıfının başına olay tanımı için aşağıdaki satırı ekleyin.

  2.  

     

    Public Event SIFIRABolme()

  3. clsKesir sınıfındaki Ekle, Cikar, Carp ve Bol yordamlarına Indirge yoramının çağrılmasından önce şu satırı ekleyin

  4.  

     

    If payda = 0 Then RaiseEvent SIFIRABolme

  5. Project menüsünden Properties seçeneğini kullanarak Prject Description kısmına Kesirli Islemler 2 yazın.
  6. Dosya menüsünden Make KesirIslem seçeneğini kullanarak bileşen için nesne kütüphanesi yaratın. Visual Basic programını kapatıp tekrar açın.
  7. KesirDene projesini açın. Project menüsünden Preferences seçeneğini seçin ve Kesirli Islemler 2 satırının seçilmiş olduğunu kontrol edin.
  8. FrmKesir formunun başındaki Kesir nesnesinin tanımını aşağıdaki gibi değiştirin.

  9.  

     

    Public WithEvents Kesir As clsKesir

  10. Bu tanım Kesir nesnesinin olaylarını kullanabilme olanağı sağlar. Olayın naıl kullanılabileceğini görmek için aşağıdaki kodu forma ekleyin.

  11.  

     
     
     

    Private Sub Form_Load()

    Set Kesir = New clsKesir

    End Sub

    Private Sub Kesir_SIFIRABolme()

    MsgBox "SIFIRA BOLME GERCEKLESTI", vbExclamation

    End Sub

  12. Program çalıştığında, eğer kesirlerden herhangi birinin paydası sıfır ise (sonuç kesiri de dahil) bu SIFIRABolme olayı gerçekleşir ve bir mesaj kutusu belirir.

7.5. NESNELER İÇİN ARAYÜZ TANIMLAMA.

Visual Basic ile genel amaçlı yordam kütüphaneleri, yordamları sınıfın metotları olarak yazmakla gerçekleştirilebilir. Bunun için, Class Module özelliklerinden Instancing özelliği Private veya PublicNotCreatable değerleri dışında bir değer almalıdır.

Instancing özelliği için GlobalMultiUse değerini alırsa sınıf için bir nesne yaratmaya gerek kalmadan metotlarını kullanmak mümkündür.

Bunu kod ile örneklersek:

Instancing=MultiUse

Public Kesir As New clsKesir

Private Sub Topla()

Kesir.pay=10

Kesir.payda=20

Kesir.ekle(7,8)

End Sub

Bu kullanımda nesnenin yaratılması, metot ve özelliklerinin nesne değişkeni ile beraber kullanılması şarttır.

Instancing=GlobalMultiUse

Private Sub Topla()

pay=10

payda=20

ekle(7,8)

End Sub

Bu kullanımda ise, nesne özellikleri ve metotları doğrudan kullanılabilmektedir. Nesne özelliklerine ve metotlarına erişim olduğunda gizli bir nesne yaratılır. Bu nesne üzerinde işlemler gerçekleştirilir.

Global Nesne Arayüzleri ile ilgili öneriler ve sınırlamalar

Nesneler için arayüz tanımlanırken dikkat edilmesi gereken bir nokta da veri gizleme olanağının kullanılmasıdır. Nesne özelliklerini Public tanımlar kullanarak tanımlamaktansa Property Get ve Property Let yordamları yapmak daha kullanışlıdır. Bu şekilde nesne özelliklerinin alabileceği değerleri kontrol etmek, bazı özelliklerinin sadece yazılabilir olmasını sağlamak ve bazı özelliklerin sadece okunabilir olmasını sağlamak mümkündür.

Nesnelerin içsel olarak kullandıkları yordamlar Private olarak tanımlanmalıdır.

Arayüzler için şu kurallara uyulmalıdır:

Bir sınıfın metotları, özellikleri ve olayları için seçilen adlar sınıftan yaratılacak nesne için arayüz oluşturur. Bu arayüzler tanımlanırken aşağıdaki kurallara uyulmalıdır.

7.6. KOD BİLEŞENLERİNİN DİĞER ÖZELLİKLERİ.

Friend Property Let Demo(NewDemo As udtDemo)

mDemo = NewDemo

End Property

Friend Sub SetDemoParts(ByVal A As Integer, _

ByVal B As Long, ByVal C As String)

mDemo.intA = A

mDemo.lngB = B

mDemo.strC = C

End Sub


 
 

back_sel.gif (1050 bytes)forw_sel.gif (1061 bytes)

Ana Sayfa