8. ACTIVEX KONTROL NESNESİ YARATMA

Bu bölümde adımlar halinde ActiveX koontrol nesnelerinin nasıl yaratıldığı işlenecektir.

ActiveX kontrol nesneleri Visual Basic araç kutusuna yerleştirilebilen ve Visual Basic programının bir parçası olmayan, uygulama geliştirirken uygulamalar içinde kullanılabilen nesnelerdir.

Bir ActiveX kontrol nesnesini diğer kontrol nesneleri gibi kullanmak mümkündür. Daha önce kullanmış olduğumuz ActiveX Data Bound kontrol nesneleri buna bir örnek olarak verilebilir.

ActiveX Kontrol nesneleri programların daha kolay yapılabilmesini, daha esnek olmasını ve daha işlevsel olmasını sağlar. Bu kontrol nesnelerinin özellikleri, metotları ve olayları kendi belirlediğimiz durumları karşılayacak şekilde tasarlandığı için programın bize özgü yapı taşları görevini görürler.

Bir ActiveX kontrol nesnesi UserControl nesnesi ve bunun içine konacak olan birtakım kontrol nesnesinden oluşur.

Visual Basic kullanarak ActiveX kontrol nesnesi yaratmak için üç yol vardır.

Bu yollardan ikincisi en basit olanıdır. Tek yapılması gereken var olan konrol nesnesini UserControl üzerine yerleştirip buna bazı işlevsellikler eklemektir. İlkinde kontrol nesnesinin çizimi de dahil, tasarımı, olayları, metotları kullanıcı tarafından gerçekleştirilir.

ActiveX control nesnesinin yaratılması

Visual Basic Add-Ins menüsünden kullanılabilecek olan ActiveX Control Interface Wizard sihirbazı var olan kontrol nesnelerine dayanan yeni kontrol nesneleri yaratmaya olanak tanır. Fakat başlangıç için bu sihirbazın yarattığı kodu incelemek biraz zor ve karmaşık gelebilir. Bu yüzden önce bir ActiveX kontrol nesnesinin nasıl yaratıldığını görelim.

ActiveX kontrol nesnesi yaratmanın adımları:

Örnek: ActiveX kontrol nesnesi yaratma.

Yukarıda genel olarak adımlar halinde belirtilen işlemi yine adımlar halinde gerçekleştirelim.

  1. File menüsünden New Project seçeneğini seçin. ActiveX Control türünden bir proje yaratın.
  2. Project menüsünden Project Properties seçeneğini seçin. Project Name olarak YeniButon yazın. Project Description kısmına Yeni ActiveX Butonu yazın.
  3. Projedeki UserControl nesnesinin, Name özelliğini yButon, BackColor özelliğini &H00FF8080&, Height özelliğini 405, Width özelliğni 1605 olarak değiştirin.
  4. Projeyi kaydedin.
  5. Kontrol nesnesini test edebilmek için Standard EXE türünden yeni bir proje ekleyin. Üzerindeki formun Name özelliğini frmYBtn, Caption özelliğini Kontrol Nesnesinin Testi olarak değiştirin.
  6. Proje grubunu kaydedin.

Bir ActiveX nesnesinin tasarım aşamasında tetiklenen olayları, çalışan bir kesimi vardır. Bu olaylardan biri de Resize olayıdır. Tasarım sırasında kontrol nesnesinin boyutları değiştiğinde bu olay tetiklenir. Bunu denemek için:

  1. Aşağıdaki kodu UserControl nesnesinin kod kısmına ekleyin.

  2.  

     
     
     
     

    Private Sub UserControl_Resize()

    Static i As Integer

    i = i + 1

    Debug.Print "Boyutlandırma" & i

    End Sub

  3. UserControl tasarım pencerisini ekrana getirin ve bu pencereyi kapatın. FrmYBtn formunun tasarım penceresini açın. Araç kutusunun altında yeni kontrol nesnesi standart bir şekil ile görülmektedir.
  4. yButon kontrol nesnesini çift tıklayın. Bu işlem kontrol nesnesinin gerçek boyutunda formun tam ortasına yerleştirilmesini sağlar. Bu durumuyla Immediate Window penceresinde “Boyutlandırma1” yazısı yazılır. Bunun anlamı Resize olayının bir kere tetiklendiğidir. Kontrol nesnesi yeniden boyutlandırıldığında bu defa “Boyutlandırma2” yazısı çıkacak ve bu böyle devam edecektir.Kontrol nesnesinin Width özelliği değiştirildiğinde bu yazının tekrar yazıldığı görülür.
  5. yButton tasarım penceresini açın. Şimdi form penceresine dönün. Kontrol nesnesinin taralı olarak gözüktüğü görülecektir. Şimdi yine kontrol nesnesini boyutlandırın. Bu defa herhangi bir yazı yazılmadı. Çünkü kontrol nesnesinin tasarım penceresi açık iken kontrol nesnesi çalışmaz.

Şimdi yeni butonun üç boyutlu görünümünü gerçekleştirmek için aşağıdaki işlemleri gerçekleştirin.

  1. Form üzerindek yButon nesnesini silin ve çift tıklayarak yeniden bir yButon yerleştirin. Bu işlem gerçek boyutu ile bir yButon yerleştirilmesini sağlar.
  2. Aşağıdaki Line nesnelerini belirtilen özellikleriyle UserControl üzerine yerleştirin.

  3.  

     
     
     

    Line  Name  Line1
      BorderColor  &H00808080&
      BorderWidth  2
      X1  1560
      X2 1560
      Y1  60
      Y2 400
    Line  Name Line2
      BorderColor  &H00E0E0E0&
      BorderWidth  2
      X1  20
      X2 20
      Y1 0
      Y2 400
    Line  Name Line2
      BorderColor  &H00808080&
      BorderWidth  2
      X1 40
      X2 1560
      Y1 405
      Y2 405
    Line  Name  Line4
      BorderColor  &H00E0E0E0&
      BorderWidth  2
      X1 0
      X2 1560
      Y1 20
      Y2 20
  4. Form penceresine geçin, sağ tuşa basın ve çıkan menüden Update UserControl seçeneğini seçin. Üç boyutlu görünümün sağlandığı görülür.
  5. Şimdi kontrol nesnesini yeniden boyutlandırın. Görüleceği gibi yeni çizilen çizgiler olduğu yerde durmaktadır.

