6. ACTIVEX İSTEMCİLERİ YARATMA

ActiveX teknolojisi Windows’un eskiden beri dayandığı temeller üzerine kurulmuştur.

İlk ortaya çıktığı zaman bu teknoloji DDE (devingen veri değişimi) olarak adlandırılmıştır. Daha sonra OLE (Nesne bağlama ve gömme) olarak adlandırılmış ve işlevselliği artırılmıştır. Bu teknolojinin son durumu ise ActiveX olmuştur.

OLE ve ActiveX bağlamında nesne kavramından sözedilirken özel bir nesne modeli söz konusu edilmektedir. Bu nesne modeline Bileşen Nesne Modeli (COM) denir. Bu nesne modelindeki nesnelere aynı zamanda Window nesnesi adı da verilir.

6.1. BİLEŞEN NESNE MODELİ (COM-COMPONENT OBJECT MODEL)

COM standardının tanımladıkları kısaca şunlardır:

Bir COM nesnesinin özellikleri şunlardır:

COM nesnelerinin bir görsel arayüzünün olması şart değildir ama en az bir arayüzü olmak zorundadır. Bu arayüz şu üç işlevi içermelidir.

Bu üç işlev açık bir şekilde Visual Basic kodu içinde çağrılmasa bile nesneler üzerinde işlemler yapılırken her zaman bu işlevler kullanılır.

6.2. OTOMASYONUN GERÇEKLEŞTİRİLMESİ

Bir çok yeni yazılım bileşenlerinin yanısıra Visual Basic 5.0 artık Bileşen Nesne Modeli (COM) ile yazılım bileşenleri oluşturmayı da desteklemektedir. Sınıf modülleri için artık bir çok arayüz gerçekleştirmek mümkündür

Bu yeni yaklaşımla OLE sunucuları artık yerini bileşenlere bırakmıştır.

Visual Basic ActiveX bileşenlerini yaratmak için çok kolay ve anlaşılır bir yol sunmaktadır.

Visual Basic ile otomasyon Activex bileşenleri kullanılarak sağlanır. ActiveX bileşenleri COM nesnelerinden oluşan birer bütündür.

ActiveX teknolojisine bir giriş yaptıktan sonra, şimdi bileşenlerin nasıl kullanılabildiği üzerinde duralım. Örneğin Visual Basic kodu içinde Microsoft Excel ile kolayca yapılabilecek bir işleme ihtiyaç duyulmuş olsun. Bunu gerçekleştirmek için tüm işlemleri yeniden yapmaktansa hazır olan Excel nesneleri kullanılarak işlemler daha basit bir şekilde gerçekleştirilebilir. Bu durumda işlemleri yapmaya olanak tanıyan Microsoft Excel nesneleri ActiveX bileşeni olarak görev yapar. Hazır var olanların dışında ActiveX bileşenleri ticari bir nesne olarak da satılmaktadır. Bu tıpkı bir ev yaparken parçalarını ayrı ayrı satın alıp birleştirmeye benzemektedir.

Bir ActiveX bileşeni yeniden kullanılabilir nesnelerden ve verilerden oluşan bir programdır. Bir uygulama içinde hazır ActiveX bileşenlerini kullanmak veya yeni bileşen yaratmak mümkündür.

OLE özelliklerini destekleyen bileşenleri herhangi bir kod yazmaya gerek duymadan kullanmak mümkündür. Bu Araç kutusu üzerinde bulunan OLE Container Control kullanılarak veya nesneyi içeren sınıfı Araç kutusu üstüne yerleştirerek yapılır.

6.3. ACTIVEX BİLEŞENLERİNİN ÖZELLİKLERİ

ActiveX bileşenleri karmaşık uygulamaları var olan parçaları kullanarak gerçekleştirmeyi sağlar.

ActiveX teknolojisini destekleyen programlar (örneğin Microsoft Excel, Microsoft Word ve Microsoft Access) Visual Basic programları içinden kullanılabilecek nesneler sağlar. Örneğin Microsoft Excel Tablolarının özellikleri, metotları ve olayları Visual Basic Programları içinden kullanılabilir.

