Önceki bölümde kaldığımız yerden devam ediyoruz.
superText ActiveX
kontrolüne yeni özellikler ekleyeceğiz.
- Önceki bölümdeki proje dosyasını açın. Eğer proje dosyaları yoksa önceki bölümdeki dosyayı indirebilirsiniz.
-
Önceki bölümde, projede test için kullandığımız Form1'i
burada kullanmayacağız. Form1'i projeden kaldırmak için CTRL+R
ile Project penceresini açıp Form1(Form1.frm) üzerinde sağ
tıklayıp Remove Form1.frm tıklayın. - File / Add Project... ile ActiveX kontrolü test edeceğimiz yeni Standart EXE projesi ekleyin. (Project2)
- Project2'yi başlangıç projesi yapmak için Project penceresinde Project2 üzerinde sağ tıklayıp Set As Startup tıklayın.
-
Toolbox'daki superText kontrolün pasif olduğunu göreceksiniz.
superText kontrolünü Form1'e eklemek için tıkladığınızda bir uyarı
gelecek
This control is private to its project. To be public, a control must be
Önceki projede superText bulunduğu proje içinde sorunsuz kullanılabiliyordu ancak şimdi bulunduğu projeden farklı bir projede kullanmaya çalıştığımızda hata verdi.
in an ActiveX Control project, and its Public property must be True.
Çünkü superText'in kapsamı projeye özeldir(Private), bulunduğu proje dışı kullanma izni yok. Bunun değiştirilip genel erişime(Public) izin verilmesi gerekir. Şimdi bu sorunu giderelim. -
Önce Project1'in proje türünü ve adını değiştirelim.
Project1 üzerinde sağ tıklayıp Project1 Properties... tıklayın. -
Açılan pencerede aşağıdaki ayarları yapın.
Project type: ActiveX Control
Startup Object: (None)
Project Name: SuperTextKontrol
OK tıklayın. Bir uyarı gelecek Tamam tıklayın.
-
Project penceresinde Project1 üzerinde sağ tıkla /
Project1
Properties...
Project Name: Test
Renk özellikleri ekleme
superText'i TextBox ile karşılaştırdığımızda çok sayıda özelliğin superText'de olmadığı görülmektedir. Son kullanıcı bu eksik özelliklerin olmasını arzulamayacaktır.
Şimdi eksik olan yazı rengi(Forecolor) ve zemin rengi(BackColor) özelliklerini ekleyelim.
Dikkat ederseniz herhangi bir kontrolün renk özelliği varsa onu değiştirmeye çalıştığınızda bir renk seçme yardımcısı açılır. superText'e ekleyeceğimiz renk özelliğinin de böyle olması çok iyi olur.
- Aşağıdaki kodları superText kod penceresine ekleyin.
Public Property Get BackColor() As OLE_COLOR
BackColor = Text1.BackColor
End Property
Public Property Let BackColor(ByVal New_BackColor As OLE_COLOR)
Text1.BackColor() = New_BackColor
PropertyChanged "BackColor"
End Property
Public Property Get ForeColor() As OLE_COLOR
ForeColor = Text1.ForeColor
End Property
Public Property Let ForeColor(ByVal New_ForeColor As OLE_COLOR)
Text1.ForeColor() = New_ForeColor
PropertyChanged "ForeColor"
End Property
OLE_COLOR veri türü, renk değerini veren özellikler için kullanılır.
Bir özellik OLE_COLOR olarak tanımlandığında, özellikler penceresi,
rengin sayısal karşılığını hatırlamak zorunda kalmadan kullanıcının
özelliğin rengini görsel olarak seçmesini sağlayan bir renk seçici iletişim
kutusu görüntüler.
Özellik değeri değişiminin kalıcı olması için
UserControl_ReadProperties ve
UserControl_WriteProperties prosedürlerini aşağıdaki kodlar ile
değiştirin.
Public Sub UserControl_ReadProperties(PropBag As PropertyBag) Text1.Text = PropBag.ReadProperty("Metin", UserControl.Name) mGiris = PropBag.ReadProperty("Giris", 0) Text1.BackColor = PropBag.ReadProperty("BackColor", vbWindowBackground) Text1.ForeColor = PropBag.ReadProperty("ForeColor", vbWindowText) End Sub Public Sub UserControl_WriteProperties(PropBag As PropertyBag) Call PropBag.WriteProperty("Metin", Text1.Text, UserControl.Name) Call PropBag.WriteProperty("Giris", mGiris, 0) Call PropBag.WriteProperty("BackColor", Text1.BackColor, vbWindowBackground) Call PropBag.WriteProperty("ForeColor", Text1.ForeColor, vbWindowText) End Sub
Şimdi kontrolün zemin ve yazı rengini değiştirmeyi deneyebilirsiniz.
Odak Zemin Rengi özelliği ekleme
Renk konusu açılmışken yeni bir renkle ilgili bir özellik daha ekleyelim.Şu ana kadarki kodlama ile superText kontrolü odaklandığında zemin rengi değişiyordu. Fakat bu zemin renginin ne olacağını superText tasarım kodlarında belirlemiştik.
Rengi değiştirmek için kodlarda değişiklik yapmamız gerekiyor. Kodlar
derlendiğinde kodlara müdahale etme imkanı da olmayacaktır.
Bu sorunu giderelim.
Öyleyse ne yapalım? Son kullanıcı superText kontrolünün
özelliklerinde odak zemin rengini belirleyebilsin. superText'e
OdakZeminRengi özelliği ekleyelim. Böylece daha esnek bir kontrol
oluşturacağız.
- superText kod penceresinde Declarations'a aşağıdaki kodları ekleyin.
Dim ozr As OLE_COLOR 'odak zemin rengi Dim gZeminRengi As OLE_COLOR 'geçici zemin rengi
- Aşağıdaki kodları superText kod penceresine ekleyin.
Public Property Get OdakZeminRengi() As OLE_COLOR OdakZeminRengi = ozr End Property Public Property Let OdakZeminRengi(ByVal c As OLE_COLOR) ozr = c PropertyChanged "OdakZeminRengi" End Property
- UserControl_ReadProperties ve UserControl_WriteProperties prosedürlerini aşağıdaki kodlar ile değiştirin.
Public Sub UserControl_ReadProperties(PropBag As PropertyBag) Text1.Text = PropBag.ReadProperty("Metin", UserControl.Name) mGiris = PropBag.ReadProperty("Giris", 0) Text1.BackColor = PropBag.ReadProperty("BackColor", vbWindowBackground) Text1.ForeColor = PropBag.ReadProperty("ForeColor", vbWindowText) ozr = PropBag.ReadProperty("OdakZeminRengi", vbWindowBackground) End Sub Public Sub UserControl_WriteProperties(PropBag As PropertyBag) Call PropBag.WriteProperty("Metin", Text1.Text, UserControl.Name) Call PropBag.WriteProperty("Giris", mGiris, 0) Call PropBag.WriteProperty("BackColor", Text1.BackColor, vbWindowBackground) Call PropBag.WriteProperty("ForeColor", Text1.ForeColor, vbWindowText) Call PropBag.WriteProperty("OdakZeminRengi", ozr, vbWindowBackground) End Sub
- Text1_GotFocus ve Text1_LostFocus prosedürlerini aşağıdaki kod ile değiştirin.
Private Sub Text1_GotFocus() gZeminRengi = Text1.BackColor Text1.BackColor = ozr 'odak zemin rengi End Sub Private Sub Text1_LostFocus() Text1.BackColor = gZeminRengi 'geçici zemin rengi End Sub
- Şimdi Test projesinde superText kontrolünün BackColor, ForeColor ve OdakZeminRengi özelliklerini değiştirmeyi deneyin.
- Test formuna birkaç tane superText kontrolü ekleyin ve çalıştırın.
Bu sorunu giderelim.
- UserControl_InitProperties prosedürünü aşağıdaki kod ile değiştirin.
Private Sub UserControl_InitProperties() Text1.Text = Extender.Name ozr = vbWindowBackground 'odak zemin rengine varsayılan değeri ata End Sub
Ödev 1:
Bu aşamaya kadar sorunsuz geldiyseniz size ödev: superText kontrolüne OdakYaziRengi özelliği ekleyin.
Odak kontrole geldiğinde kontrolün yazı rengi OdakYaziRengi'nde
belirlenen renk olsun.
Odak terk edildiğinde yazı rengi asıl rengine dönsün.
Odak terk edildiğinde yazı rengi asıl rengine dönsün.
Ödevi OdakZeminRengi özelliği eklerken uyguladığımız işlemlerin benzeri ile kolaylıkla yapabileceğinizi düşünüyorum.
Özellik açıklaması ekleme
Properties penceresinde kontrole eklediğimiz özellikler haricinde bir
özelliği tıkladığımızda pencerenin alt bölmesinde özellik adı ve bir
cümlelik özellik açıklamasını göreceksiniz.
Bizim eklediğimiz özelliklerde ise alt bölmede özellik adı yazıyor ancak
açıklama yok.
Eğer özelliklerin açıklamasını eklersek son kullanıcı özellik hakkında kısa
bir bilgi edinebilir.
Şimdi bu işlemi yapalım.
- superText kod penceresi açıkken menüden Procedure Attributes (prosedür öznitelikleri) tıklayın.
-
Açılan pencerede Name yanındaki listeden eklenen özellik adını
seçin,
Description kısmına özellik açıklama metnini girin. - Apply tıklayın.
-
sonraki özelliği seçip açıklama girin. Her bir özellik değişiminde
Apply (uygula) tıklayın.
- İşlem bitince OK tıklayın.
Örnek:
Giris: Klavye giriş tuşları kısıtlaması
Metin: Kontrolün içerdiği metin
OdakZeminRengi: Odak, kontrolde iken zemin rengi
- Test projesindeki superText özelliklerini kontrol edin. Eklediğimiz özellikleri açıklaması var mı?
About (Hakkında) özelliği ekleme
Standart kontrollerde yok ama sonradan eklenen ActiveX kontrol özelliklerine
bakıldığında ilk özellik (About) olduğunu fark edeceksiniz. Bu
özellik yanındaki ... tıklandığında yada özellik adı çift
tıklandığında özellik hakkında bilgi içeren bir pencere gelir.
About özelliği superText kontrolünde de olsa iyi olur. Haydi
bu özelliği ekleyelim.
- superText kod penceresine aşağıdaki kodları ekleyin.
Sub Hakkinda() MsgBox "superText ActiveX Kontrol" & vbCrLf & "©2020 Mesut Akcan" & vbCrLf & _ "Bu kontrol TextBox kontrolüne yeni kullanışlı özellikler eklenerek geliştirilmiştir." End SubÜstteki kodları eklemek yeterli değil.
Bu prosedüre AboutBox özniteliği atamamız gerekir.
- superText kod penceresindeyken menüden Procedure Attributes tıklayın.
-
Name listesinden Hakkinda seçin.
Procedure ID listesinden AboutBox seçin
OK tıklayın.
- Test formundaki superText özelliklerinde (About) özelliği eklendiğini kontrol edin. Özelliği çift tıklayın.
Bunu düzeltmenin 2 yolu var. Onları sonraki bölümde açıklayacağım.
Bu bölümün 2. ödevi de bu konuda olsun.
Ödev 2:
Hakkında iletişim kutusu başlığını superText Hakkında olarak
değiştirin.
Ödevlerin cevaplarını aşağıdaki yorum kısmına yazabilirsiniz.
Proje dosyaları:
Vb_ile_ActiveX_Olusturma_6.rar
Önceki Bölüm:
5: superText #2 |
Sonraki Bölüm: 7: superText #4 |
Hiç yorum yok:
Yorum Gönder