Bir UserControl nesnesinin temel olayları

Bir UserControl nesnesinin yaşamı bir form üzerine yerleştirlmesiyle başlar ve formdan silinince yok olur. Bu yaşamı boyunca oluşan olayların ne zaman oluştuğunu bilmek önemlidir. Bu olayları görmek için:

  1. Aşağıdaki kodu Ybuton kontrol nesnesinin kod kesimine yazın.

  2.  

     
     
     

    Private Sub UserControl_Initialize()

    Debug.Print "Initialize"

    End Sub

    Private Sub UserControl_InitProperties()

    Debug.Print "Init properties"

    End Sub

    Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

    Debug.Print "Read Properties"

    End Sub

    Private Sub UserControl_Terminate()

    Debug.Print "Terminate"

    End Sub

    Private Sub UserControl_WriteProperties(PropBag As PropertyBag)

    Debug.Print "Write Properties"

    End Sub

  3. Formun tasarım penceresini açın, sağ tuşa basıp Update User Control seçeneğini seçin. Bu işlem gerçekleştiği anda aşağıdaki yazıların Immediate penceresine yazıldığı görülür.

  4.  

     

    Initialize

    Read Properties

    Boyutlandırma1

    Update User Control seçeneği form üzerindeki kontrol nesnesini siler ve yerine aynı boyutlarda yeni bir tane yaratır. Bu yazılar kontrol nesnesinin yaratılması sırasında oluşan olayları belirtmektedir.

  5. Şimdi F5 tuşuna basarak projeyi çalıştırın. Bu defa aşağıdaki yazıların yazıldığı görülecektir. Bunlarda ilki tasarım zamanındaki nesnenin yok edildiğini belirtmektedir.

  6.  

     
     
     

    Write Properties

    Terminate

    Initialize

    Read Properties

    Boyutlandırma1

  7. Şimdi ilk nesneyi yukarı doğru çekerek, çift tıklama ile yeni bir nesne formu üzerine yerleştirin. Şimdi F5 tuşuna basarak projeyi çalıştırın. Bu defa yukarıdaki mesajlardan ikişer tane oluştuğu görülecektir.

Şimdi bütün bu olayların ne zaman oluştuğunu özetleyelim.

Initialize:        Kontrol nesnesi her yaratıldığında(tasarım veya çalışma   zamanında) oluşan ilk olaydır.

InitProperties: Bir kontrol nesnesi yaratıldığında, bazı özelliklerine ilk değer atamak için kullanılır.

Read Properties:   Kontrol nesnesinin bir olgusu yaratıldığında oluşur.

Resize:             Kontrol nesnesi yeniden boyutlandırıldığında oluşur.

Paint:                 Kontrol nesnesi form üzerinde kendisini gösterdiğinde oluşur.

Write Properties:  Tasarım zamanı nesnesi silindiğinde oluşur. Özelliklerdeki  değişimleri kaydetmek için kullanılır.

Yukarıda da belirtildiği gibi kontrol nesnesi yeniden boyutlandırıldığında çizgilerin ortada kaldığı görünmektedir. Bunu önlemek için Resize olayının kodunu aşağıdaki gibi değiştirin.

Private Sub UserControl_Resize()

Line1.X1 = scalewidht - 20

Line1.X2 = ScaleWidth - 20

Line1.Y2 = ScaleHeight

Line2.Y2 = ScaleHeight

Line3.X2 = ScaleWidth - 40

Line3.Y1 = ScaleHeight - 20

Line3.Y2 = ScaleHeight - 20

Line4.X2 = ScaleWidth - 40

End Sub

Yani durumuyla, yeniden boyutlandırma sırasında herhangi bir sorun olmadığı, üç boyutlu görünüşün devam ettiği görülür.

Kontrol Nesnesine bir Caption özelliği ekleme

Kontrol nesnesine Caption özelliği eklemek için bir etiket eklemek gerekir. Etiketin özellikleri dikkatli belirlenmelidir. Çünkü tasarımın güzel olması bu özelliklerin uygun olarak seçilmesine bağlıdır. Şimdi aşağıdaki adımları izleyerek bir Caption özelliğinin nasıl eklendiğini görelim.

  1. Kontrol nesnesi tasarım penceresini açın ve üzerine bir etiket yerleştirin. Etiketin aşağıdaki özelliklerini belirtildiği gibi değiştirin.

  2.  

     
     
     
     
     

    Label  Name  lblCaption
      Alignment  Center
      Autosize  True
      Font  Times New Roman-10-Tur.
      ForeColor  White
      BackStyle  Transparent
      Caption  
      WordWrap  True
  3. UserControl kod penceresini açın. Tools menüsünden Add Procedure seçeneğini kullanarak, Caption adında, Public bir Property yaratın ve aşağıdaki kodu ekleyin.

  4.  

    Public Property Get Caption() As String

    Caption = lblCaption.Caption

    End Property

    Public Property Let Caption(vNewValue As String)

    lblCaption.Caption = vNewValue

    End Property

  5. Kontrol nesnesi tasarım penceresini kapatın, formun üzerindeki kontrol nesnelerinden birini seçin. Properties penceresinden de görüleceği gibi nesnenin artık Caption adlı bir özelliği vardır. Bu özelliği değiştirip ENTER tuşuna basın. Yazılan Caption özelliğinin nesne üzerine yansıdığı görülecektir.
  6. Şimdi projeyi çalıştırın. Yazılan Caption değerinin yok olduğu görülecektir. Bunun sebebi, yok edilen tasarım zamanı nesnesinin özelliklerinin çalışma zamanı nesnesine aktarılmamasıdır. Şimdi bu aktarmanın nasıl yapılacağını görelim.

Tasarım zamanındaki özelliklerin çalışma zamanına aktarılması için UserControl nesnesinin iki olayı kullanılır. Bunlar ReadProperties ve WriteProperties olaylarıdır. Kod penceresini açın ve tüm Debug.Print deyimlerini kaldırın. Aşağıdaki kodu ekleyin.