Kod bileşenleri, programlanabilir nesne kütüphaneleri sağlar. Bu kütüphaneler bileşenlerin verimli bir şekilde kullanımını sağlar. Kod bileşenlerindeki bir nesne onu kullanan uygulama ile aynı bellek alanında da çalışabilir. Bu durum nesneye erişimi hızlandırır.

ActiveX bileşenlerini iki grupta toplamak mümkündür. Bunlar iç-bileşenler ve dış-bileşenler dir. İç bileşenler uygulama ile aynı bellek alanında çalışırken, dış-bileşenler kendi bellek alanlarında ayrı bir uygulama gibi çalışırlar.

ActiveX bileşenleri ile uygulama arasında bir iletişim sözkonusudur. Bu iletişim istemci/sunumcu (Client/Server) ilişkisi şeklindedir. İstemci, bileşenin özelliklerini kullanan uygulama, sunumcu ise bileşen ve onun kullanılan nesnesidir.

Bir ActiveX bileşeninin iç veya dış olması gerçekleştirimine bağlıdır. İç-bileşenler .DLL dosyaları şeklindedir ve içerdikleri yordamlar çağrıldıkları uygulama ile aynı bellek alanı üzerinde işlem yaparlar. Dış bileşenler de .EXE dosyaları biçimindedir. İçerdikleri yordamlar çağrıldığında önce bu .EXE dosyaları ayrı bir bellek alanında çalıştırılır ve daha sonra uygulama ile bu bileşenler arasında belirli kurallara göre iletişim başlar.

Aşağıdaki tablo, farklı türden bileşenlerin nasıl gerçekleştirilebileceğini gösterir.

 

Bileşen                  Sunucu Türü
ActiveX-içeren           Uygulama Dış-bileşen
Kod Bileşenleri         İç veya Dış bileşen
ActiveX control  İç-bileşen
ActiveX document  İç veya Dış bileşen

İç bileşen kullanmak uygulama performansını artırmanın bir yoludur.

ActiveX bileşenleri tarafından sağlanan nesneleri kullanmanın Visual Basic tarafından sağlanan nesneleri kullanmaktan farkı yoktur. Bir nesnenin referansının aktarılabileceği değişkenler tanımlamak, bu değişkenler kullanılarak nesnenin özelliklerini, metotlarını ve olaylarını kullanmak mümkündür.

ActiveX bileşenlerinin sağladığı nesneleri kullanırken dikkat edilmesi gerekenler:

ActiveX bileşenlerinin sağladığı nesnelere örnek olması açısından aşağıdaki örnek verilebilir.

Bu örnek için, yeni bir proje yaratın ve içine aşağıdaki nesneleri yerleştirin

CommandButton Command1 ControlArray(0-1)

TextBox       Text1    ControlArray(0-2)

Bu nesneleri ileride verilecek olan form görüntüsüne göre form üzerine yerleştirin.

Aşağıdaki kodu forma ekleyin.

Option Explicit

Dim xlApp As Excel.Application

Dim xlBook As Excel.Workbook

Dim xlSheet As Excel.Worksheet

Private Sub Command1_Click(index As Integer)

xlSheet.Cells(1, 1).Value = Text1(0).Text

xlSheet.Cells(2, 1).Value = Text1(1).Text

Select Case index

Case 0: xlSheet.Cells(3, 1).Formula = "=R1C1 + R2C1"

Case 1: xlSheet.Cells(3, 1).Formula = "=R1C1 * R2C1"

End Select

Text1(2).Text = xlSheet.Cells(3, 1)

End Sub

Private Sub Form_Load()

Set xlApp = New Excel.Application

Set xlBook = xlApp.Workbooks.Add

Set xlSheet = xlBook.Worksheets.Add

End Sub

Private Sub Form_Unload(Cancel As Integer)

xlSheet.SaveAs App.Path & "\Temp.xls"

xlApp.Quit

Set xlApp = Nothing

Set xlBook = Nothing

Set xlSheet = Nothing

End Sub
 
 

Program çalıştığında aşağıdaki ekran görüntüsü belirecektir.

