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ı
Tür kütüphanelerinde tanımlı olmayan türden nesnelerin kullanımı
Tür kütüphanesinde tanımlı bir nesne için bir değişken tanımlama
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.