Private Sub UserControl_InitProperties()

Caption = Extender.Name

End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

Caption = PropBag.ReadProperty("Caption", Extender.Name)

End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)

PropBag.WriteProperty "Caption", Caption, Extender.Name

End Sub

Buradaki ilk yordamda Caption özelliğine ilkdeğer atama işlemi yapılmaktadır. Diğer yordamlar ise özelliklerin PropBag adı verilen ve özelliklerin değerini tutan özel bir veri yapısı içine özellik değerlerinin yazılması ve oradan özellik değerlerinin okunması için kullanılmaktadır.

UserControl nesnesine yapılması gereken bir diğer ek ise Caption değerinin nesne üzerinde ortalı görünmesini sağlamak olmalıdır. Bunun için aşağıdaki satırı Resize olayına ekleyin.

lblCaption.Move (ScaleWidth - lblCaption.Width) / 2, _

(ScaleHeight - lblCaption.Height) / 2

Proje bu haliyle çalıştırıldığında Caption özelliğinin artık doğru çalıştığı görülecektir.

Burada kullanılan Extender nesnesi UserControl nesnesinin ilk yaratıldığı anda sahip olduğu özellikleri, olayları ve metotları içerir. Bu nesne UserControl nesnesinin ilkel halidir. Tanımlı olan bir başka nesne ise Ambient nesnesidir. Bu nesne ise kontrol nesnesinin içine konduğu formu belirtir.

UserControl nesnesinin olayları

Usercontrol nesnesi için tanımlanmış bir çok olay vardır. Bu olayların yaratılacak kontrol nesnesi için geçerli olabilmesi için bir biçimde dışarıya gönderilmesi gerekir. Bu işleme olay tanımlama denir.

Şimdi UserControl nesnesinin olaylarının nasıl kullanılacağını görelim. Bunun için butona basıldığını belirten içe göçme işlemini gerçekleştirelim.

Aşağıdaki kodu UserControl kod kesimine ekleyin.
 
 

Private ArkaRenk As Long

Const ISIKLI = &HE0E0E0

Const GOLGELI = &H808080

Private Sub BASILI()

ArkaRenk = BackColor

Line1.BorderColor = ISIKLI

Line2.BorderColor = GOLGELI

Line3.BorderColor = ISIKLI

Line4.BorderColor = GOLGELI

BackColor = &HFFFFFF - BackColor

End Sub

Private Sub SERBEST()

BackColor = ArkaRenk

Line1.BorderColor = GOLGELI

Line2.BorderColor = ISIKLI

Line3.BorderColor = GOLGELI

Line4.BorderColor = ISIKLI

End Sub

Private Sub UserControl_MouseDown(Button As Integer, _

Shift As Integer, X As Single, Y As Single)

BASILI

End Sub

Private Sub UserControl_MouseUp(Button As Integer, _

Shift As Integer, X As Single, Y As Single)

SERBEST

End Sub

Private Sub lblCaption_MouseDown(Button As Integer, _

Shift As Integer, X As Single, Y As Single)

BASILI

End Sub

Private Sub lblCaption_MouseUp(Button As Integer, _

Shift As Integer, X As Single, Y As Single)

SERBEST

End Sub

Burada dikkat edilmesi gereken BASILI ve SERBEST yordamlarının hem UserControl ve hem de lblCaption için çağrıldığıdır.

Progragram çalıştırıldığında içe göçme olayının gerçekleştiği görülecektir.

UserControl nesnesi için olay tanımlama

Bir UserControl nesnesine olay eklemek çok basittir. Daha önce ActiveX DLL nesnesi içindeki olay tanımının aynıdır. Şimdi UserControl nesnesinin kod penceresini açın ve aşağıdaki tanımı Declarations kesimine ekleyin.

Public Event Click()

Şimdi yapılması gereken bu olayın ne zaman ortaya çıkacağına karar vermektir. Bu olay, UserControl nesnesinin ve lblCaption nesnesinin Click olayları oluştuğunda ortaya çıkacaktır. Bunun için aşağıdaki kodu UserControl nesnesine ekleyin.

Private Sub lblCaption_Click()

RaiseEvent Click

End Sub

Private Sub UserControl_Click()

RaiseEvent Click

End Sub

Bu olayları test etmek için UserControl tasarım penceresini kapatın. Formun kod kesimine aşağıdaki kodu ekleyin.

Private Sub yButon1_Click()

MsgBox "BASTIGINIZ IÇIN" & vbCrLf & " TESEKKURLER " & _

yButon1.Caption

End Sub

Private Sub yButon2_Click()

MsgBox "BASTIGINIZ IÇIN" & vbCrLf & " TESEKKURLER " & _

yButon2.Caption

End Sub

Program çalıştırılıp üzerine yerleştirilmiş olan butonlara basıldığında bir mesaj kutusu ile basıldığı bilgisi kullanıcıya gösterilmektedir. Böylece kullanıcıya UserControl nesnesi için olay tanımlama ve bu olayı kullanabilme olanağı tanınmış olduğu görülmektedir.

UserControl nesnesine Property Page ekleme

Property yordamları kullanarak tanımlanan özellikler, kontrol nesnesi bir form üzerine yerleştirilip seçili duruma getirildiğine Properties penceresinde görünürler. Ayrıca kendi yarattığımız kontrol nesnelerinde bu özellikleri toplu olarak, bir dialog kutusu yardımıyla değiştirebilme olanağı da vardır. Bu dialog kutularına Property Page denir. Bunlara örnek olarak, CommonDialog kontrol nesnesinin (Custom) adlı özelliğini kullanarak çıkan Property Page verilebilir. Bu dialog kutusu incelendiğinde, içinde bir çok sekme bulunan bir dialog kutusu olduğu görülür.

Kontrol nesnesine eklenen her Property Page, Property Page dilog kutusuna bir sekme olarak eklenir. Bu dialog kutusundaki Ok, Cancel, Apply butonları ve sekmeli yapı Visual Basic tarafından otomatik olarak sağlanır.