Burada TOPLA butonuna basıldığında 1. ve 2. Sayının toplamı, ÇARP butonuna basıldığında ise çarpımı SONUC yazan yere yazılır. Bu işlemler yapılırken Excel’deki toplama ve çarpma fonksiyonları kullanılır.

Form yüklenirken bir Excel uygulama nesnesi yaratılır, bu nesneye bir Workbook ve Worksheet nesnesi eklenir. Daha sonra metin kutularındaki değerler, Excel’deki tablolara aktarılır ve işlemler yapılır. Sonuç 3. Metin kutusuna aktarılır.

Programdan çıkarken de Excel’in kaydetme fonksiyonu kullanılarak yaratılan Excel tablosu kaydedilir.

Bu örnekte fazla karmaşıklığa neden olmamak için hata ele alma kısımları eklenmemiştir. Fakat ActiveX bileşenleri kullanılırken hata ele alma, programın önemli bir kesimidir.

6.4. ACTIVEX BILEŞENLERİNİN VB İÇİNDE KULLANIMI

Bir nesnenin metotlarını, özelliklerini ve olaylarını Visual Basic içinde kullanabilmek içim ilk yapılması gereken nesnenin tanımlanmasıdır. Tanımladıktan sonra bu nesne tanımına bir referans aktarmak gerekir. Bu referans herhangi bir sınıftan türetilen bir nesnenin göstergesidir. Bir referansın nesne değişkenine aktarılması;

İlk durum için Project menüsünün Preferences seçeneği kullanılarak ilgili kütüphanenin belirtilmesi zorunludur. İkinci durumda eğer nesne tek başına var olamıyorsa önce onu barındırabilecek bir nesne yaratmak şarttır.

Eğer bir nesne tek başına türetilebiliyorsa Set deyimi ile, New, GetObject, veya CreateObject komutlarından biri kullanılarak nesne değişkenine bir nesne referansı yaratıp aktarmak mümkündür. Eğer nesne bağımlı bir nesne ise aktarma işlemi kendisini barındıran nesnenin bir özelliği kullanılarak yine bir Set deyimi ile yapılır.

Yukarıdaki örnekte xlSheet değişkeni ile belirtilen Excel Tablosu nesnesi tek başına varolamadığı için önce onu içerebilecek nesneler yaratılmış ve bu tablo değişkenine aktarım ise onu içeren Worksheet nesnesinin Add metodu kullanılarak yapılmıştır.

Tür kütüphanelerinde tanımlı olan türden nesnelerin kullanımı

  1. Project menüsünden Preferences seçeneğini kullanarak nesne kütüphanesini aktif hale getirin
  2. View menüsünden Object Browser seçeneği kullanılarak belirli bir tür kütüphanesinde bulunan nesneleri görmek mümkündür.
  3. Nesnenin sınıfından bir değişken tanımı yapın. Örneğin

  4. Dim Cizelge as Excel.Chart
  5. Değişkene değer aktarmak için Set deyimi ile birlikte New deyimini, CreateObject ve GetObject yordamlarını kullanmak gerekir.

Tür kütüphanelerinde tanımlı olmayan türden nesnelerin kullanımı

  1. Object türünden bir nesne tanımlanır. Bu şekilde tanımlama yapıldığında kullanılacak nesnenin özellikleri, metodları ve olayları doğru bir biçimde kullanılmalıdır.
  2. CreateObject veya GetObject yordamlarıyla birlikte Set deyimi kullanılarak nesne değişkeninne bir referans aktarılır.

Tür kütüphanesinde tanımlı bir nesne için bir değişken tanımlama

  1. Project menüsünden Properties seçeneğini kullanarak ilgili nesne için refarans olacak tür kütüphanesini seçin.
  2. İlgili nesnenin sınıf tanımını kullanarak bir değişken tanımlayın. Bu tanım;

  3. Dim değişken-adı As [New] sınıf-adı

Bu ifadedeki sınıf-adı kısmı iki parçadan oluşabilir. Bu ifade bileşen.sınıf-adı şeklinde olur. Burada bileşen nesneyi sağlayan bileşenin adı, Sınıf-adı nesnenin sınıf adını belirtir.

