İndir
Transkript
İndir
BÖLÜM 4 4.VISUAL BASIC İLE PROGRAMLAMAYA GİRİŞ 4-1 VISUAL BASIC İLE YAZILIM GELİŞTİRME Visual Basic ilk açıldığında görülen New Project penceresi Visual Basic ile neler yapılabileceğinin bir özeti gibidir. Standart EXE: Normal bir uygulama yazılımı geliştirmek için kullanılır. Buna örnek olarak, bir kütüphane otomasyonu sistemi, adres etiket programı gibi yazılımlar verilebilir. ActiveX EXE: Başka programların kendi verilerine erişebilmesine olanak tanıyan programlar geliştirmek için kullanılır. Bu programlar işlem dışı sunucular olarak da adlandırılırlar, çünkü bu programların kendi işlem kesimleri vardır. Activex EXE programlar kendi işlevlerinden yararlanan programlardan ayrı bir program olarak çalışırlar. ActiveX DLL: Başka programlar tarafından kullanılabilen fonksiyon ve yordam kümelerini içeren kütüphanelerdir. DLL dosyaları işlem içi sunucular olarak da adlandırılırlar. ActiveX DLL dosyalar kendi işlevlerinden yararlanan programlarla aynı bellek alanında işlem görürler. ActiveX EXE programlardaki gibi ayrı bir program olarak çalıştırılmazlar. ActiveX Control: Bir programa eklemek için kullanıcının ihtiyaç duyduğu kontrol nesnelerini kendisinin tasarlayıp gerçekleştirmesi için kullanılır. Visual Basic programlama sisteminde iki tür kontrol nesnesi bulunur. Bunlar içsel kontrol nesneleri ve ActiveX kontrol nesneleridir. İçsel kontrol nesneleri Visual Basic açıldığında araç kutusunda görülen nesnelerdir. ActiveX control nesneleri araç kutusuna eklenebilen kullanıcıya özel kontrol nesneleridir. ActiveX Document DLL: Web sayfalarında kullanılmak üzere doküman hazırlamak için kullanılır. Bu dokümanlar bir web browser kullanılarak gösterildiğinde içerdiği işlevlerin yer aldığı bir kütüphaneye ihtiyaç duyarlar. İhtiyaç duyulan bu işlevler ActiveX Document DLL kütüphanelerinde bulunur. Bu kütüphanelerdeki işlevler işlevi kullanan dokümanla aynı bellek alanında çalıştığı için bunlar işlem içi bileşenlerdir. 48 BİLGİSAYAR KULLANMA-II Kaya ActiveX Document EXE: ActiveX Document DLL ile aynıdır. Farklı olan kesim, içerdiği işlevlerin işlem dışı olarak çalışmasıdır. İşlem içi bileşenler daha hızlı çalışma özelliğine sahiptir. ADD IN: Visual Basic ortamına bazı işlemlerin otomatikleştirilmesi için eklenebilen bir bileşen yaratmak için kullanılır. VB Application Wizard: Programın bir kısmını otomatik olarak üretmek için kullanılan bir bileşendir. Bir çok seçeneği sayesinde programın kullanıcı arabiriminin çoğunu otomatik olarak üretir. Visual Basic ile yapılabilecekler kısaca yukarıda belirtildiği gibidir. Bir uygulama geliştirirken önce geliştirilecek olan uygulamanın bunlardan hangisi ile yapılabileceğine bakmak gerekir. Uygulama yazılımları genellikle Standart EXE türündedir. Şimdi Visual Basic ile Uygulama Yazılımı geliştirmeyi, kullanıcı arayüzü tasarımını, kod yazmayı, girilen verilerin doğruluğunu kontrol etmeyi ve hataları ele almayı tekrar gözden geçirmek için bir örnek tanımlayalım. Örnek: Wordpad programına benzeyen fakat çoklu doküman arayüzüne sahip bir metin yazma programı gerçekleştirelim. 4-1-1 KULLANICI ARAYÜZÜ GERÇEKLEŞTİRİMİ Yeni bir proje yaratın ve Project menüsünden bir MDI form ekleyin. MDI form kullanmak bize birden fazla dosyayı aynı anda açabilmeyi sağlayacak. MDI formu programın temel penceresi, diğer formlar da açılan dosyaların gösterildiği pencereler olacaktır. Burada dosyaların gösterildiği formlardan sadece biri yaratılacak, diğerleri kodun içinden gerektikçe yaratılacaktır. Formların isimlerini ve Caption özelliklerini şu şekilde değiştirin: 49 BİLGİSAYAR KULLANMA-II Kaya Bileşen Özellik Değer MDIForm Name frmANA Caption MetinYaz Name frmDok Caption isimsiz MDIChild True Form1 FrmDok üzerine bir metin kutusu yerleştirin: Bileşen Özellik Değer TextBox Name txtDok Text Multiline True ScrollBars 2-vertical Başlangıç olarak aşağıdaki kodu frmAna formunun kod kesimine ekleyin: Option Explicit Dim frmMetin As New frmDok Private Sub MDIForm_Load() frmMetin.Show End Sub Startup Object: frmAna Project Name: metinyaz Programı çalıştırdığınızda aşağıdaki ekran görüntüsü çıkacaktır. 50 BİLGİSAYAR KULLANMA-II Kaya Şekil 4.1. Metinyaz-ilk çalıştırma Formların icon özelliklerini aşağıdaki gibi düzeltin: frmAna: note03.ico frmDok note07.ico Bir formun icon özelliği formun köşesinde yer alan simgeyi belirler. Çalışma esnasında gerekli olabilecek form sayısı önceden belli olmadığı için yeni dokümanlar için çalışma esnasında form yaratmak gerekir. Bunun için yukarıdaki kodu frmAna formundan silip yerine aşağıdaki kodu ekleyin. Option Explicit Private Sub MDIForm_Load() FormEkle End Sub Private Function FormEkle() As Form Set FormEkle = New frmDok FormEkle.Show vbModeless End Function 51 BİLGİSAYAR KULLANMA-II Kaya Böylece istenilen sayıda form eklemek mümkün hale geldi. Bir form eklemek için FormEkle fonksiyonunu çağırmak yeterlidir. Program çalıştırılıp metin penceresi büyütüldüğünde içindeki metin kutusunun birlikte büyümediği görülür. Metin kutusunun da form ile beraber büyümesini sağlamak için formun Resize olayına aşağıdaki kodu yazmak gerekir. Private Sub Form_Resize() Me.txtDok.Top = 0 Me.txtDok.Left = 0 Me.txtDok.Width = Me.ScaleWidth Me.txtDok.Height = Me.ScaleHeight End Sub Program çalıştığında ekranı ortalaması ve belirli bir büyüklükte çıkması için aşağıdaki kodu MDIForm_Load olay yordamının başına ekleyin. Me.Height = Screen.Height * 0.75 Me.Width = Screen.Width * 0.75 Me.Move (Screen.Height - Me.Height) / 2, _(Screen.Width - Me.Width) / 2 Şimdi program çalıştırıldığında daha güzel bir ekran görünümüne sahip olduğu görülecektir. 4-1-1-1 MENÜ EKLEME, DOSYA MENÜSÜ Programın genel iskeletini oluşturduktan sonra, biraz işlerlik kazandıralım. Bunun için önce bir menü eklemek gerekir. Menüler kullanım kolaylığı açısından program geliştirirken sık başvurulan öğelerdir. Aşağıdaki menüyü frmAna formuna ekleyin. 52 BİLGİSAYAR KULLANMA-II Kaya Eklenecek Menüler: Dosya (mnuDosya) &Yeni (mnuYeni) Ctrl+Y &Aç (mnuAc) Ctrl+A &Kapat (mnuKapat) Gri - (mnuDosyaCiz1) Kayde&t (mnuKaydet) Gri Ye&ni Adla Kaydet (mnuYeniAd) Ctrl+N Gri - (mnuDosyaCiz2) Yazdirma Aya&ri (mnuYAyar) Ya&zdir (mnuYazdir) - (mnuDosyaCiz3) Cikis (mnuDosyaCikis) Düzen (mnuDuzen) &Kes (mnuKes) Ctrl+X Gri K&opyala (mnuKopyala) Ctrl+C Gri &Yapistir (mnuYapistir) Ctrl+V Gri &Sil (mnuSil) Del Gri - (mnuDuzenCiz1) &Tümünü Seç (mnuTumunuSec) Gri Zaman/&Tarih (mnuTarih) F5 Gri Yardim (mnuYardim) MetinYaz Hakkinda (mnuMetinYazH) Dosya menüsü için aşağıdaki kodu frmAna formuna ekleyin. Public Sub MenuGunle() Dim bulundu As Boolean Dim i As Integer For i = 0 To Forms.Count - 1 53 Ctrl+Z Gri BİLGİSAYAR KULLANMA-II Kaya If Forms(i).Name = "frmDok" Then If Forms(i).kapat = False Thenbulundu = True Exit For End If End If Next i mnuKapat.Enabled = bulundu mnuKaydet.Enabled = bulundu mnuYeniAd.Enabled = bulundu mnuYazdir.Enabled = bulundu End Sub Private Sub mnuCikis_Click() Unload Me End Sub Private Sub mnuKapat_Click() Unload frmAna.ActiveForm End Sub Private Sub mnuYeni_Click() Form Ekle End Sub 54 BİLGİSAYAR KULLANMA-II Kaya Burada MenuGunle yordamı menülerin gri yapılmasını veya aktif hale getirilmesini sağlar. Bunun için önce açık döküman olup olmadığını kontrol eder. Eğer dokümanlardan en az bir tane varsa ve kapatılmak üzere değilse açık dokümanların bulunduğunu menü elemanlarını aktif hale getirerek belirler. Menüyü geçerli kılmak ve dokümanların değişip değişmediğini kontrol etmek dolayısıyla kapatma işleminin yapılabileceğine karar vermek için için aşağıdaki kodu frmDok formuna ekleyin. Dim degisti As Boolean Public kapat As Boolean Private Sub Form_Load() frmAna.MenuGunle End Sub Private Sub Form_Unload(Cancel As Integer) If degisti Then Select Case MsgBox(Me.Caption & " 'deki metin degisti" _ & vbCr & vbCr & " degisiklikler kaydedilsin mi", _ vbExclamation Or vbYesNoCancel, frmAna.Caption) Case vbYes 'kaydetme işlemleri Case vbNo 'kapatma işlemine devam et Case vbCancel Cancel = True End Select End If kapat = Not Cancel frmAna.MenuGunle End Sub 55 BİLGİSAYAR KULLANMA-II Kaya Private Sub txtDok_Change() degisti = True End Sub Burada form kapatılırken dokümanın değişip değişmediği kontrol edilir. Eğer değişiklik varsa kapatılmasına izin vermek için onay istenir. Bu işlem bir mesaj kutusu aracılığıyla yapılır. 4-1-1-2 DÜZEN MENÜSÜ, YARDIM MENÜSÜ VE PENCERE MENÜSÜ Düzen menüsündeki öğeleri aktif hale getirmek veya gri yapmak için MenuGunle fonksiyonuna aşağıdaki kod eklenmelidir. mnuTumunuSec.Enabled = bulundu mnuTarih.Enabled = bulundu If bulundu = False Then mnuKopyala.Enabled = False mnuKes.Enabled = False mnuSil.Enabled = False mnuYapistir.Enabled = False Else If frmAna.ActiveForm.txtDok.SelLength > 0 Then mnuKopyala.Enabled = True mnuKes.Enabled = True mnuSil.Enabled = True Else mnuKopyala.Enabled = False 56 BİLGİSAYAR KULLANMA-II Kaya mnuKes.Enabled = False mnuSil.Enabled = False End If If Clipboard.GetFormat(vbCFText) Then mnuYapistir.Enabled = True Else mnuYapistir.Enabled = True End If End If Daha sonra frmDok formunun aşağıdaki olay yordamlarından MenuGunle yordamı çağrılmalıdır. Private Sub Form_Activate() FrmAna.MenuGunle End Sub Private Sub txtDok_KeyUp(KeyCode As Integer, Shift As Integer) FrmAna.MenuGunle End Sub Private Sub txtDok_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) FrmAna.MenuGunle End Sub 57 BİLGİSAYAR KULLANMA-II Kaya FrmDok için menu gunleme işlemi Form_Load olay yordamından kaldırılmalıdır. Menü elemanlarını işler hale getirmek için aşağıdaki kodu frmAna formuna ekleyin Private Sub mnuKes_Click() Clipboard.SetText frmAna.ActiveForm.txtDok.SelText Sil MenuGunle End Sub Private Sub mnuKopyala_Click() Clipboard.SetText frmAna.ActiveForm.txtDok.SelText MenuGunle End Sub Private Sub mnuYapistir_Click() Dim metin As String Dim clipboardMetni As String Dim selStart As Long If Clipboard.GetFormat(vbCFText) Then If frmAna.ActiveForm.txtDok.selLength > 0 Then Sil metin = frmAna.ActiveForm.txtDok.Text selStart = frmAna.ActiveForm.txtDok.selStart clipboardMetni = Clipboard.GetText frmAna.ActiveForm.txtDok.Text = Left(metin, selStart) & _ clipboardMetni & Right(metin, Len(metin) - selStart) frmAna.ActiveForm.txtDok.selStart = selStart 58 BİLGİSAYAR KULLANMA-II Kaya Else MenuGunle End If End Sub Private Sub mnuSil_Click() Sil MenuGunle End Sub Private Sub mnuTumunuSec_Click() frmAna.ActiveForm.txtDok.selStart = 0 frmAna.ActiveForm.txtDok.selLength = _ Len(frmAna.ActiveForm.txtDok.Text) MenuGunle End Sub Private Sub mnuTarih_Click() Dim metin As String Dim selStart As Long If frmAna.ActiveForm.txtDok.selLength > 0 Then Sil metin = frmAna.ActiveForm.txtDok.Text selStart = frmAna.ActiveForm.txtDok.selStart frmAna.ActiveForm.txtDok.Text = Left(metin, selStart) & _ Now & Right(metin, Len(metin) - selStart) frmAna.ActiveForm.txtDok.selStart = selStart 59 BİLGİSAYAR KULLANMA-II Kaya MenuGunle End Sub Yardım menüsündeki MetinYaz Hakkında seçeneği için de aşağıdaki formu yaratın. Bu formu gostermek için ilgili menü seçeneğine aşağıdaki kodu ekleyin. Private Sub mnuMetinYazH_Click() frmMetinYazH.Show vbModal End Sub Şimdi frmAna formuna aşağıda belirtildiği gibi bir pencere menüsü ekleyin. Pencere (mnuPencere) Yer&lestir (mnuYerlestir) &Yatay Yerlestir (mnuYatay) &Dikey Yerlestir (mnuDikey) Dü&zenle (mnuDuzenle) 60 WindowList BİLGİSAYAR KULLANMA-II Kaya Bu menü oğeleri için aşağıdaki kodu frmAna formuna ekleyin. Private Sub mnuYerlestir_Click() frmAna.Arrange vbCascade End Sub Private Sub mnuDikey_Click() frmAna.Arrange vbTileVertical End Sub Private Sub mnuYatay_Click() frmAna.Arrange vbTileHorizontal End Sub Private Sub mnuDuzenle_Click() frmAna.Arrange vbArrangeIcons End Sub 4-2 NESNEYE YÖNELİK YAKLAŞIM Bu noktaya kadar MetinYazma programının kullanıcı arayüzü tamamlanmış bulunmaktadır. Programın etkinliğini artırmak için Nesneye Yönelik bir yaklaşım kullanmak daha doğru olacaktır. Programın şu andaki haline bakılırsa doküman pencerelerini birbirinden ayırmak mümkün değildir. Programı Nesneye Yönelik yaklaşımla yeniden yazacak olursak, önce bir döküman sınıfı yaratmak gerekecektir. Adımları sırayla yazacak olursak: 2.1 Dokümanlar için dokKume adlı bir küme (Collection) yaratın. Bunun için frmAna formunun başına aşağıdaki kodu ekleyin. Public dokKume As New Collection Public kumeIndeksi As Integer 61 BİLGİSAYAR KULLANMA-II Kaya Bu kümeyi yok etmek için ise frmAna formunun MDIForm_Terminate olay yordamına aşağodaki satırı ekleyin. Set dokKume = Nothing 2.2 Programa yeni bir sınıf ekleyip adını clsDok olarak değiştirin. Bu sınıfın kod kesimine aşağıdaki kodu ekleyin Private mtndegisti As Boolean Public kapat As Boolean Public dokIsim As String Public dokForm As frmDok 2.3 clsDok sınıfı için degisti adlı bir Property yaratıp aşağıdaki kodu ekleyin. Public Property Get degisti() As Variant degisti = mtndegisti End Property Public Property Let degisti(ByVal vNewValue As Variant) mtndegisti = vNewValue If mtndegisti Then If Right(dokForm.Caption, 2) <> " *" Then dokForm.Caption = dokIsim & " *" End If Else If Right(dokForm.Caption, 2) = " *" Then dokForm.Caption = dokIsim End If End If End Property 62 BİLGİSAYAR KULLANMA-II Kaya 2.4 FrmDok formundaki degisti ve kapat değişken tanımlarını kaldırın ve yerine aşağıdaki kodu yazın. Public objDok as new clsDok Dim kumeNo As Integer Private Sub Form_Load() frmAna.dokKume.Add objDok, CStr(frmAna.kumeIndeksi) kumeNo = frmAna.kumeIndeksi frmAna.kumeIndeksi = frmAna.kumeIndeksi + 1 Me.Caption = Me.Caption & CStr(frmAna.kumeIndeksi) Set objDok.dokForm = Me objDok.dokIsim = Me.Caption End Sub 2.5 Daha sonra degisti ve kapat değişkenlerine yapılan tüm erişimleri objDok.degisti veya objDok.kapat olarak değiştirin. 2.6 frmDok formunun Form_Unload olay yordamının sonuna aşağıdaki kodu ekleyin: If Cancel = False Then frmAna.dokKume.Remove CStr(kumeNo) Set objDok = Nothing End If 2.7 Doküman içinde bir metni aramak için frmAna formunda Duzen menüsüne aşağıdaki menü seçeneğini ekleyin. DuzenCiz2) &Bul (mnuBul) Ctrl+B Gri 63 BİLGİSAYAR KULLANMA-II Kaya Daha sonra bu seçeneğin aktif veya gri yapılmasını denetlemek için frmAna formundaki MenuGunle yordamının Düzen menüsü için yapılan işlemler kısmına aşağıdaki satırı ekleyin. mnuBul = bulundu Arama işlemi için aşağıdaki elemanları içeren ve görünüşü verilmiş olan formu hazırlayın. Bileşen Özellik Değer Form Name frmBul Borderstyle 3-Fixed Dialog ControlBox False Label Name lblBul TextBox Name txtBul CommandButton Name cmdBul Default True Name cmdIptal Cancel True CommandButton Bu formu göstermek için frmAna formundaki mnuBul_Click olay yordamına aşağıdaki satırı ekleyin. frmBul.Show vbModal Ayrıca frmBul formuna aşağıdaki kodu ekleyin. Private Sub cmdBul_Click() Dim dokObj As clsDok Dim sonuc As Integer For Each dokObj In frmAna.dokKume 64 BİLGİSAYAR KULLANMA-II Kaya sonuc = InStr(dokObj.dokForm.txtDok.Text, txtBul.Text) If sonuc > 0 Then dokObj.dokForm.ZOrder dokObj.dokForm.txtDok.selStart = sonuc - 1 dokObj.dokForm.txtDok.selLength = Len(txtBul.Text) Exit For End If Next dokObj Unload Me End Sub Private Sub cmdIptal_Click() Unload Me End Sub 4-3 MİCROSOFT COMMON DİALOG CONTROL NESNELERİNİN KULLANILMASI, ARAÇ ÇUBUĞU VE GERİ KALAN MENÜ OĞELERİ. Bu kısımda Dosya menüsünde eksik kalmış olan doküman açma ve kaydetme işlemleri, Duzen menüsüne eklenecek olan Font ve Renk seçenekleri ile bir araç çubuğu MetinYaz programına dahil edilecektir. Şimdi yapılacak işlemleri adımlar halinde gerçekleştirelim. 3.1 frmDok doküman formundaki metin kutusunu RICHTEXTBOX ile değiştirin. Bunu yapmaktaki amaç, metin kutusunun getirdiği kısıtlamaları ortadan kaldırmaktır. Eklenen RICHTEXTBOX metin kutusunun aşağıda belirtilen özelliklerini belirtildiği gibi değiştirin. 65 BİLGİSAYAR KULLANMA-II Kaya Name txtDok Apperance 0-Flat BorderStyle 0-No Border 3.2 frmAna formuna bir CommonDialog nesnesi yerleştirin. 3.3 Dosya menüsünün Aç seçeneği için aşağıdaki kodu frmAna formuna ekleyin. Private Sub mnuAc_Click() Dim Cancel As Boolean On Error GoTo hata Cancel = False CommonDialog1.Filter = "Metin dosyalari|*.txt|" & _ "Tum dosyalar|*.*|Rich Text dosyalari|*.rtf" CommonDialog1.CancelError = True CommonDialog1.Flags = cdlOFNHideReadOnly Or _ cdlOFNFileMustExist CommonDialog1.ShowOpen If Not Cancel Then If UCase(Right(CommonDialog1.filename, 3) )= "RTF" Then frmAna.ActiveForm.txtDok.LoadFile _ CommonDialog1.filename, rtfRTF Else frmAna.ActiveForm.txtDok.LoadFile _ 66 BİLGİSAYAR KULLANMA-II Kaya CommonDialog1.filename, rtfText End If frmAna.ActiveForm.txtDok.dokIsim = _ CommonDialog1.filename frmAna.ActiveForm.txtDok.degisti = False End If Exit Sub hata: Select Case Err.Number Case cdlCancel: Cancel = True Case rtfInvalidFileFormat: Cancel = MsgBox("Dosya açma hatasi", vbExclamation _ Or vbOKOnly, "Dosya Açma") Resume Next End Select End Sub Burada önce windows’un dosya açma diyalog kutusu kullanılarak bir dosya adı belirleniyor, belirlenen dosya türüne göre RICHTEXTBOX nesnesinin bir metodu olan LOADFILE kullanılarak dosya içeriği metin kutusuna yazılır. 3.4 Dosya menüsünün Kaydet seçeneği için aşağıdaki kodu ekleyin. Private Sub mnuKaydet_Click() With frmAna.ActiveForm 67 BİLGİSAYAR KULLANMA-II Kaya If .objDok.dokIsim = "isimsiz" Then mnuYeniAd_Click Else If UCase(Right(.objDok.dokIsim, 3)) = "RTF" Then .txtDok.SaveFile .objDok.dokIsim, rtfRTF Else .txtDok.SaveFile .objDok.dokIsim, rtfText End If .objDok.degisti = False End If End With End Sub Burada eğer doküman yeni yazılmış bir doküman ise bir isim verileceğinden Yeni Adla Kaydet menü seçeneği çağrılmaktadır. 3.5 Dosya menüsünün Yeni Adla Kaydet menü seçeneği için aşağıdaki kodu ekleyin. Private Sub mnuYeniAd_Click() Dim Cancel As Boolean On Error GoTo hata Cancel = False CommonDialog1.DefaultExt = ".rtf" CommonDialog1.Filter = "Metin dosyalari|*.txt|" & _ "Tum dosyalar|*.*|Rich Text dosyalari|*.rtf" 68 BİLGİSAYAR KULLANMA-II Kaya CommonDialog1.CancelError = True CommonDialog1.Flags = cdlOFNHideReadOnly Or _ cdlOFNOverwritePrompt CommonDialog1.ShowSave If Not Cancel Then If UCase(Right(CommonDialog1.filename, 3)) = "RTF" Then frmAna.ActiveForm.txtDok.SaveFile _ CommonDialog1.filename, rtfRTF Else frmAna.ActiveForm.txtDok.SaveFile _ CommonDialog1.filename, rtfText End If frmAna.ActiveForm.objDok.dokIsim = _ CommonDialog1.filename frmAna.ActiveForm.objDok.degisti = False End If Exit Sub hata: If Err.Number = cdlCancel Then Cancel = True Resume Next End If End Sub 69 BİLGİSAYAR KULLANMA-II Kaya 3.6 Düzen menüsüne aşağıdaki menü seçeneklerini ekleyin. - (mnuDuzenCiz3) &Font (mnuFont) &Renk (mnuRenk) Daha sonra bu seçeneklerin aktif veya gri yapılmasını denetlemek için frmAna formundaki MenuGunle yordamının Düzen menüsü için yapılan işlemler kısmına aşağıdaki satırları ekleyin. mnuFont = bulundu mnuRenk = bulundu 3.7 Düzen menüsü Font ve Renk seçenekleri için aşağıdaki kodu ekleyin. Private Sub mnuFont_Click() On Error GoTo fonthata CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects CommonDialog1.ShowFont With frmAna.ActiveForm.txtDok .SelFontName = CommonDialog1.FontName .SelFontSize = CommonDialog1.FontSize .SelBold = CommonDialog1.FontBold .SelItalic = CommonDialog1.FontItalic .SelStrikeThru = CommonDialog1.FontStrikethru .SelUnderline = CommonDialog1.FontUnderline .SelColor = CommonDialog1.Color End With 70 BİLGİSAYAR KULLANMA-II Kaya fonthata: End Sub Private Sub mnuRenk_Click() On Error GoTo renkhata CommonDialog1.Flags = cdlCCFullOpen CommonDialog1.ShowColor frmAna.ActiveForm.txtDok.SelColor = CommonDialog1.Color renkhata: End Sub 3.8 frmAna formuna bir araç çubuğu (ToolBar) ve bir ImageList ekleyin. ImageListresim listesine aşağıda görülen resimleri GRAPHICS\BITMAPS\TLBR_95 dizini içinden ekleyin ve sırasıyla araç çubuğuna yerleştirin. Yukarıda belirtilen araç çubuğu düğmelerinin anahtar (Key) değerlerini sırasıyla “Yeni”, “Ac” ve “Kaydet” olarak değiştirin. Kaydet düğmesini aktif hale getirmek veya gri yapmak için aşağıdaki satırı MenuGunle yordamının dosya menüsü ile ilgili kısmına ekleyin. Toolbar1.Buttons(“Kaydet”).Enabled = bulundu Daha sonra aşağıdaki kodu frmAna formuna ekleyin. Private Sub Toolbar1_ButtonClick(ByVal Dugme As Button) Select Case Dugme.Key Case "Yeni": mnuYeni_Click Case "Ac": mnuAc_Click 71 BİLGİSAYAR KULLANMA-II Kaya Case "Kaydet": mnuKaydet_Click End Select End Sub 3.9 frmAna formuna bir Durum Çubuğu (StatusBar) ekleyin. Bu durum çubuğuna aşağıda belirtilen özelliklere sahip 7 tane kesim ekleyin. Index Key Alignment Style Bevel AutoSize 1 Metin 0 - Left 0 - Text 1 - Inset 1 Spring 2 Caps 1 - Center 1 - CAPS 1 - Inset 2 Content 3 NumLock 1 - Center 2 - NUM LOCK 1-Inset 2 Content 4 Ins 1 Center - 3 - INS 1 - Inset 2 - Content 5 Scroll 1 Center - 4 SCROLL 1 - Inset 2 - Content 6 Time 1 Center - 5 - Time 1 - Inset 2 - Content 7 Date 1 – Center 6 - Date 1 - Inset 2 - Content Aşağıdaki kodu frmAna formuna ekleyin. Public Sub SatirNo() Dim sNo As Integer With frmAna.ActiveForm.txtDok If .selStart > 0 Then 72 BİLGİSAYAR KULLANMA-II Kaya sNo = .GetLineFromChar(.selStart) End If frmAna.StatusBar1.Panels("Metin").Text = "SATIR: " _ & CStr(sNo + 1) End With End Sub Daha sonra bu yordamı frmDok formunun aşağıdaki yordamlarından çağırın. Private Sub Form_Activate() frmAna.MenuGunle frmAna.SatirNo End Sub Private Sub txtDok_SelChange() frmAna.SatirNo End Sub Bunlara ek olarak aşağıdaki satırı frmDok formunun Form_Unload yordamının sonundaki If koşul deyiminin içine de satır numarasını temizlemek için aşağıdaki satırı yazın. frmAna.StatusBar1.Panels("Metin").Text = "" 4-3-1 YAZDIRMA AYARLARI VE YAZDIRMA Programın eksik kalan kısmı yazdığımız metnin yazıcıdan çıkarılmasıdır. Şimdi programın bu kısmını adımlar halinde gerçekleştirelim. 3.1.1 Dosya menüsü Yazdırma Ayarı seçeneği için aşağıdaki kodu frmAna formuna ekleyin. 73 BİLGİSAYAR KULLANMA-II Kaya Private Sub mnuYAyar_Click() CommonDialog1.Flags = cdlPDPrintSetup CommonDialog1.PrinterDefault = True CommonDialog1.ShowPrinter End Sub 3.1.2 Dosya Menüsünün Yazdır seçeneği için aşağıdaki kodu frmAna formuna ekleyin. Private Sub mnuYazdir_Click() Dim cancel As Boolean Dim kopya As Integer On Error GoTo yazhata cancel = False CommonDialog1.CancelError = True CommonDialog1.PrinterDefault = True CommonDialog1.Copies = 1 CommonDialog1.ShowPrinter If cancel = False Then For kopya = 1 To CommonDialog1.Copies Printer.Print frmAna.ActiveForm.txtDok.Text Printer.EndDoc Next kopya End If 74 BİLGİSAYAR KULLANMA-II Kaya Exit Sub yazhata: If Err.Number = cdlCancel Then cancel = True Resume Next End If End Sub Programın çalışır haldeki son durumu aşağıdaki gibi olacaktır. 75