Bir kontrol nesnesine Property Page eklemek için aşağıdaki adımlar takip edilmelidir.

  1. UserControl nesnesinin tasarım pencersi açılır, Project menüsünden Add PropertyPage seçeneği seçilir.
  2. Property Page için bir isim ve Caption belirlenir.
  3. Projeyi kaydedin.
  4. Propety Page tasarım penceresi UserControl tasarım penceresine benzerdir. Buradan Property Page tasarımı yapılabilir.

Şimdi bu adımları örneğimiz üzerinde adımlar halinde uygulayalım.

  1. UserControl tasarım penceresini açın. Project menüsünden Add Property Page seçeneğini seçin.
  2. Aşağıdaki nesneleri ekleyin ve özelliklerini belirtildiği gibi değiştirin

 
 

PropertyPage  Name  YBGenel
  Caption  Genel
TextBox  Name  txtCaption
Label  Name  Label1
  Caption Caption
  1. Projeyi kaydedin. Property Page kod penceresini açın ve aşağıdaki kodu   ekleyin.

Private Sub PropertyPage_ApplyChanges()

Dim obj As Variant

For Each obj In SelectedControls

obj.Caption = txtCaption

Next

End Sub

Private Sub PropertyPage_SelectionChanged()

txtCaption = SelectedControls(0).Caption

End Sub

Private Sub txtCaption_Change()

Changed = True

End Sub

Bu kodda, ilk yordam yapılan değişiklikleri uygular, ikinci yordam şu andaki Caption değerini metin kutusuna alır, son yordam isi Property Page üzerindeki Apply butonunun aktif hale gelmesini sağlar.

  1. Property Page tasarım penceresini kapatın, UserControl tasarım penceresini açın. Properties penceresinden Property Pages özelliğini kullanarak YBGenel Property Page dialog kutusunu kontrol nesnesine ekleyin.
  2. Kontrol nesnesini test etmek için kullanılan frmYBtn formunu açıp Update UserControl seçeneği ile kontrol nesnelerini günleyin.
  3. Kontrol nesnelerinden birini seçip, Properties penceresinden (Custom) özelliğini kullanarak Property Page dialog kutusunu açın. Caption özelliğini değiştirip OK butonuna basın. Kontrol nesnesinin Caption özelliğinin değiştiği görülecektir. Bu işlem birden fazla kontrol nesnesinin özelliklerini bir defada değiştirmek için de kullanılabilir. Property Page Özellik sayfası olarak türkçeye çevrilebilir.

     4. Adımda Property Page (Özellik Sayfası) ilişkilendirme işlemi yapılırken görüldüğü üzere standart bazı özellik sayfaları           bulunmaktadır. Bunları eklemek için tek yapılması gereken önlerine işaret koymaktır. Bu işlem yapılmadan önce yapılması            gereken standart özellik sayfalarının kullanacağı özelliklerin yaratılmasıdır.

Şimdi Arka Plan Rengini belirleyen bir özellik tanımlayıp bunun için Özellik Sayfası kullanma işlemini adımlar halinde görelim.

  1. UserControl kod pencersini açın, ArkaRenk diye bir özellik ekleyin ve aşağıdaki kodu yazın.

  2.  

     
     
     

    Public Property Get ARenk() As OLE_COLOR

    ARenk = UserControl.BackColor

    End Property

    Public Property Let ARenk(ByVal yRenk As OLE_COLOR)

    UserControl.BackColor = yRenk

    PropertyChanged "ARenk"

    End Property

  3. Sırasıyla InitProperties, ReadProperties ve WriteProperties olaylarına aşağıdaki satırları ekleyin.
  4. * ARenk= RGB(192, 192, 192) (InitProperties)

    * ARenk = PropBag.ReadProperty("ARenk", RGB(192, 192, 192))

    * PropBag.WriteProperty "ARenk", ARenk, RGB(192, 192, 192)

  5. Properties penceresinden Property Pages özelliğini seçip Color standart özellik sayfasını seçin.
  6. Deneme formunu açın ve üzerindeki kontrol nesnelerini silin. Çift tıklama ile yeni bir kontrol nesnesi ekleyin.
  7. (Custom) özelliğini kullanarak kontrol nesnesinin özellik sayfalarını açın ve özelliklerde değişiklik yaparak deneyin.

Böylece artık iki tane yeni özellik ve iki tane Özellik sayfası eklenmiş oldu. Görüldüğü gibi özellik sayfaları özelliklere değer ekleme sırasında çok kullanışlı bir ortam sunmaktadır.

Control Interface Wizard kullanarak kontrol yaratma

Şu ana kadar kontrol nesnesi yaratmanın aşamaları adım adım anlatıldı. Kontrol nesnesi yaratma, özellik, metot ve olay ekleme işlemleri fazla karmaşık olmayan fakat detaylı işlemlerdir. Bu detaylardan biri unutulduğunda kontrol nesnesi doğru çalışmayabilir.

Kontrol yaratmak için kullanılan Control Interface Wizard, kontrol yaratımının herhangi bir aşamasında devreye konabilir. Örneğin yukarıda yapıldığı gibi kontrol nesnesinin genel tasarımı bittikten sonra bazı otomatikleşmiş işlemlerin yapılması için faydalı olabilir. Şimdi yukarıdaki kontrol nesnesinin iyileştirilmesi, başka özellikler eklenmesi için Control Interface Wizard kullanımı örneklenecektir.

  1. Önce kontrol nesnesi için tanımlanmış olan olayları silin.
  2. Add-Ins menüsünden Control Interface Wizard seçeneğini seçin.
  3. İlk çıkan dialog kutusunda Font özelliğini seçip yapmadan Next butonuna basın. Çıkan dialog kutusuna aşağıdaki nesne olaylarını ve özelliklerini ekleyin.

  4. Next butonuna basın. Çıkan dialog kutusunu kullanarak tanımlanan olay ve özellikleri belirli olay veya özelliklerle ilişkilendirin.
  5.  

    Public Name  Control  Member
    Arenk  (none)  
    Caption  (none)  
    CiftTIK  (none)  
    Font  lblCaption  Font
    FontBoyu  lblCaption  FontSize
    ItalikFont  lblCaption  FontItalic
    KoyuFont  lblCaption FontBold
    Orenk  lblCaption  ForeColor
    Resim  UserControl  Picture
    Secili  UserControl  Enabled
    TIK  (none)  

     

    Burada Arenk, Caption, CiftTIK ve TIK isimleri hiç bir olayla veya özellikle ilişkilendirilmemiştir. Bunlar birden fazla kontrol nesnesini ilgilendirmektedir.

  6. Next butonuna basın ve daha sonra Finish butonuna basarak işlemi tamamlayın.
  7. Projeyi kaydedin. Yeni yaratılan kodda bazı değişiklikler ve yapılması gereken bazı eklemeler sözkonusudur. Kodu aşağıdaki gibi değiştirin.