Örneğin Microsoft Excel Chart nesnesi aşağıdaki iki şekilde de tanımlanabilir.

Dim xlChart As Chart

Dim xlChart As Excel.Chart

Eğer bir nesne için değişken tanımlandığında New deyimi kullanılırsa Visual Basic otomatik olarak bu değişkene bir nesne yaratır ve bu nesneye bir referans ataması gerçekleştirir. Nesnelerin New deyimi kullanılarak tanımlanmaları için şöyle bir örnek verilebilir.
 

Dim tdfPersonelGorev as new TableDef

TdfPersonelGorev.Name = "personel-gorev"


New deyimi kullanılırken dikkatli olunmalıdır. Çünkü bu tür kullanımlar programın çalışmasını yavaşlatır.

Tür kütüphanesinde tanımlı olmayan bir nesne için bir değişken tanımlama

Önce Object türünden bir nesne değişkeni tanımlanır.

Dim değiken-adı As Object

Bu şekilde tanımlanan değişkenlere herhangi bir sınıftan bir nesne referansının atanması mümkündür.

Bir nesne değişkeninin tanımı yapıldıktan sonra bu değişkenin özellik, metot ve olaylarının kullanılabilmesi için bir nesne yaratılıp referansının bu değişkene atanması gerekir. Yeni yaratılan bir nesnenin referansı bir değişkene farklı biçimlerde aktarılabilir.

New deyimi:

Dim tdfMeslekler As DAO.TableDef

Set tdfMeslekler = New DAO.TableDef

tdfMeslekler.Name = "meslekler"

CreateObject yordamı:

Set değişken-adı = CreateObject("sınıf-adı")

Dim xlApp As Excel.Application

Set xlApp = CreateObject("Excel.Application")

GetObject yordamı:

Set değişken-adı = GetObject([yol-adı] [, sınıf-adı]).

Burada yol-ismi parametresi, var olan bir dosyanın yolunu belirleyebilir(belirtilen dosya kullanılarak yeni bir nesne yaratılır), boş olabilir(Bu durumda CreateObject olarak işlem görülür) veya pas geçilebilir.

Eğer ActiveX Bileşeni çalışıyorsa,

Set X = GetObject(, "Bileşen.Application")

X varolan bir uygulama nesnesinin referansını alır.

Set X = GetObject("", "Bileşen.Object")

X tek başına varolabilecek yeni bir nesne referansını alır

Eğer ActiveX bileşeni çalışmıyorsa

Set X = GetObject(, "Bileşen.Object") Hatalı durum.

Set X = GetObject("", "Bileşen.Object")

ActiveX bileşeni çalıştırılır, ve X yeni bir nesne referansını alır..

Örnekler:

Dim wordApp As Word.Application

Set wordApp = GetObject("", "Word.Application")

Var olan bir nesne döndürülür veya yeniden yaratılır.

Dim xlBook As Excel.Workbook

Set xlBook = GetObject("C:\temp.xls")

Excel çalıştırılır, “temp.xls” açılır, yeni nir nesne referansı döndürülür.

6.5. ACTIVEX BİLEŞENLERİ İLE İLETİŞİM KURMA

Bir nesne referansı bir değişkene atandıktan sonra, bu nesnenin özelliklerini ve metotlarını kullanmak mümkündür.

Nesne özelliklerini ve metotlarını kullanma

Bir nesnenin özellik ve metotlarını kullanmak için nesne özellik ve nesne/metot gösterimleri kullanılır.

Nesne olaylarını ele alma

Visual Basic programlarının içinde ActiveX nesnelerinin olaylarını ele almak da mümkündür. Örneğin, eğer Visual Basic içinde bir Excel uygulamasına referans yaratılmışsa, Excel’de oluşan olayları ele almak mümkündür.

Bir nesne değişkeni tanımlanırken WithEvents deyimi kullanılırsa nesnenin olaylarını olay yordamları kullanarak ele almak mümkündür.

Bunun için yukarıda gerçekleştirilen örneği aşağıdaki belirtilen yordamlarını belirtildiği gibi değiştirin ve belirtilen olay yordamını ekleyin.

Dim xlApp As Excel.Application

