17 Kasım 2020 Salı

Vb ile ActiveX Bileşen Oluşturma-4: superText #1

Bu bölümde çok sık kullandığımız bir kontrol olan Textbox'un özelliklerini geliştirerek yeni bir ActiveX kontrol oluşturacağız.

  • Bu sefer farklı bir yol izleyeceğiz. Önceki bölümlerde önce ActiveX kontrol sonra Standart EXE projesi oluşturmuştuk. Bu bölümde ise öncekilerin tersi olacak.
    Önce Standart EXE projesi sonra aynı projeye ActiveX kontrol eklenecek.
  • Menüden File / New Project
  • New Project ekranında Standart EXE'yi çift tıklayın. Yeni bir standart form penceresi açılacak. Burası ActiveX kontrolü test etmek için.
  • Menüden Project / Add User Control tıklayın.
    Alternatif olarak Project penceresinde Sağ tıkla / Add / User Control
  • Açılan pencerede User Control'ü çift tıklayın.
  • F4e basarak form özellikleri penceresini açın. Formun Name özelliğini superText olarak değiştirin.
  • Form üzerine bir Textbox yerleştirin.
  • Text1'in Top ve Left özelliğini 0 yapın.
  • Şimdi Text1'in boyutlarını kontrolün boyutlarına eşitleyecek kodu ekleyeceğiz.
    Böylece Form üzerine kontrolümüz(superText) eklendiğinde veya boyutu değiştiğinde Text kutusu eklenen kontrol boyutlarında olacak.
  • Aşağıdaki kodları kopyalayıp (General) / (Declarations)'a ekleyin
Private Sub UserControl_Resize()
With Text1
    'Text1'in boyutunu eklenen kontrol'a eşitle
    .Height = UserControl.ScaleHeight
    .Width = UserControl.ScaleWidth
End With
End Sub
Metin kutusu odaklandığında(focus) renk metin kutusu zemin ve yazı rengi değişse odak değiştiğinde asıl renklere dönse nasıl olur? Daha kullanışlı bir metin kutusu olmaz mı? Böylece klavye girişinin hangi metin kutusuna yapılacağını fark etmek daha kolay olacaktır.
  • Şimdi bu işi yapan kodları ekleyelim. Aşağıdaki kodları kopyalayıp Declarations'a ekleyin
Private Sub Text1_GotFocus()
    Text1.BackColor = vbRed 'kırmızı
    Text1.ForeColor = vbWhite 'beyaz
End Sub
Private Sub Text1_LostFocus()
    Text1.BackColor = vbWindowBackground '&H80000005 'Zemin rengi
    Text1.ForeColor = vbWindowText '&H80000008 'Metin rengi
End Sub
    Buraya kadar güzel.
    Ancak kontrolü test ettiğinizde fark ettiyseniz kontrolümüzün en önemli özelliği yok. Nedir o? Text özelliği.
    Tasarım formundaki Text1 kontrolünde Text özelliği var ancak ActiveX kontrolümüzün Text özelliği yok.
    superText'e kodlar ile ya da Properties'den metin ekleyecek olsak böyle bir imkân yok. Büyük eksiklik.
    • Şimdi bu eksikliği giderelim.

    ActiveX kontrole özellik ekleme

    Kontrole Metin özelliği eklemek için kod penceresinde General / Declarations'a
    Public Metin as String
    eklemek yeterlidir. Ancak bu yöntemle eklenen özelliği kontrol etmek ve yönetmek zordur.
    Öyleyse olması gerekeni yapalım.
    • superText formunun kod penceresindeyken menüden Tools / Add Procedure'ı tıklayın.
    • Açılan pencerede aşağıdaki ayarları yapın.
      Name: Metin
      Burada standartların dışına çıkıp Text yerine farklı olarak Metin girelim. Bu eklenecek özelliğin adıdır. İsterseniz Text'de olabilir. 
      Type: Property
      Bu, eklenecek prosedürün türüdür. Özellik ekleyeceğimiz için Property seçiyoruz.
      Scope: Public
      Bu, prosedürün kapsamıdır.
      Public: Genel erişim.
      Private özel erişim(diğer prosedürlerden erişilemez)
    • OK tıklandığında aşağıdaki kodların kod penceresine eklendiğini göreceksiniz. Bu kodları el ile de girebiliriz ancak üstteki yöntem bizi kod yazma zahmetinden kurtardı.
    Public Property Get Metin() As Variant
    
    End Property
    
    Public Property Let Metin(ByVal vNewValue As Variant)
    
    End Property
    Kodları açıklayalım
    • Get:
      ActiveX kontrolün özellik değeri alındığında çalışır. Örneğin;
      Yazi = superText1.Metin
      gibi. superText1'in Metin özelliğinin değeri Yazi değişkenine aktarılır.
    • Let:
      ActiveX kontrolün özellik değeri değiştirildiğinde çalışır. Örneğin;  
      superText1.Metin = "Mesut Akcan"
      gibi bir kod ile kontrolün Metin özelliğine değer atanır.
    • ActiveX kontrolü denediğimizde göreceğiz ki kontrolümüzün Metin özelliği eklenmiş.
    • Ama. Fark edeceksiniz ki Metin özelliğini Properties penceresinden değiştirdiğimiz halde kontrolümüzde değişiklik yok.
      Tabii ki olmaz. Bununla ilgili bir kodlama yapmadık ki.
    • Get ve Let prosedürlerini aşağıdaki kodlarla değiştirin ya da düzenleyin.
    Public Property Get Metin() As String
        Metin = Text1.Text
    End Property
    
    Public Property Let Metin(ByVal yeniDeger As String)
        Text1.Text = yeniDeger
    End Property

    • Artık Properties'den Metin değerinde yaptığımız değişiklik kontrolümüze aksediyor, superText'in metni değişiyor.
    Bir şey dikkatinizi çekmiştir. Yeni kontrolümüzü forma eklediğimizde, Metin özelliği Text1 olarak görünüyor. Kontrolümüzün adı olan superText yazsa nasıl olur?
    • Bunun için Declarations'a aşağıdaki kodları ekleyin.
    Private Sub UserControl_InitProperties()
    	Text1.Text = UserControl.Name
    	' ya da
    	' Text1.Text= "superText"
    End Sub
    • Evet, oldu. Şimdi denemek için test formunuza bir kaç tane superText kontrolü ekleyin.
    • Metin özelliklerine farklı değerler atayın.
    • F5 ile projeyi çalıştırın.
    Yine bir sorun var değil mi?
    Yok diyorsanız sorunu fark etmeye çalışın.
    Çözümü ise sonraki bölümde.

    Proje dosyaları: Vb_ile_ActiveX_Olusturma_4.rar


    Önceki Bölüm: 3: Çerçeve(Frame)
    Sonraki Bölüm: 5: superText #2

    Hiç yorum yok:

    Yorum Gönder