Option Explicit

Private ArkaRenk As Long

Const ISIKLI = &HE0E0E0

Const GOLGELI = &H808080

'Event Declarations:

Event TIK()

Event CiftTIK()
 
 

Private Sub BASILI()

ArkaRenk = BackColor

Line1.BorderColor = ISIKLI

Line2.BorderColor = GOLGELI

Line3.BorderColor = ISIKLI

Line4.BorderColor = GOLGELI

BackColor = &HFFFFFF - BackColor

End Sub

Private Sub SERBEST()

BackColor = ArkaRenk

Line1.BorderColor = GOLGELI

Line2.BorderColor = ISIKLI

Line3.BorderColor = GOLGELI

Line4.BorderColor = ISIKLI

End Sub

Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

BASILI

End Sub

Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

SERBEST

End Sub

Private Sub lblCaption_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

BASILI

End Sub

Private Sub lblCaption_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

SERBEST

End Sub

Private Sub UserControl_InitProperties()

Caption = Extender.Name

ARenk = RGB(192, 192, 192)

End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

Caption = PropBag.ReadProperty("Caption", Extender.Name)

ARenk = PropBag.ReadProperty("ARenk", RGB(192, 192, 192))

Secili = PropBag.ReadProperty("Secili", True)

KoyuFont = PropBag.ReadProperty("KoyuFont", 0)

ItalikFont = PropBag.ReadProperty("ItalikFont", 0)

FontADI = PropBag.ReadProperty("FontADI", "Times New Roman")

FontBoyu = PropBag.ReadProperty("FontBoyu", 10)

ORenk = PropBag.ReadProperty("ORenk", &H80000007)

Set Resim = PropBag.ReadProperty("Resim", Nothing)

Set Font = PropBag.ReadProperty("Font", lblCaption.Font)

End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)

PropBag.WriteProperty "Caption", Caption, Extender.Name

PropBag.WriteProperty "ARenk", ARenk, RGB(192, 192, 192)

PropBag.WriteProperty "Secili", Secili, True

PropBag.WriteProperty "KoyuFont", KoyuFont, 0

PropBag.WriteProperty "ItalikFont", ItalikFont, 0

PropBag.WriteProperty "FontADI", FontADI, "Times New Roman"

PropBag.WriteProperty "FontBoyu", FontBoyu, 10

PropBag.WriteProperty "ORenk", ORenk, &H80000007

PropBag.WriteProperty "Resim", Resim, Nothing

PropBag.WriteProperty "Font", Font, lblCaption.Font

End Sub

Private Sub UserControl_Resize()

Line1.X1 = ScaleWidth - 20

Line1.X2 = ScaleWidth - 20

Line1.Y2 = ScaleHeight

Line2.Y2 = ScaleHeight

Line3.X2 = ScaleWidth - 40

Line3.Y1 = ScaleHeight - 20

Line3.Y2 = ScaleHeight - 20

Line4.X2 = ScaleWidth - 40

lblCaption.Move (ScaleWidth - lblCaption.Width) / 2, _

(ScaleHeight - lblCaption.Height) / 2

End Sub

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=UserControl,UserControl,-1,Enabled

Public Property Get Secili() As Boolean

Secili = UserControl.Enabled

End Property

Public Property Let Secili(ByVal New_Secili As Boolean)

UserControl.Enabled() = New_Secili

PropertyChanged "Secili"

End Property

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=lblCaption,lblCaption,-1,FontBold

Public Property Get KoyuFont() As Boolean

KoyuFont = lblCaption.FontBold

End Property
 
 

Public Property Let KoyuFont(ByVal New_KoyuFont As Boolean)

lblCaption.FontBold() = New_KoyuFont

PropertyChanged "KoyuFont"

End Property

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=lblCaption,lblCaption,-1,FontItalic

Public Property Get ItalikFont() As Boolean

ItalikFont = lblCaption.FontItalic

End Property

Public Property Let ItalikFont(ByVal New_ItalikFont As Boolean)

lblCaption.FontItalic() = New_ItalikFont

PropertyChanged "ItalikFont"

End Property

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=lblCaption,lblCaption,-1,FontName

Public Property Get FontADI() As String

FontADI = lblCaption.FontName

End Property

Public Property Let FontADI(ByVal New_FontADI As String)

lblCaption.FontName() = New_FontADI

PropertyChanged "FontADI"

End Property

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=lblCaption,lblCaption,-1,FontSize

Public Property Get FontBoyu() As Single

FontBoyu = lblCaption.FontSize

End Property

Public Property Let FontBoyu(ByVal New_FontBoyu As Single)

lblCaption.FontSize() = New_FontBoyu

PropertyChanged "FontBoyu"

End Property

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=lblCaption,lblCaption,-1,ForeColor

Public Property Get ORenk() As OLE_COLOR

ORenk = lblCaption.ForeColor

End Property

Public Property Let ORenk(ByVal New_ORenk As OLE_COLOR)

lblCaption.ForeColor() = New_ORenk

PropertyChanged "ORenk"

End Property

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=UserControl,UserControl,-1,Picture

Public Property Get Resim() As Picture

Set Resim = UserControl.Picture

End Property

Public Property Set Resim(ByVal New_Resim As Picture)

Set UserControl.Picture = New_Resim

PropertyChanged "Resim"

End Property

Private Sub lblCaption_Click()

RaiseEvent TIK

End Sub

Private Sub lblCaption_DblClick()

RaiseEvent CiftTIK

End Sub

Private Sub UserControl_Click()

RaiseEvent TIK

End Sub

Private Sub UserControl_DblClick()

RaiseEvent CiftTIK

End Sub