Dim WithEvents xlBook As Excel.Workbook

Dim xlSheet As Excel.Worksheet

Dim kapat As Boolean

Private Sub Form_Load()

Set xlApp = New Excel.Application

Set xlBook = xlApp.Workbooks.Add

Set xlSheet = xlBook.Worksheets.Add

xlApp.Visible = True

xlApp.WindowState = xlMinimized

kapat = False

End Sub

Private Sub Form_Unload(Cancel As Integer)

kapat = True

If MsgBox("SONUCU KAYDETMEK ISTIYOR MUSUNUZ", _

vbYesNo) = vbYes Then

xlBook.SaveAs App.Path & "\temp.xls"

End If

xlBook.Close False

xlApp.Quit

End Sub

Private Sub xlBook_BeforeClose(Cancel As Boolean)

If Not kapat Then

xlBook.Application.Visible = False

MsgBox "BU UYGULAMA KAPATILAMAZ"

xlBook.Application.Visible = True

Cancel = True

End If

End Sub

Bu koddaki yenilikler, tanımlamalar kısmındaki WithEvents deyimi ile başlamaktadır. Form_Load olayında Excel programının görünür hale gelmesi ve küçültülmüş duruma geçmesi sağlanıyor.

Excel Workbook nesnesi kapatılacağı zaman ortaya çıkan xlBook_BeforeClose olay yordamında Excel’in kapatılması engellenmektedir.

6.6 MICROSOFT EXCEL’İ BİLEŞEN OLARAK KULLANAN BİR PROGRAM

Böyle bir program gerçekleştirmek için;

1. Yeni bir proje yaratın. Formun üzerine aşağıdaki nesneleri ileride verilecek olan form görüntüsüne dayanarak yerleştirin.

 

ListView  Name  Listview1
  View  3-lvwReport
  Text1  (ControlArray)
Form Name  Form1 

Formun içine aşağıdaki kodu ekleyin.

Option Explicit

Dim xlApp As Excel.Application

Dim WithEvents xlBook As Excel.Workbook

Dim xlSheet As Excel.Worksheet

Dim satirSay As Integer

Private Sub Command1_Click()

Dim i As Integer, j As Integer

For j = 0 To ListView1.ListItems.Count - 1

xlSheet.Cells(j + 1, 1).Value = ListView1.ListItems(j + 1).Text

For i = 0 To 4

xlSheet.Cells(j + 1, i + 1).Value = _

ListView1.ListItems(j + 1).SubItems(i + 1)

Next i

Next j

End Sub

Private Sub Form_Load()

Set xlApp = New Excel.Application

Set xlBook = xlApp.Workbooks.Add

Set xlSheet = xlBook.Worksheets.Add

satirSay = 1

ListView1.ColumnHeaders.Add , , "A", 600

ListView1.ColumnHeaders.Add , , "B", 600

ListView1.ColumnHeaders.Add , , "C", 600

ListView1.ColumnHeaders.Add , , "D", 600

ListView1.ColumnHeaders.Add , , "E", 600

ListView1.ColumnHeaders.Add , , "F", 600

End Sub

Private Sub Form_Unload(Cancel As Integer)

Dim dAd As String

dAd = App.Path & "\Temp.xls"

If Dir(dAd) <> "" Then Kill dAd

xlSheet.SaveAs dAd

xlApp.Quit

Set xlSheet = Nothing

Set xlBook = Nothing

Set xlApp = Nothing

End Sub

Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)

Dim i As Integer

If Index = 5 And KeyAscii = 13 Then

ListView1.ListItems.Add satirSay, , Text1(0)

Text1(0) = ""

For i = 1 To 5

ListView1.ListItems(satirSay).SubItems(i) = Text1(i)

Text1(i) = ""

Next i

satirSay = satirSay + 1

Text1(0).SetFocus

End If

End Sub

Burada, bir ListView nesnesinin içine metin kutularına girilen veriler aktarılmakta, kaydet düğmesine basıldığında ise bu veriler bir Excel tablosu içine aktarılır. Bu tablo ise programdan çıkışta kaydedilmektedir.

Programın çalışması aşağıdaki gibidir.



 
 
 
 

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