Public Property Get ARenk() As OLE_COLOR

ARenk = ArkaRenk

End Property

Public Property Let ARenk(ByVal New_ARenk As OLE_COLOR)

ArkaRenk = New_ARenk

PropertyChanged "ARenk"

End Property

Public Property Get Caption() As String

Caption = lblCaption.Caption

End Property

Public Property Let Caption(ByVal New_Caption As String)

lblCaption.Caption = New_Caption

PropertyChanged "Caption"

End Property

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=lblCaption,lblCaption,-1,Font

Public Property Get Font() As Font

Set Font = lblCaption.Font

End Property

Public Property Set Font(ByVal New_Font As Font)

Set lblCaption.Font = New_Font

PropertyChanged "Font"

End Property

Bu kodda yapılan değişiklikler, ReadProperties ve WriteProperties olay yordamları ile var olan özellik yordamlarında yapılmıştır. Koda yapılan eklemeler ise olayların yaratılması için eklenen kodlardır.

Kontrol nesnesini test etmeden önce Properties penceresinden Property Pages özelliğini kullanarak var olan tüm standart özellik sayfalarını seçin.

FrmYBtn formunu seçin. Update User Controls seçeneğini kullanarak kontrol nesnelerini günleyin. (Custom) özelliğini kullanarak özellik sayfalarını çıkarın ve özellikleri değiştirin.

Yeni butonun çalışmasının tam olduğu görülmektedir. Şimdi yapılması gereken bu butonun başka yerlere taşınmasını sağlamaktır.

Kontrol Nesnesinin derlenmesi ve dağıtılması

Kontrol nesnesini kullanıma hazır hale getirmeden önce bir kaç ekleme daha yapmak gerekmektedir.

  1. Önce kontrol nesnesinin Araç kutusunda görünecek olan bitmap resmini belirleyelim. Bunun için yButon nesnesinin ToolBox Birmap özelliğini kullanarak bir resim seçmek yeterlidir. Burada;

  2.  

     

    devstudio\vb\graphics\bitmap\assorted\DIAMONDS.BMP resmini seçin.

  3. File menüsünden Make YeniButon.ocx seçeneğini seçin. YButon nesnesi derlenecek ve bir .OCX dosyası oluşacaktır. Bu kontrol nesnesinin çalışır halidir.
  4. Derleme işlemi bittikten sonra YeniButon projesini kaldırın. Kalan btnTest projesini şimdi deneyin ve kontrol nesnesinin doğru bir şekilde çalıştığını görün.
  5. Standard EXE türünde yeni bir proje yaratın. Components dialog kutusunun en altında Yeni ActiveX Butonu yazısının yanına işaret koyun ve bu dialog kutusunu kapatın.
  6. Araç kutusunda görülen kırmızı, elmas biçimindeki yeni butonu seçin ve form üzerine yerleştirin. Sorunsuz bir şekilde yeni butonun çalıştığı gözlenecektir. Burada yButon kontrol nesnesinin olaylarını da kullanmak mümkündür.
  7. Bunu denemek için aşağıdaki kodu forma ekleyin.

Option Explicit

Private Sub yButon1_TIK()

CurrentY = 3000

Print "yButon1 nesnesi TIKLANDI"

End Sub

Kontrol nesnesi artık tam çalışır ve dağıtılmaya hazır durumdadır. Kontrol nesnesinin dağıtımını yapmak için Application Setup Wizard programı kullanılır. Bu sihirbazı kullanarak kontrolü ve gereksindiği dosyaları bir paket haline getirmek mümkündür.

Bir kontrol nesnesini Lisanslı yapmak için Project menüsünden Properties seçeneğini seçin. Çıkan dialog kutusundan Require Licence Key seçeneğini seçin.

Lisans özelliği eklenmiş bir kontrol nesnesi için dağıtım paketi hazırlanırken, .VBL diye bir dosya yaratılır. Bu dosya olmadan kontrol nesnesi çalışamaz duruma getirilir.

Veritabanı ile ilişkilendirilebilir kontrol nesneleri yaratma

Bu örnek için daha önce kullandığımız PERSONEL veritabanının MESLEKLER tablosuna bir kaç tane tutanak ekleyin.

Aşağıdaki adımları izleyin.

  1. Yeni bir ActiveX kontrol projesi yaratın. UserControl formu üzerine bir ComboBox yerleştirin aşağıdaki isimlendirmeyi kullanın.

  2.  

     

    Project1    dbComboProj

    UserControl dbCombo

    ComboBox    cmbDeger

  3. Control Interface Wizard sihirbazını başlatın. 1. Aşamada, Selected Names listesine Change, ListCount, ListIndex, Style ve Text adlarını sol taraftan aktarın.
  4. 2. Aşamada yeni yaratılacak özelliklerin ve metotların tanımlaması yapılmalıdır. Bunlar aşağıda belirtilmiştir.

  5.  

     

    Property objVT

    Property strAlan

    Property strTablo

    Method Yukle

  6. 3. Aşamada seçilen kontrol nesnesi elemanlarının ilişkilendirilmesi yapılır. Listedeki isimlerden, BackStyle, BorderStyle, MouseDown, MouseMove, MouseUp isimlerini UserControl nesnesinin ilgili isimleri ile, yeni tanımlanmış olanların dışındaki tüm isimleri cmbDeger nesnesinin ilgili isimleri ile ilişkilendirin. Daha sonra Next butonuna basın.
  7. 4. Aşamada yeni eklenen nesne elemanlarının özellikleri belirtilir. Bu özellikleri aşağıdaki gibi belirtin.

  8.  
    Eleman  Veri Türü  Çalışma zamanı  Tasarım zamanı
    objVT  Object  Write Only  Not Available
    strAlan  String  Read/Write  Read/Write
    strTablo  String         Read/Write          Read/Write
  9. Finish butonuna basın ve Control Interface Wizard sihirbazını kapatın. Yaratılmış koda aşağıdaki olay yordamını ekleyin.
  10. Private Sub UserControl_Resize()

    Height = cmbDeger.Height

    cmbDeger.Top = 0

    cmbDeger.Left = 0

    cmbDeger.Width = ScaleWidth

    End Sub

  11. Kontrol nesnesini test etmek için TestProj adında ve içinde frmTestProj adlı bir formu olan bir proje ekleyin.
  12. Projeyi test edin. Yeniden boyutlandırarak Resize olayının çalıştığını görün.
  13. Kontrol nesnesinin Text özelliğini Data Bound yani veri ile ilişkili bir özellik haline getirelim. Bunun için, UserControl tasarım penceresini açın.
  14. Tools menüsünden Procedure Attributes seçeneğini seçin. Çıkan dialog kutusundan Advanced butonuna basın. Çıkan dialog kutusunda Data Binding kısmındaki tüm seçenekleri işaretleyin.
  15. Property Let Text özellik yordamını aşağıdaki gibi değiştirin.
  16. Public Property Let Text(ByVal New_Text As String)

    If CanPropertyChange("Text") Then

    cmbDeger.Text() = New_Text

    PropertyChanged "Text"

    End If

    End Property

  17. PropertyChanged "Text" kodunu cmbDeger_Change ve cmbDeger_Click olaylarına ekleyin.
  18. Property Set objVT özellik yordamını aşağıdaki kodu yazın.
  19. Public Property Set objVT(ByVal New_objVT As Object)

    Set m_objVT = New_objVT

    PropertyChanged "objVT"

    If "" <> strAlan And "" <> strTablo Then Call Yukle

    End Property

    Bu kod eğer tablo ve alan adı belirtilmemişse yükleme işlemini yapmayı engeller.

  20. Yukleme işlemi için Yukle metodunu aşağıdaki gibi değiştirin.

  21.  

     

    Public Sub Yukle()

    Dim strSql As String

    Dim rs As Recordset

    cmbDeger.Clear

    strSql = "SELECT " & strAlan & " FROM " & strTablo & _

    " ORDER BY " & strAlan

    Set rs = objVT.OpenRecordset(strSql, _

    vbRSTypeSnapShot, dbForwardOnly)

    Do While Not rs.EOF

    cmbDeger.AddItem "" & rs(strAlan)

    rs.MoveNext

    Loop

    rs.Close

    End Sub

    Burada yazılan kod verilen alandaki tüm değerleri Combo Box içine ekler.

  22. Şimdi TestProj projesindeki frmTestProj formuna bir Data Control nesnesi ekleyin.
  23. Properties penceresinden form üzerindeki dbCombo1 nesnesinin strAlan özelliğine “MADI”, strTablo özelliğine “MESLEKLER” değerlerini atayın ve form içine aşağıdaki kodu ekleyin.

Private Sub Form_Load()

Data1.DatabaseName = App.Path & "\personel.mdb"

Data1.Refresh

Set dbCombo1.objVT = Data1.Database

End Sub

Bu kodda yapılan dbCombo1 nesnesinin objVT özelliğine Data1 nesnesinin Database özelliğini aktarmaktır. Bu yapıldığında dbCombo1 nesnesinin Property Set objVT özellik yordamı çalışacak ve tablodaki meslek isimleri Combo Box içine yerleştirilecektir.

Programın çalışması aşağıdaki gibi olacaktır.
 
 


Control nesnesinin tam kodu aşağıdaki gibidir.

Option Explicit

'Default Property Values:

Const m_def_strAlan = ""

Const m_def_strTablo = ""

'Property Variables:

Dim m_objVT As Object

Dim m_strAlan As String

Dim m_strTablo As String

'Event Declarations:

Event Click() 'MappingInfo=cmbDeger,cmbDeger,-1,Click

Event DblClick() 'MappingInfo=cmbDeger,cmbDeger,-1,DblClick

Event KeyDown(KeyCode As Integer, Shift As Integer) 'MappingInfo=cmbDeger,cmbDeger,-1,KeyDown

Event KeyPress(KeyAscii As Integer) 'MappingInfo=cmbDeger,cmbDeger,-1,KeyPress

Event KeyUp(KeyCode As Integer, Shift As Integer) 'MappingInfo=cmbDeger,cmbDeger,-1,KeyUp

Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=UserControl,UserControl,-1,MouseDown

Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=UserControl,UserControl,-1,MouseMove

Event MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MappingInfo=UserControl,UserControl,-1,MouseUp

Event Change() 'MappingInfo=cmbDeger,cmbDeger,-1,Change
 
 

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=cmbDeger,cmbDeger,-1,BackColor

Public Property Get BackColor() As OLE_COLOR

BackColor = cmbDeger.BackColor

End Property
 
 

Public Property Let BackColor(ByVal New_BackColor As OLE_COLOR)

cmbDeger.BackColor() = New_BackColor

PropertyChanged "BackColor"

End Property

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=cmbDeger,cmbDeger,-1,ForeColor

Public Property Get ForeColor() As OLE_COLOR

ForeColor = cmbDeger.ForeColor

End Property
 
 

Public Property Let ForeColor(ByVal New_ForeColor As OLE_COLOR)

cmbDeger.ForeColor() = New_ForeColor

PropertyChanged "ForeColor"

End Property
 
 

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=cmbDeger,cmbDeger,-1,Enabled

Public Property Get Enabled() As Boolean

Enabled = cmbDeger.Enabled

End Property
 
 

Public Property Let Enabled(ByVal New_Enabled As Boolean)

cmbDeger.Enabled() = New_Enabled

PropertyChanged "Enabled"

End Property
 
 

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=cmbDeger,cmbDeger,-1,Font

Public Property Get Font() As Font

Set Font = cmbDeger.Font

End Property
 
 

Public Property Set Font(ByVal New_Font As Font)

Set cmbDeger.Font = New_Font

PropertyChanged "Font"

End Property
 
 

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=UserControl,UserControl,-1,BackStyle

Public Property Get BackStyle() As Integer

BackStyle = UserControl.BackStyle

End Property
 
 

Public Property Let BackStyle(ByVal New_BackStyle As Integer)

UserControl.BackStyle() = New_BackStyle

PropertyChanged "BackStyle"

End Property
 
 

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=UserControl,UserControl,-1,BorderStyle

Public Property Get BorderStyle() As Integer

BorderStyle = UserControl.BorderStyle

End Property
 
 

Public Property Let BorderStyle(ByVal New_BorderStyle As Integer)

UserControl.BorderStyle() = New_BorderStyle

PropertyChanged "BorderStyle"

End Property
 
 

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=cmbDeger,cmbDeger,-1,Refresh

Public Sub Refresh()

cmbDeger.Refresh

End Sub
 
 

Private Sub cmbDeger_Click()

RaiseEvent Click

PropertyChanged "Text"

End Sub
 
 

Private Sub cmbDeger_DblClick()

RaiseEvent DblClick

End Sub
 
 

Private Sub cmbDeger_KeyDown(KeyCode As Integer, Shift As Integer)

RaiseEvent KeyDown(KeyCode, Shift)

End Sub
 
 

Private Sub cmbDeger_KeyPress(KeyAscii As Integer)

RaiseEvent KeyPress(KeyAscii)

End Sub
 
 

Private Sub cmbDeger_KeyUp(KeyCode As Integer, Shift As Integer)

RaiseEvent KeyUp(KeyCode, Shift)

End Sub
 
 

Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

RaiseEvent MouseDown(Button, Shift, X, Y)

End Sub
 
 

Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

RaiseEvent MouseMove(Button, Shift, X, Y)

End Sub
 
 

Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

RaiseEvent MouseUp(Button, Shift, X, Y)

End Sub
 
 

Private Sub cmbDeger_Change()

PropertyChanged "Text"

End Sub
 
 

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=cmbDeger,cmbDeger,-1,ListCount

Public Property Get ListCount() As Integer

ListCount = cmbDeger.ListCount

End Property
 
 

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=cmbDeger,cmbDeger,-1,ListIndex

Public Property Get ListIndex() As Integer

ListIndex = cmbDeger.ListIndex

End Property
 
 

Public Property Let ListIndex(ByVal New_ListIndex As Integer)

cmbDeger.ListIndex() = New_ListIndex

PropertyChanged "ListIndex"

End Property
 
 

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=cmbDeger,cmbDeger,-1,Style

Public Property Get Style() As Integer

Style = cmbDeger.Style

End Property
 
 

'DİKKAT! AŞAĞIDAKİ SATIRLARI DEĞİŞTİRMEYİN VEYA SİLMEYİN …

'MappingInfo=cmbDeger,cmbDeger,-1,Text

Public Property Get Text() As String

Text = cmbDeger.Text

End Property
 
 

Public Property Let Text(ByVal New_Text As String)

If CanPropertyChange("Text") Then

cmbDeger.Text() = New_Text

PropertyChanged "Text"

End If

End Property
 
 

Public Property Get objVT() As Object

Set objVT = m_objVT

End Property
 
 

Public Property Set objVT(ByVal New_objVT As Object)

Set m_objVT = New_objVT

PropertyChanged "objVT"

If "" <> strAlan And "" <> strTablo Then Call Yukle

End Property
 
 

Public Property Get strAlan() As String

strAlan = m_strAlan

End Property
 
 

Public Property Let strAlan(ByVal New_strAlan As String)

m_strAlan = New_strAlan

PropertyChanged "strAlan"

End Property
 
 

Public Property Get strTablo() As String

strTablo = m_strTablo

End Property
 
 

Public Property Let strTablo(ByVal New_strTablo As String)

m_strTablo = New_strTablo

PropertyChanged "strTablo"

End Property
 
 

Public Sub Yukle()

Dim strSql As String

Dim rs As Recordset

cmbDeger.Clear

strSql = "SELECT " & strAlan & " FROM " & strTablo & _

" ORDER BY " & strAlan

Set rs = objVT.OpenRecordset(strSql, _

vbRSTypeSnapShot, dbForwardOnly)

Do While Not rs.EOF

cmbDeger.AddItem "" & rs(strAlan)

rs.MoveNext

Loop

rs.Close

End Sub
 
 

'Initialize Properties for User Control

Private Sub UserControl_InitProperties()

m_strAlan = m_def_strAlan

m_strTablo = m_def_strTablo

End Sub
 
 

'Load property values from storage

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

cmbDeger.BackColor = PropBag.ReadProperty("BackColor", &H80000005)

cmbDeger.ForeColor = PropBag.ReadProperty("ForeColor", &H80000008)

cmbDeger.Enabled = PropBag.ReadProperty("Enabled", True)

Set Font = PropBag.ReadProperty("Font", Ambient.Font)

UserControl.BackStyle = PropBag.ReadProperty("BackStyle", 1)

UserControl.BorderStyle = PropBag.ReadProperty("BorderStyle", 0)

cmbDeger.ListIndex = PropBag.ReadProperty("ListIndex", -1)

cmbDeger.Text = PropBag.ReadProperty("Text", "Combo1")

Set m_objVT = PropBag.ReadProperty("objVT", Nothing)

m_strAlan = PropBag.ReadProperty("strAlan", m_def_strAlan)

m_strTablo = PropBag.ReadProperty("strTablo", m_def_strTablo)

End Sub
 
 

Private Sub UserControl_Resize()

Height = cmbDeger.Height

cmbDeger.Top = 0

cmbDeger.Left = 0

cmbDeger.Width = ScaleWidth

End Sub
 
 

'Write property values to storage

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)

Call PropBag.WriteProperty("BackColor", cmbDeger.BackColor, &H80000005)

Call PropBag.WriteProperty("ForeColor", cmbDeger.ForeColor, &H80000008)

Call PropBag.WriteProperty("Enabled", cmbDeger.Enabled, True)

Call PropBag.WriteProperty("Font", Font, Ambient.Font)

Call PropBag.WriteProperty("BackStyle", UserControl.BackStyle, 1)

Call PropBag.WriteProperty("BorderStyle", UserControl.BorderStyle, 0)

Call PropBag.WriteProperty("ListIndex", cmbDeger.ListIndex, -1)

Call PropBag.WriteProperty("Text", cmbDeger.Text, "Combo1")

Call PropBag.WriteProperty("objVT", m_objVT, Nothing)

Call PropBag.WriteProperty("strAlan", m_strAlan, m_def_strAlan)

Call PropBag.WriteProperty("strTablo", m_strTablo, m_def_strTablo)

End Sub

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

Ana Sayfa