Şimdi Ara

tam bi kitap indirin lazım olur

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
2
Cevap
0
Favori
1.141
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • arkadaşlar umarım beğinirsiniz sizin için bi kitap yayınlıyorum sadece Visual basic
    aradığınız herşey emin olun fazlası var. Eğer elinde benim gibi bi kitabı olan varsa bi zahmet özellikle delphi, flash, dreamweaver.... Hadi Allah kolaylık versin





    MS VISUAL BASIC
    DERS NOTLARI

    VB’de program yazmak demek, nesnelerin olaylar sonucunda verdikleri tepkilerin belirlenmesi demektir. Bu tepki, nesnenin herhangi bir özelliğinin değiştirilmesi, nesneye bir metodun uygulanması ya da bir fonksiyonun çalıştırılması olabilir. Örneğin, bir düğme nesnesine fare ile tıklanması olayı sonucunda, mesaj kutusu fonksiyonunun çalıştırılıp, kullanıcıya bir mesaj verilmesi gibi. Bu şekilde tasarlanan tüm olay-tepki ilişkileri, bir VB programının temelini oluşturur.
    Genel olarak bir VB programı aşağıdaki bileşenlerden oluşur:
    Project : Programın bütününe verilen isimdir.
    Form : Programın sahip olduğu tüm pencerelere (ekranlara) birer form adı verilir. Her VB programı en az bir forma sahip olmalıdır.
    MDI (Multiple Document Interface) Form : Birden fazla pencerenin aynı anda açık tutularak çalıştırılabilmesine olanak veren formlardır.
    Module: Tüm program dahilinde kullanılacak global tanımlamaları içeren bileşendir.
    VB dilinin bileşenlerini ise aşağıdaki gibi sıralayabiliriz:
    • Nesneler (Objects)
    • Özellikler (Properties)
    • Fonksiyonlar (Functions)
    • Metotlar (Methods)
    • Olaylar ( Events)
    • Deyimler (Statements)
    • Sabitler (Constants)
    FORMLAR
    Formların Özellikleri
    Appearance - Görünüm Özellikleri
    Appearance
    Formun çalışma anında (runtime) düz ya da 3 boyutlu görüntülenmesi için kullanılır.
    Sözdizimi: form.Appearance
    Değerler:
    0 Düz. Form görsel efektler olmadan boyanır.
    1 (Varsayılan) 3B. Form, üç-boyut efekti ile boyanır.
    BackColor Formun arkafon rengini belirler.
    Sözdizimi: form.BackColor [=renk]

    BorderStyle Formun kenar çizgilerinin tipini belirler.
    Sözdizimi: form.BorderStyle = [değer]
    Değerler:
    0 Kenar çizgisi yok.
    1 Tekli sabit. Konumu değiştirilebilir. Boyutları ise yalnızca max.ve min. düğmeleri kullanılarak değiştirilebilir.
    2 (Varsayılan) Boyutları değiştirilebilir.
    3 Sabit Dialog. max. ve min düğmeleri yoktur. Boyutları değiştirilemez.
    4 Sabit Araç Penceresi. Boyutları değiştirilemez, Kapat düğmesi ve küçük yazılı başlık çubuğu olan form. Form Windows Görev Çubuğunda gösterilmez.
    5 Araç Penceresi. Boyutları değiştirilebilen, Kapat düğmesi ve küçük yazılı başlık çubuğu olan form. Form Windows Görev Çubuğunda gösterilmez.

    Caption Formun başlığını belirler.
    Sözdizimi: form.Caption [= string]
    FillColor Form üzerinde Circle ve Line metotları ile yaratılan grafiklerin doldurma renklerini belirler.
    Sözdizimi: form.FillColor [ = renk]
    FillStyle Form üzerinde Circle ve Line metotları ile yaratılan grafiklerin doldurma desen tipini belirler.
    Sözdizimi: form.FillColor [ = değer]
    Değerler:
    0 Dolgulu
    1 (Varsayılan) Saydam
    2 Yatay doğru
    3 Dikey doğru
    4 Artan köşegen
    5 Azalan köşegen
    6 Çapraz
    7 Köşegen çapraz
    FontTransparent Form metninin saydamlık özelliğini belirler.
    Sözdizimi: form.FontTransparent [= boolean]
    ForeColor Form üzerinde yer alan grafiklerin rengini belirler.
    Sözdizimi: form.ForeColor [=renk]
    Palette Form tarafından kullanılacak bir palet dosyası atar.
    Sözdizimi: form.Palette = path
    Picture Formun arkafonuna bir resim ekler.
    Sözdizimi: form.Picture [= resim]
    Örnek:
    Private Sub Form_Load ()
    Form1.Picture = LoadPicture("C:\PICS\AUTO\PORSCHE.BMP")
    End Sub



    Behavior - Davranış Özellikleri
    AutoRedraw Otomatik yeniden-resimleme özelliğini aktif hale getirir.
    Sözdizimi: form.AutoRedraw [= boolean]
    ClipControls Boyama olaylarında, değişkenlik gösteren durumlarda tüm nesnenin ya da yenilenen alanların boyanmasına karar verir.
    Sözdizimi: form.ClipControls
    Örnek:
    Aşağıdaki kodu formun declerations bölümüne kopyalayın ve çalıştırıp formun büyüklüğünü değiştirin. Daha sonra aynı işlemi formun ClipControls özelliğini False yapıp tekrar edin.
    Private Sub Form_Paint ()
    ' Arkafon için rastgele bir renk seçer:
    BackColor = &HFFFFFF * Rnd
    End Sub
    DrawMode Shape ve Line kontrollerinin çizim tipini belirler.
    Sözdizimi: form.DrawMode [= değer]
    Değerler:
    1 Siyah.
    2 15’in tersi.
    3 Arkafon rengi ile kalem ters-renginin kombinasyonu
    4 13’ün tersi.
    5 Kalem rengi ile görüntülenen rengin tersinin eşzamanlı
    kombinasyonu
    6 Görüntülenen rengin tersi
    7 Kalem rengi ile görüntülenen rengin kombinasyonu
    8 9’un tersi.
    9 Kalem rengi ile görüntülenen rengin eşzamanlı kombinasyonu.
    10 7’nin tersi.
    11 Çizim modunu sonlandırır.
    12 Kalem renginin tersi ile görüntülenen rengin kombinasyonu.
    13 (Varsayılan) ForeColor özelliği ile belirlenen renk.
    14 Kalem rengi ile görüntülenen rengin tersinin kombinasyonu.
    15 Kalem rengi ile görüntülenen rengin kombinasyonu.
    16 Beyaz.
    DrawStyle Grafik metotlarında çizgi tipini belirler.
    Sözdizimi: form.DrawStyle [= değer]
    Değerler:
    0 (Varsayılan) Dolgulu
    1 Kesik çizgili
    2 Noktalı
    3 Kesik çizgi - Nokta
    4 Kesik çizgi - Nokta - Nokta
    5 Saydam
    6 İç dolgulu
    DrawWidth Grafik metotlarında çizgi kalınlığını belirler.
    Sözdizimi: form.DrawWidth [= büyüklük]
    Enabled Formun kullanılabilir ya da kullanılamaz olmasını belirler.
    Sözdizimi: form.Enabled [= boolean]


    OLEDropMode Forma ait hedef bileşenin OLE-bırakma işlemlerini ayarlar.
    Sözdizimi: form.OLEDropMode [= mode]
    0 (Varsayılan) Hedef bileşen OLE-bırakmasını kabul etmez.
    1 El ile. OLE-bırakması programatik olarak gerçekleştirilebilir.
    2 Otomatik. OLE-bırakması, eğer tanımlanabilirse hedef bileşen tarafından otomatik olarak algılanır vr kabul edilir.
    PaletteMode Yüklü paletin renk yelpazesi modunu ayarlar.
    Sözdizimi: form.PaletteMode = tamsayı
    Değerler:
    0 (Varsayılan) Yarımton palet.
    1 Üstten-artmalı palet.
    2 Palette özelliğinde belirlenen palet kullanılır.
    RightToLeft Metin yazım yönünü belirler.
    Sözdizimi: form.RightToLeft
    Visible Formun görünüp görünmeme durumunu ayarlar.
    Sözdizimi: form.Visible [= boolean]

    DDE - Dinamik Veri Değişimi (Dynamic Data Exchange) Özellikleri
    LinkMode DDE alışverişi için link türünü belirler ve bağlantıyı aktif hale getirir.
    Sözdizimi: form.LinkMode [= değer]
    Değerler:
    0 (Varsayılan) Hiçbirisi - DDE kapalı.
    1 Otomatik - Bağlantılı veri her değiştiğinde hedef kontrol güncellenir.
    2 El ile - Hedef kontrol LinkRequest metodu çalıştırıldığında güncellenir.
    3 Bildirimli - Bağlantılı veri her değiştiğinde LinkNotify olayı gerçekleşir, ancak, hedef kontrol yine LinkRequest metodu çalıştırıldığında güncellenir.
    LinkTopic Form için kaynak uygulama ve konuyu belirler.
    Sözdizimi: form.LinkTopic [= değer]
    Örnek:
    Private Sub Form_Load ()
    Form1.LinkMode = 0 'Bağlantının aktif olmadığına emin olmak için.
    Form1.LinkTopic = "Excel|Sheet1" 'Uygulama ve konu belirleniyor.
    Form1.LinkMode = 1 'Bağlantı sağlanıyor.
    End Sub

    Font - Yazıtipi Özellikleri
    Font Form metni için yazıtipi özelliklerini belirler.
    Sözdizimi: form.Font
    NOT:
    Font özelliğini ona yeni özellikler kazandırabileceğimiz bir nesne gibi kullanabiliriz:
    Form1.Font.Bold = True



    Misc - Diğer Özellikler
    Name Formun kodlarda kullanılacak adını belirler.
    Sözdizimi: form.Name
    ControlBox Formun pencere kontrol düğmelerini açar ya da kaldırır.
    Sözdizimi: form.ControlBox
    HelpContextID Formun yardım dosyasındaki indeks numarasını belirler.
    Sözdizimi: form.HelpContextID [= sayı]
    Aşağıdaki kodu üzerinde textbox olan formun declerations bölümüne kopyalayın ve çalıştırıp fokus formda iken ve textbox’da iken F1 tuşuna basın:
    Private Sub Form_Load ()
    Text1.HelpContextID = 21001
    Form1.HelpContextID = 21005
    End Sub
    Icon Forma bir simge dosyası atar.
    Sözdizimi: form.Icon [= picture]
    KeyPreview Klavye olaylarını aktif hale getirir.
    Sözdizimi: form.KeyPreview [= boolean]
    Aşağıdaki kodu formun declerations bölümüne kopyalayın ve çalıştırıp F1, F2 ve F3 tuşlarına basın.
    Private Sub Form_Load ()
    KeyPreview = True
    End Sub
    Private Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
    Case vbKeyF1: MsgBox "F1 yardım içindir"
    Case vbKeyF2: MsgBox "F2 metni kopyalar"
    Case vbKeyF3: MsgBox "F3 kopyalanan metni yapıştırır"
    End Select
    End Sub
    MaxButton Ekranı kapla düğmesini aktif hale getirir.
    Sözdizimi: form.MaxButton
    MDIChild Formun, bir MDI form içinde MDI Child form olarak görüntülenip görüntülenmeyeceğini belirler.
    Sözdizimi: form.MDIChild
    MinButton Simge durumuna küçült düğmesini aktif hale getirir.
    Sözdizimi: form.MinButton
    MouseIcon Fare imlecinin simgesini belirleyen bir .ico dosyası atar.
    Sözdizimi: form.MouseIcon = LoadPicture(pathname),
    form.MouseIcon [= picture]
    MousePointer Fare imlecinin türünü belirler.
    Form.MousePointer [= değer]
    0 (Varsayılan) Form tarafından belirlenir.
    1 Ok.
    2 Çarpı.
    3 I işareti.
    4 Simge.
    5 Dört yönlü ok.
    6 İki yönlü ok.(KuzeyDoğu-GüneyBatı)
    7 İki yönlü ok.(Kuzey-Güney).
    8 İki yönlü ok.(GüneyDoğu-KuzeyBatı).
    9 İki yönlü ok.(Doğu-Batı).
    10 Yukarı Ok.
    11 Kumsaati.
    12 Normal.
    13 Ok ve Kumsaati.
    14 Ok ve Soru işareti.
    15 Boyut değiştirme.
    99 MouseIcon özelliği ile belirlenen simge.
    NegotiateMenus Form üzerinde yer alan bir nesneye ait menünün otomatik olarak görüntülenip görüntülenmeyeceğini belirler.
    ShowInTaskbar Formun Windows’un görev çubuğunda yer alıp almayacağını.
    Sözdizimi: form.ShowInTaskbar
    Tag
    Nesneye, VB tarafından kullanılmayacak özel amaçlı bir bilgi ya da yorum atamak için kullanılır.
    Sözdizimi: form.Tag [= ifade]
    WhatsThisButton Formun başlık çubuğunda bu nedir düğmesinin yer alıp almayacağını belirler.
    Sözdizimi: form.WhatsThisButton
    NOT: Bu özelliğin çalışması için aşağıdaki atamalar yapılmalıdır:
    ControlBox=True
    BorderStyle=Fixed Single ya da Sizable | BorderStyle=FixedDialog
    MinButton, MaxButton=False
    WhatsThisHelp Windows’un help sistemini aktif hale getirir.
    Sözdizimi: form.WhatsThisHelp [= boolean]
    WindowState Form penceresinin çalışma anındaki (runtime) görünümünü belirler.
    Sözdizimi: form.WindowState [= değer]
    Değerler:
    0 (Varsayılan) Normal.
    1 Simge durumunda.
    2 Ekranı kaplamış.

    Position – Konum Özellikleri
    Height, Width Formun yükseklik ve genişlik ölçülerini belirlerler.
    Sözdizimi: form.Height [= sayı], form.Width [= sayı]
    Left, Top Formun Sol ve Üst kenardan sonra bırakılacak boşluklarını belirler.
    Sözdizimi: form.Left [= değer], form.Top [= değer]
    Moveable Formun taşınabilir olup olmadığını belirler.
    Sözdizimi: form.Moveable = boolean
    StartUpPosition Formun açıldığı andaki görünümünü belirler.
    Sözdizimi: form.StartUpPosition = position
    Değerler:
    0 Başlangıç koşulu yok.
    1 Üzerinde bulunulan nesneye göre merkez.
    2 Ekrana göre merkez.
    3 Ekranın sol-üst köşesi.




    Scale – Ölçek Özellikleri
    ScaleHeight,
    ScaleWidth Formun üzerindeki grafik metodu kullanılarak yaratılan nesneler için sırasıyla dikey ve yatay ölçek tanımlarlar.
    Sözdizimi: form.ScaleHeight [= değer], form.ScaleWidth [= değer]
    Örnek:
    Aşağıdaki kodu üzerinde textbox olan formun declerations bölümüne kopyalayın ve çalıştırıp formun üzerine tıklayın. Sonra formun büyüklüğünü değiştirip tekrar tıklayın.
    Private Sub Form_Click ()
    Dim Radius As Integer ' Değişken tanımları.
    ScaleHeight = 100 ' Yükseklik büyüklüğü.
    ScaleWidth = 100 ' Genişlik büyüklüğü.
    For Radius = 5 to 50 Step 5
    FillStyle = 1
    Circle (50, 50), Radius ' Çember çiziliyor.
    Next Radius
    End Sub
    ScaleLeft, ScaleTop Formun üzerindeki grafik metodu kullanılarak yaratılan nesnelerin sırasıyla sol ve üst köşeleri için koordinatları belirlerler.
    Sözdizimi: form.ScaleLeft [= değer], form.ScaleTop [= değer]
    ScaleMode Ölçek birimini belirler.
    Sözdizimi: form.ScaleMode [= değer]
    Değerler:
    0 ScaleHeight, ScaleWidth, ScaleLeft, ve ScaleTop özelliklerinin sahip oldukları değerlere göre ayarlanır.
    1 (Varsayılan) Twip (inç başına 1440 twip, santimetre başına 567 twip).
    2 Nokta (inç başına 72 nokta).
    3 Piksel (Monitör veya yazıcının çözünürlüğüne göre ayarlanır).
    4 Karakter (Yatay = birim başına 120 twip; Dikey = birim başına 240 twip).
    5 Inç.
    6 Milimetre.
    7 Santimetre.
    Formlara Uygulanan Olaylar
    Activate Form, aktif pencere olduğu anda oluşur.
    Sözdizimi: Private Sub Form_Activate( )
    Deactivate Form, deaktif pencere olduğu anda oluşur.
    Sözdizimi: Private Sub Form_Deactivate( )
    Örnek:
    Private Sub MDIForm_Load ()
    Form1.Caption = "Form #1" ' Form1 için pencere başlığı atanıyor.
    Dim NewForm As New Form1 ' Yeni bir child form oluşturuluyor.
    Load NewForm
    NewForm.Caption = "Form #2" ' Form2 için pencere başlığı atanıyor.
    NewForm.Show ' Yeni form görüntüleniyor.
    End Sub
    Private Sub Form_Activate () ' Durum çubuğu metni atanıyor:
    MDIForm1.Label1.Caption = "Current form: " & Me.Caption
    End Sub
    Click Form üzerinde fare tıklaması sırasında oluşur.
    Sözdizimi: Private Sub Form_Click( )
    DblClick Form üzerinde çift fare tıklaması sırasında oluşur.
    Sözdizimi: Private Sub Form_DblClick( )
    Örnek:
    Private Sub Form_Load ()
    List1.AddItem "Nalan" ' Liste kutusunun girişleri belirleniyor.
    List1.AddItem "Cüneyt"
    List1.AddItem "Murat"
    List1.AddItem "Ferit"
    End Sub
    Private Sub List1_DblClick ()
    Command1.Value = True ' Click olayı tetikleniyor.
    End Sub
    Private Sub Command1_Click ()
    Text1.Text = List1.Text ' Seçilen seçenek Text1 nesnesine metin olarak aktarılıyor.
    End Sub
    DragDrop Sürükle-Bırak işlemi tamamlandığında oluşur.
    Sözdizimi: Private Sub Form_DragDrop(source As Control, x As Single, y As Single)
    x,y : Sürüklenen formun bırakıldığı konumdaki yatay ve dikey koordinatı.
    DragOver Sürükle-Bırak işlemi gerçekleştiğinde oluşur.
    Sözdizimi: Private Sub Form_DragOver(source As Control, x As Single, y As Single, state As Integer)
    x,y : Sürüklenen formun yatay ve dikey koordinatı.
    state : Formun o anki durumu. 0: form, hedefe bırakıldı; 1: form hedefe sürüklenmekte; 2: form hedef dışında bir noktaya bırakıldı.
    GotFocus Form fokusu aldığı anda oluşur.
    Sözdizimi: Private Sub Form_GotFocus( )
    Initialize
    Form çalışma anında yaratıldığı anda oluşur.
    Sözdizimi: Private Sub form_Initialize( )

    KeyDown,
    KeyUp


    Form üzerinde herhangi bir tuşa basıldığı anda (KeyDown) ve tuş bırakıldığı anda (KeyUp) oluşurlar.
    Sözdizimi: Private Sub Form_KeyDown(keycode As Integer, shift As Integer),
    Private Sub Form_KeyUp(keycode As Integer, shift As Integer)
    keycode: VB nesne kütüphanesinde (VB-object library) yer alan düğme kodlarından birisi.
    shift: SHIFT, CTRL, ve ALT düğmelerinin durumunu verir. Bu tuşların sırasıyla 1,2 ve 4 bitlik değerleri vardır. Toplam değer kullanılır.
    KeyPress Form üzerinde herhangi bir tuşa basıldığı anda oluşur. Basılan tuşun ANSI kodunu verir.
    Sözdizimi: Private Sub Form_KeyPress(keyascii As Integer)
    keyascii: Basılan tuşun ANSI kodu.
    LinkClose DDE alışverişi kesildiği anda oluşur.
    Sözdizimi: Private Sub Form_LinkClose( )
    LinkError DDE alışverişi sırasında hata olduğu anda oluşur.
    Sözdizimi: Private Sub Form_LinkError(linkerr As Integer)
    linkerr: Oluşan hata kodu. (Bkz: VbHelp)
    LinkExecute DDE alışverişi sırasında, hedef uygulama tarafından bir komut gönderildiği anda oluşur.
    Sözdizimi: Private Sub Form_LinkExecute(cmdstr As String, cancel As Integer)
    cmdstr : Hedef uygulama tarafından gönderilen komut stringi.
    cancel : Gönderilen komutun kabul parametresi. False: Kabul edildi; True: reddedildi.
    Örnek:
    Private Sub Form_LinkExecute (CmdStr As String, Cancel As Integer)
    Cancel = False
    Select Case LCase(CmdStr)
    Case "{big}"
    WindowState = 2 ' Ekranı kapla.
    Case "{little}"
    WindowState = 1 ' Simge durumu.
    Case "{hide}"
    Visible = False ' Formu gizle.
    Case "{view}"
    Visible = True ' Formu göster.
    Case Else
    Cancel = True ' Komut kabul edilmedi.
    End Select
    End Sub
    LinkOpen DDE alışverişi başlatıldğı anda oluşur.
    Sözdizimi: Private Sub Form_LinkOpen(cancel As Integer)
    cancel: 0: Alışveriş gerçekleştirilir, 0 dışında herhangi bir değer alışverişi durdurur.
    Load Form yüklendiği anda oluşur.
    Sözdizimi: Private Sub Form_Load()
    LostFocus Form fokusu kaybettiği anda oluşur.
    Sözdizimi: Private Sub Form_LostFocus( )

    MouseDown
    MouseUp Form üzerinde fare düğmesine basıldığında (MouseDown) ve bırakıldığında (MouseUp) oluşurlar.
    Sözdizimi: Private Sub Form_MouseDown(button As Integer, shift As Integer, x As Single, y As Single)
    Private Sub Form_MouseUp(button As Integer, shift As Integer, x As Single, y As Single)
    button: Sol, Sağ ve Orta tultan hangisine basıldığını verir. Bu tuşların sırasıyla 1,2 ve 4 bitlik değerleri vardır. Toplam değer kullanılır.
    shift: SHIFT, CTRL, ve ALT düğmelerinin durumunu verir. Bu tuşların sırasıyla 1,2 ve 4 bitlik değerleri vardır. Toplam değer kullanılır.
    x,y: Fare imlecinin o anki konumunu verir.
    Örnek:
    Dim PaintNow As Boolean
    Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As
    Single, Y As Single)
    PaintNow = True ' Boyamayı aktif hale getirir.
    End Sub
    Private Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)
    PaintNow = False ' Boyamayı kapatır.
    End Sub
    Private Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
    If PaintNow Then
    PSet (X, Y) ' Belirlenen koordinatlara nokta koyar.
    End If
    End Sub
    Private Sub Form_Load ()
    DrawWidth = 10 ' Geniş fırça kullan.
    ForeColor = RGB(0, 0, 255) ' Çizim rengini ata.
    End Sub
    MouseMove Fare imleci form üzerinde hareket ettirildiği anda oluşur.
    Sözdizimi: Private Sub Form_MouseMove(button As Integer, shift As Integer, x As Single, y As Single)
    button: Sol, Sağ ve Orta tultan hangisine basıldığını verir. Bu tuşların sırasıyla 1,2 ve 4 bitlik değerleri vardır. Toplam değer kullanılır.
    shift: SHIFT, CTRL, ve ALT düğmelerinin durumunu verir. Bu tuşların sırasıyla 1,2 ve 4 bitlik değerleri vardır. Toplam değer kullanılır.
    x,y: Fare imlecinin o anki konumunu verir.
    Örnek:
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Line -(X, Y)
    End Sub






    Paint Form üzerinde yer alan bir grafik nesnesinin, taşıma ya da boyut değiştirme eylemlerinden sonra tekrar yenilendiği anda oluşur.
    Sözdizimi: Private Sub Form_Paint( )
    Örnek: Çalıştırıp formun boyutlarını değiştirin.
    Private Sub Form_Paint ()
    Dim HalfX, HalfY ' Değişken tanımları.
    HalfX = ScaleLeft + ScaleWidth / 2 ' Genişliğin orta noktası.
    HalfY = ScaleTop + ScaleHeight / 2 ' Yüksekliğin orta noktası.
    Line (ScaleLeft, HalfY) - (HalfX, ScaleTop) ' Karo çiz.
    Line -(ScaleWidth + ScaleLeft, HalfY)
    Line -(HalfX, ScaleHeight + ScaleTop)
    Line -(ScaleLeft, HalfY)
    End Sub
    Private Sub Form_Resize
    Refresh
    End Sub
    Resize Form boyutu değiştirildiği anda oluşur.
    Sözdizimi: Private Sub Form_Resize( )
    Örnek: Çalıştırıp formun boyutlarını değiştirin.
    Private Sub Form_Load ()
    Text1.Text = "" ' Text1 kutusunun metnini temizle.
    End Sub
    Private Sub Form_Resize ()
    Text1.Move 0,0, ScaleWidth, ScaleHeight
    End Sub
    Terminate Formun çalışması, çalışma anında sonlandığı anda oluşur.
    Sözdizimi: Private Sub object_Terminate( )
    Unload Form, bellekten boşaltıldığı anda oluşur.
    Sözdizimi: Private Sub Form_Unload(Cancel As Integer)

    İLK UYGULAMA : ÇİZİM PROGRAMI

    Aşağıdaki kesit ile verilen genel görünüme sahip bir çizim programı uygulaması geliştireceğiz:


    Önbilgiler
    1. Fonksiyonlar
    Çift yönlü veri alış-verişi gerçekleştiren prosedürlerdir. – Diğer prosedür çeşitleri: Sub (yordamlar) ve Property (Özellikler) – Genel sözdizimleri aşağıda açıklanmıştır:

    [Public | Private | Friend] [Static] Function <Fonksiyon Adı> [(parametreler)] [As tür]
    [deyimler]
    [Fonksiyon adı = ifade]
    [Exit Function]
    [deyimler]
    [Fonksiyon adı = ifade]
    End Function

    Public Opsiyonel-Fonksiyona tüm modüllerde yer alan tüm diğer prosedürler tarafından erişilebilir.
    Private Opsiyonel-Fonksiyona sadece kendisinin tanımlı olduğu modüldeki prosedürlerden erişilebilir.
    Friend Opsiyonel-Sadece Class-Modüllerde tanımlanır. (Bkz: VB Help Reference)


    Static Opsiyonel-Fonksiyon tarafından kullanılan lokal değişkenler çağrılar arasında korunurlar.
    Fonksiyon adı Standart değişken isimlendirme kuralları kullanılarak belirlenen ad.
    parametreler Opsiyonel-Fonksiyona çağrıldığı anda veri aktaracak parametre değişkenleri. Bir ya da daha fazlası birbirlerinden virgülle ayrılarak tanımlanabilir:
    parametre-1 As tür-1, parametre-2 As tür-2,..., parametre-N As tür-N
    tür Opsiyonel-Fonksiyon tarafından geri döndürülecek değerin veri türü. Aşağıdakilerden birisi olabilir: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal, Date, String, Object, Variant ya da kullanıcı-tanımlı bir tür.
    deyimler Fonksiyon tarafından çalıştırılacak program deyimleri.
    ifade Opsiyonel-Fonksiyon tarafından geri döndürülecek değer.

    2. CommandButton (Komut Düğmesi)
    İşlemleri başlatmak, kesmek ya da sonlandırmak için kullanılan kontrollerdir. Önemli özellikleri ve algıladığı bazı olaylar aşağıda açıklanmıştır:
    Özellikler
    Cancel : Butonun iptal düğmesi olup olmadığını belirler. Bir formda sadece bir iptal düğmesi yer alabilir. İptal düğmesi, form üzerinde yapılan son işlemi iptal eder.
    Caption : Buton üzerinde yer alacak yazıyı belirler.
    Style : Standart ya da Grafiksel olarak butonun türünü belirler. Arka fon renginin değiştirilmesi veya resim eklenmesi için grafiksel bir buton kullanılmalıdır.
    Olaylar
    Click : Butona basıldığı anda oluşur.
    Diğer olayların bir çoğu formlar tarafından algılanan olaylarla aynı şekilde çalışırlar.
    3. ComboBox (Açılan Kutu)
    Açılan kutu biçiminde seçenekler sunan kontrollerdir. Önemli özellikleri ve algıladığı bazı olaylar aşağıda açıklanmıştır:
    Özellikler
    ItemData : ComboBox içinde yer alacak seçenekleri belirler. Bu işlem, örnek uygulamada yaptığımız gibi kod içersinde de gerçekleştirilebilir.
    Sorted : Seçeneklerin alfabetik olarak sıralanıp sıralanmayacağını belirler.
    Style : ComboBox’ın türünü belirler.
    Olaylar
    Click : ComboBox’tan bir seçenek seçildiği anda oluşur.
    Change : ComboBox’ta yer alan bir seçenek değiştirildiği anda oluşur.
    4. Label (Etiket)
    Etiket bilgisi eklemek için kullanılır.
    5. TextBox (Metin Kutusu)
    Tasarım anında veya kod ya da kullanıcı denetimli olarak bilgi gösteriminde kullanılan kontrollerdir. Önemli özellikleri ve algıladığı bazı olaylar aşağıda açıklanmıştır:
    Özellikler
    PasswordChar : TextBox’a girilecek bilginin belirlenen karakterle gizlenmesini (Şifre girişi gibi) sağlar.
    Text : TextBox içinde yer alan bilgiyi taşır.
    Olaylar
    Click : TextBox’a tıklandığı anda oluşur.
    Change : TextBox’ta yer alan bilgi değiştirildiği anda oluşur.
    6. OptionButton (Seçenek Düğmesi)
    Açık ya da kapalı konuma ayarlanabilen seçenek kontrolüdür. Önemli özellikleri ve algıladığı bazı olaylar aşağıda açıklanmıştır:
    Özellikler
    Caption : Buton yanında yer alacak yazıyı belirler.
    Style : OptionButton’ın türünü belirler.
    Value : OptionButton’ın çalışma anında seçili olup olmadığını belirler.
    Olaylar
    Click : TextBox’a tıklandığı anda oluşur.
    7. Frame (Çerçeve)
    Form alanında bir kontrol bölgesi yaratmak için kullanılan kontrollerdir.
    CurrentX, CurrentY
    Çizim metotlarında, en son çizim konumunun koordinatlarını verir. Bu koordinatların hangi metot için hangi konum olarak belirlendiği aşağıda listelenmiştir:
    Circle Merkez noktası.
    Cls 0, 0. (Ekranın sol-üst köşesi)
    Line Doğrunun son noktası.
    NewPage 0, 0. (Ekranın sol-üst köşesi)
    Print Bir sonraki basım pozisyonu.
    PSet Konulan noktanın kendisi.
    Uygulama İçin Yapılan Design-Time Ayarlamaları
    Uygulamada kullanılan nesnelerin tasarımda değiştirilen özellikleri aşağıda listelenmiştir:
    FrmAna : Form
    Name = FrmAna
    Appeareance = 0-Flat
    BackColor = &H80000005&
    BorderStyle = 1-Fixed Single
    Caption = Çizim V1.1
    MaxButton = False
    StartUpPosition = 2-CenterScreen
    BtnTemizle : CommandButton
    Name = BtnTemizle
    Caption = TEMİZLE

    BtnCikis : CommandButton
    Name = BtnCikis
    Caption = ÇIKIŞ
    BtnKalem : CommandButton
    Name = BtnKalem
    BackColor = &H80000018&
    Caption = KALEM
    Style = 1-Graphical
    BtnSilgi : CommandButton
    Name = BtnSilgi
    BackColor = &H8000000F&
    Caption = SİLGİ
    Style = 1-Graphical
    CmbRenk : ComboBox
    Name = CmbRenk
    Text = Siyah
    CmbKalinlik : ComboBox
    Name = CmbKalinlik
    Text = Orta
    OptDolgulu : OptionButton
    Name = OptDolgulu
    Caption = Dolgulu
    Value = True
    OptDolgusuz : OptionButton
    Name = OptDolgusuz
    Caption = Dolgusuz
    Value = False
    Açıklamalı Kodlar
    1. Değişken ve Fonksiyon Tanımlamaları

    Dim RenkKodu As Integer
    Dim CizimModu As Byte

    Function KodaCevir(GelenText As String) As Integer
    If GelenText = "Siyah" Then KodaCevir = 0
    If GelenText = "Kırmızı" Then KodaCevir = 12
    If GelenText = "Yeşil" Then KodaCevir = 10
    If GelenText = "Mavi" Then KodaCevir = 9
    If GelenText = "Sarı" Then KodaCevir = 14
    If GelenText = "Çok İnce" Then KodaCevir = 1
    If GelenText = "İnce" Then KodaCevir = 2
    If GelenText = "Orta" Then KodaCevir = 3
    If GelenText = "Kalın" Then KodaCevir = 4
    If GelenText = "Çok Kalın" Then KodaCevir = 5
    End Function
    RenkKodu, ilgili ComboBox’tan seçilen rengin kodunu tutar. CizimModu ise Kalem ya da Silgi düğmelerinden hangisinin aktif olduğunu belirler. (1=Kalem,0=Silgi)
    KodaCevir fonksiyonu, text olarak gelen bilgiye karşılık gelen kodu geri döndürür.
    2. Olay Kodları
    Private Sub Form_Load()
    CizimModu = 1
    Me.DrawWidth = 2
    TxtCemberYrcp.Text = "20"
    CmbRenk.AddItem "Siyah"
    CmbRenk.AddItem "Kırmızı"
    CmbRenk.AddItem "Mavi"
    CmbRenk.AddItem "Yeşil"
    CmbRenk.AddItem "Sarı"
    CmbKalinlik.AddItem "Çok İnce"
    CmbKalinlik.AddItem "İnce"
    CmbKalinlik.AddItem "Orta"
    CmbKalinlik.AddItem "Kalın"
    CmbKalinlik.AddItem "Çok Kalın"
    End Sub

    Form yükleniyor.
    Çizim modu kaleme göre ayarlanıyor. Formun DrawWidth özelliğine (çizgi kalınlığı) 2 değeri veriliyor. TxtCemberYrcp TextBox’unun text özelliğine 20 değeri veriliyor ve sırasıyla CmbRenk ve CmbKalinlik ComboBox’ları dolduruluyor.
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then Line -(X, Y), QBColor(RenkKodu)
    End Sub Fare imleci yer değiştiriyor.
    Eğer bu sırada basılan düğme sol fare düğmesi ise imlecin son çizim konumundan (CurrentX,CurrentY) o anki konumuna (X,Y) RenkKodu ile bir çizgi parçası çiziliyor.
    Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 2 Then Line -(X, Y), QBColor(RenkKodu)
    End Sub Fare düğmesi bırakılıyor.
    Eğer bırakılan düğme sağ fare düğmesi ise imlecin son çizim konumundan (CurrentX,CurrentY) o anki konumuna (X,Y) RenkKodu ile bir çizgi parçası çiziliyor.
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    CurrentX = X
    CurrentY = Y
    End Sub Fare düğmesine basılıyor.
    Son çizim konumunu fare düğmelerinden herhangi birisine basılan konum olarak atar.










    Private Sub Form_DblClick()
    If CizimModu = 1 Then
    FillColor = QBColor(RenkKodu)
    If OptDolgulu.Value = True Then FillStyle = 0
    Else FillStyle = 1
    Circle(CurrentX, CurrentY),Val(TxtCemberYrcp.Text) * 10
    End If
    End Sub









    Form üzerinde çift-tıklama yapılıyor. Eğer çizim modu 1 ise, yani kalem butonu basılı ise formun doldurma rengi özelliği RenkKodu değişkeninin taşıdığı değere karşılık gelen renk kodunu alıyor ve OptDolgulu OptionButton’ın Value özelliğinin True ya da aksi olması durumuna göre (Bu seçenek seçili ya da değil) formun FillStyle özelliği belirleniyor. Circle metodu kullanılarak son çizim konumu merkezli ve TxtCemberYrcp TextBox’ında yer alan değerin 10 katı yarıçaplı bir çember çiziliyor.
    Private Sub CmbRenk_Click()
    RenkKodu = KodaCevir(CmbRenk.Text)
    End Sub CmbRenk ComboBox’ında seçilen rengin kod karşılığını RenkKodu değişkenine aktarır.
    Private Sub CmbKalinlik_Click()
    Me.DrawWidth = KodaCevir(CmbKalinlik.Text)
    End Sub CmbKalinlik ComboBox’ında seçilen çizgi kalınlığını kod karşılığını formun DrawWidth özelliğine aktarır.
    Private Sub BtnTemizle_Click()
    Me.Cls
    End Sub BtnTemizle butonuna basılıyor. Form temizleniyor.
    Private Sub BtnCikis_Click()
    End
    End Sub BtnCikis butonuna basılıyor. Program sonlanıyor.
    Private Sub BtnSilgi_Click()
    CizimModu = 0
    Me.DrawWidth = 15
    RenkKodu = 15
    BtnSilgi.BackColor = &H80000018 'Sarı renk kodu
    BtnKalem.BackColor = &H8000000F 'Gri renk kodu
    End Sub BtnSilgi butonuna basılıyor. Çizim modu silgi olarak belirleniyor ve kalınlık 15’e, renk kodu 15’e (beyaz) ayarlanıyor. BtnSilgi butonunun arka fon rengi sarı, BtnKalem butonunun arka fon rengi griye dönüştürülüyor.
    Private Sub BtnKalem_Click()
    CizimModu = 1
    Me.DrawWidth = KodaCevir(CmbKalinlik.Text)
    RenkKodu = KodaCevir(CmbRenk.Text)
    BtnKalem.BackColor = &H80000018 'Sarı renk kodu
    BtnSilgi.BackColor = &H8000000F 'Gri renk kodu
    End Sub BtnKalem butonuna basılıyor. Çizim modu kalem olarak belirleniyor ve kalınlık CmbKalinlik ComboBox’ının textinin kod değerine, renk kodu CmbRenk ComboBox’ının textinin kod değerine ayarlanıyor. BtnSilgi butonunun arka fon rengi gri, BtnKalem butonunun arka fon rengi sarıya dönüştürülüyor.

    DEĞİŞKEN TANIMLAMALARI (DIM)
    Değişken tanımlamaları genel olarak üç farklı biçimde yapılabilir: Global, Yarı-global ve Lokal. Lokal tanımlamalar bir nesneye ait altprogramlar içersinde gerçekleştirilen tanımlamalardır. Yarı-global tanımlamalar ise söz konusu nesnenin declarations kesiminde gerçekleştirilen ve nesneye ait tüm kodlarda geçerlilik sağlayan tanımlamalardır.
    Global tanımlamalar, projenin module bileşeninde gerçekleştirilirler ve tüm proje kapsamında geçerlilik sağlarlar.
    Değişken tanımlamalarında kullanılan Dim deyiminin genel sözdizimi aşağıdaki gibidir:
    Dim <Değişken adı>[([indisler])] [As [New] tür]
    Açıklamalar:
    <Değişken adı> Standart değişken isimlendirme kurallarına bağlı kalarak (Türkçe harfler, aritmetik işlem ya da mantıksal bağlaç operatörleri kullanılmayacak) verilecek herhangi bir isim.
    indisler Dizi türü değişken tanımlamalarında kullanılan indis alt ve üst sınırı. Genel olarak şu şekilde tanımlanırlar: AltSınır To ÜstSınır
    New Belirtildiği takdirde daha önceden tanımlanmış olan değişken, reset yapılarak yeniden tanımlanır.
    tür Belirtme zorunluluğu yoktur. (Belirtilmediği takdirde Variant olarak algılanır) Genel olarak kullanılabilecek değişken türleri: Byte (Küçük tamsayı), Boolean (Doğru/Yanlış), Integer (Tamsayı), Long (Büyük tamsayı), Currency (Para birimi), Single (Küçük gerçel sayı), Double (Büyük gerçel sayı), Decimal (10’un kuvvetleri), Date (tarih), String (metin), String*uzunluk (sabit-uzunluklu metinler için), Object (Nesne), Variant (Nümerik, string ya da tarih türlerinin hepsini kapsayan bir tür.) ya da kullanıcı-tanımlı bir tür.
    Örnek:
    Dim Deger1, Deger2 ‘Her ikisi de Variant
    Dim Sayi As Integer
    Dim Bulundu, Secim As Boolean, DogumTrh As Date
    Dim Dizi(50) ’51 elemanlı Variant dizisi
    Dim Matris(3, 4) As Integer ’12 elemanlı tamsayı matrisi
    Dim Matris3d(1 To 5, 4 To 9, 3 To 5) As Double ’90 elemanlı gerçel sayı matrisi
    Dim Trh(1 To 10) As Date ‘1 den 10 a kadar indekslenmiş tarih dizisi
    Dim MyArray() ‘Dinamik bir Variant dizisi (Belirli bir indeksleme yok)
    KOŞULLU İFADELER
    1. If..Then..Else
    Tek-satırlı kullanım:
    If <koşul ifadesi> Then deyimler [Else deyimler]
    Blok kullanımı:
    If <koşul ifadesi> Then
    deyimler
    [ElseIf <koşul ifadesi> Then
    deyimler]
    [Else
    deyimler]
    End If
    Açıklamalar:
    <koşul ifadesi> True(Doğru) ya da False(Yanlış) olarak değerlendirilebilecek sayısal ya da sayısal olmayan bir ifade. Eğer koşul boş ise (Null), False olarak değerlendirilir.
    deyimler Tek-satırlı kullanımda birbirlerinden “:” işareti ile ayrılmış çalıştırılabilir kod deyimleri. Örneğin; If A > 10 Then A = A + 1 : B = B + A : C = C + B gibi. Blok kullanımda her biri ayrı satırlara yazılmış çalıştırılabilir kod deyimleri.
    Örnek:
    Dim Sayi, Basamak, Sonuc
    Sayi = 53 ' Değişkenin ilk değeri atanıyor.
    ‘ Blok kullanımı:
    If Sayi < 10 Then
    Basamak = 1
    ElseIf Sayi < 100 Then
    Basamak = 2
    Else
    Basamak = 3
    End If
    ' Tek-satırlı kullanım:
    If Basamak = 1 Then Sonuc = "Tek basamaklı" Else Sonuc = "Birden çok basamaklı"

    2. Select Case
    Select Case <ifade>
    [Case <ifade-1>
    [<deyimler-1>]
    [Case <ifade-2>
    [<deyimler-2>]
    .
    .
    .
    [Case <ifade-n>
    [<deyimler-n>]
    [Case Else
    [deyimler]
    End Select
    Örnek:
    Private Sub Command1_Click()
    Select Case Val(Text1.Text)
    Case 0 To 49
    MsgBox "Notunuz:D"
    Case 50 To 69
    MsgBox "Notunuz:C"
    Case 70 To 89
    MsgBox "Notunuz:B"
    Case 90 To 100
    MsgBox "Notunuz:A"
    Case Else
    MsgBox "Notunuz Alfabetik Sistemde Hesaplanamadı"
    End Select
    End Sub
    DÖNGÜLER
    1. Do..Loop
    İki farklı kullanımı olan döngü deyimidir. Bunlardan ilki;
    Do [{While | Until} <koşul ifadesi>]
    [deyimler]
    [Exit Do]
    [deyimler]
    Loop
    Diğeri ise;
    Do
    [deyimler]
    [Exit Do]
    [deyimler]
    Loop [{While | Until} <koşul ifadesi>]
    biçimindedir. İki kullanım arasındaki fark, ilkinde koşulun işlemlere başlanmadan önce, ikincisinde ise işlemler en az bir defa gerçekleştirildikten sonra denetleniyor olmasıdır. Exit Do ifadesi deyimler arasında istenilen bir noktada döngüyü kırmak için kullanılır.
    Örnek:
    Dim Denetle, Sayac
    Denetle = True: Sayac = 0 ' Değişkenlerin ilk değerleri atanıyor.
    Do ' Dıştaki döngü başlıyor.
    Do While Sayac < 20 ' İçteki döngü.
    Sayac = Sayac + 1 ' Sayac birer birer artıyor.
    If Sayac = 10 Then
    Denetle = False
    Exit Do ' İçteki döngüden çıkılıyor.
    End If
    Loop
    Loop Until Denetle = False ' Dıştaki döngü için sonlanma koşulu.
    2. For Each..Next
    For Each <eleman> In <grup>
    [deyimler]
    [Exit For]
    [deyimler]
    Next [eleman]
    Örnek: Verilen örnekte Nesne, text özelliğine sahip bir nesneyi temsil eden değişkendir. Koleksiyon ise bir nesneler koleksiyonudur.
    Dim Bulundu, Nesne, Koleksiyon
    Bulundu = False
    For Each Nesne In Koleksiyon
    If Nesne.Text = "Merhaba" Then
    Bulundu = True
    Exit For
    End If
    Next
    3. For..Next
    En çok kullanılan döngü biçimidir. Başlangıç ve bitiş değerleri sayısal ya da sayısal olmayan ifadeler, basamak ise döngü sıçrama değeridir.
    For <sayaç> = <başlangıç değeri> To <bitiş değeri> [Step <basamak>]
    [deyimler]
    [Exit For]
    [deyimler]
    Next [<sayaç>]
    Örnek:
    Dim Kelimeler, Karakterler, YeniText
    For Kelimeler = 10 To 1 Step -1 ' 10’dan başlayarak azalan döngü.
    For Karakterler = 0 To 9 ' 0’dan başlayarak artan döngü.
    YeniText = YeniText & Karakterler ' YeniText stringi oluşturuluyor.
    Next Karakterler
    YeniText = YeniText & " " ' Kelimeler arası bir boşluk ekleniyor.
    Next Kelimeler
    4. While..Wend
    Ön-denetimli bir koşullu döngü biçimidir:
    While <koşul ifadesi>
    [deyimler]
    Wend
    Örnek:
    Dim Sayac
    Sayac = 0
    While Sayac < 20
    Sayac = Sayac + 1
    Wend







    SUB PROSEDÜRLER
    Sadece veri girişi yapılabilen altprogramlardır. Genel sözdizimleri aşağıdaki gibidir:
    [Private | Public | Friend] [Static] Sub <Prosedür Adı> [(parametreler)]
    [deyimler]
    [Exit Sub]
    [deyimler]
    End Sub
    Hazırlanan bir sub prosedürü sadece adı ve parametreleri kullanılarak ya da
    Call <Prosedür Adı> (parametreler)
    bildirimi ile çağrılabilir.
    NOT : Sözdizimde yer alan öntakılar için bakınız: Fonksiyonlar.
    Örnek:
    ‘Dikdörtgenin alanı hesaplanıyor:
    Sub DikdörtgenAlan(Uzunluk, Yukseklik)
    Dim Alan As Double ' Lokal değişken.
    If Uzunluk = 0 Or Yukseklik = 0 Then
    Exit Sub
    End If
    Alan = Yukseklik * Uzunluk
    MsgBox Alan
    End Sub
    ‘Formu ekrana göre ortalayan altprogram:
    Sub CenterForm(frm as Form) ‘Parametre olarak Form nesnesi türünde tanımlanmış
    ‘frm değişkeni kullanılıyor.
    frm.left=(screen.Width-frm.Width)/2 ‘Formun sol kenar konumu, ekran genişliği ile
    ‘formun genişliğinin farkının yarısı oluyor. (form,
    ‘ekranın yatay-ortasına göre ortalanıyor)
    frm.top=(screen.Height-frm. Height)/2 ‘Formun üst kenar konumu,ekran yüksekliği ile
    ‘formun yüksekliğinin farkının yarısı oluyor.
    ‘(form,ekranın dikey-ortasına göre ortalanıyor)
    End Sub
    HESAP MAKİNESİ V1.0
    Bu kesimde genel bir hesap makinesi uygulaması geliştireceğiz. Bu uygulamada amaç, TextBox ve CommandButton kontrollerinin etkin olarak kullanımları üzerinde daha fazla pratik yapmaktır. Uygulamamız, genel görünümü aşağıda verilen bir tek forma sahip olacaktır:
    Önbilgiler
    String İşlemleri
    String türü bilgiler üzerinde çeşitli işlemler gerçekleştiren bazı önemli fonksiyonlar aşağıda verilmiştir:
    LSet stringvar = string; varname1 = varname2 : String değişkenler arasında sola dayalı olarak aktarma yapar.
    Örnek:
    Dim DnmStr
    DnmStr = "0123456789" ' String değişkenin ilk değeri.
    Lset DnmStr = "<-Sola"
    RSet stringvar = string; varname1 = varname2 : String değişkenler arasında sağa dayalı olarak aktarma yapar.
    InStr([başlangıç, ]string1, string2[, AramaModu]) : string1 içersinde string2 nin ilk bulunuş pozisyonunu verir.
    Örnek:
    Dim ArananString, ArananKarakter, Pozisyon
    ArananString ="XXpXXpXXPXXP" .
    ArananKarakter = "P"
    Pozisyon = Instr(4, ArananString, ArananKarakter, 1) ‘4 ten itibaren metinsel (textual) arama yapar. Sonuç:6
    Pozisyon = Instr(1, ArananString, ArananKarakter, 0) ‘1 den itibaren ikili (binary) arama yapar. Sonuç :9
    Pozisyon = Instr(ArananString, ArananKarakter) ' Varsayılan arama modu ikili aramadır. Sonuç:9.
    Pozisyon = Instr(1, ArananString, "W") ' Sonuç: 0.
    & Operatörü : İki stringin birleştirilmesinde kullanılır.
    Asc(string) : Eğer string birden çok karakterden oluşuyorsa ilk karakterin ASCII değerini verir.
    Örnek:
    Dim Sayi
    Sayi = Asc("A") ' Sonuç: 65.
    Sayi = Asc("a") ' Sonuç: 97.
    Sayi = Asc("Alfabe") ' Sonuç: 65.
    Chr(kod) : Koda karşılık gelen karakteri verir.
    Str(sayı) : Sayıyı string türüne dönüştürür.
    Val(string) : String bilgiyi sayısal bilgiye dönüştürür.
    Left(string, uzunluk) : stringin soldan uzunluk sayıda karakterin oluşturduğu parçasını verir.
    Örnek:
    Dim String1, String2
    String1 = "Merhaba Dünya"
    String2 = Left(String1, 1) ' Sonuç: "M".
    String2 = Left(String1, 7) ' Sonuç: "Merhaba".
    String2 = Left(String1, 20) ' Sonuç: "Merhaba Dünya".
    Right(string, uzunluk) : stringin sağdan uzunluk sayıda karakterin oluşturduğu parçasını verir.
    Len(string) : stringin karakter sayısını verir.
    LTrim(string), RTrim(string), Trim(string) : Sırasıyla string içersinde yer alan boşluklardan soldakileri, sağdakileri, sol ve sağdakileri elimine ederler.
    Mid(string, başlangıç[, uzunluk]) : string içersinden, başlangıç pozisyonundan itibaren uzunluk sayıda karakterin oluşturduğu stringi verir.
    Mid(string1, başlangıç[, uzunluk]) = string2 : string1 içersinde, başlangıç pozisyonundan itibaren uzunluk sayıda karakterin yerine string2 yi aktarır.
    Örnek:
    Dim yazi
    yazi = "Duvardan köpek atladı"
    Mid(yazi, 10, 5) = "tilki" ' yazi = "Duvardan tilki atladı".
    Space(sayı) : Belirtilen sayı kadar boşluk karakteri içeren boş string üretir.
    String(sayı, karakter) : Belirtilen karakteri belirtilen sayı kadar tekrarlı olarak içeren string üretir.
    Örnek:
    Dim Str1
    Str1 = String(5, "*") ' Sonuç: "*****".
    Str1 = String(5, 42) ' Sonuç: "*****".
    Str1 = String(10, "ABC") ' Sonuç: "AAAAAAAAAA".
    Veri Türleri Dönüşüm Fonksiyonları
    CBool(ifade)
    CByte(ifade)
    CCur(ifade)
    CDate(ifade)
    CDbl(ifade)
    CDec(ifade)
    CInt(ifade)
    CLng(ifade)
    CSng(ifade)
    CVar(ifade)
    CStr(ifade)
    Açıklamalı Kodlar
    Dim sayi, Bellek1, Bellek2, Bellek3, Bellek4 As Double
    Dim TusaBasildi As Byte
    Dim Arti, Eksi, Carpi, Bol, Kuvvet, Ondalik As Boolean Değişken tanımlamaları.
    Private Sub Btn0_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "0"
    Else
    TxtEkran.Text = "0"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "0"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "0"
    End If
    End If
    If LbBilgiEkr.Caption="E" Then LbBilgiEkr.Caption=""
    End Sub 0 (Sıfır) butonuna basılıyor. TusaBasildi değişkeni herhangi bir aritmetik işlem butonuna basılıp basılmadığını belirliyor. (0=basılmamış, 1=basılmış) Ondalik boolean değişkeni ise ondalık düğmesine basılıp basılmadığını belirliyor. (T=basılmış, F=basılmamış) Kod iki ana durum altında inceleniyor: Arit.işlem tuşuna basılmış ya da basılmamış. Eğer basılmamışsa ondalık tuşunun da durumuna göre ekrana yeni bir 0 ekleniyor veya doğrudan 0 aktarılıyor. Eğer basılmışsa yine ondalık tuşunun durumuna göre ekrana yeni bir 0 ekleniyor veya ekrandaki mevcut sayı sayi değişkenine alınarak ekrana doğrudan 0 aktarılıyor. Son olarak, eğer bilgi ekranında E (Hata) varsa bu kaldırılıyor.
    Private Sub BtnAE_Click()
    TxtEkran.Text = -1 * CDbl(TxtEkran.Text)
    If LbBilgiEkr.Caption="E" Then LbBilgiEkr.Caption=""
    End Sub Art-Eksi butonuna basılıyor. Ekrandaki değer –1 ile çarpılıyor ve eğer bilgi ekranında E (Hata) varsa bu kaldırılıyor.

    Private Sub BtnAl1_Click()
    If CDbl(TxtEkran.Text) <> 0 Then
    Bellek1 = CDbl(TxtEkran.Text)
    BtnAl1.BackColor = QBColor(12)
    End If
    End Sub
    İlk bellek hücresine veri giriş butonuna basılıyor. Eğer ekrandaki değer sıfırdan farklıysa Bellek1 değişkenine ekrandaki string değer double türüne dönüştürülerek yerleştiriliyor. Bunun ardından butonun rengi kırmızı yapılıyor.
    Private Sub BtnBellekTmz_Click()
    Bellek1 = 0
    Bellek2 = 0
    Bellek3 = 0
    Bellek4 = 0
    BtnAl1.BackColor = QBColor(10)
    BtnAl2.BackColor = QBColor(10)
    BtnAl3.BackColor = QBColor(10)
    BtnAl4.BackColor = QBColor(10)
    End Sub Bellek temizleme butonuna basılıyor. Tüm bellek değişkenleri sıfırlanıyor ve veri giriş butonları tekrar ilk renklerine (yeşil) dönüştürülüyor.
    Private Sub BtnTopla_Click()
    TusaBasildi = 1
    Arti = True
    Ondalik = False
    LbBilgiEkr.Caption = "+"
    End Sub Aritmetik işlem butonlarına basılıyor. Her tuş için kendisine ait boolean değişken True oluyor, bilgi ekranına basılan tuşun etiketi aktarılıyor ve TusaBasildi ile Ondalik değişkenleri uygun değerleri alıyor.
    Private Sub BtnC_Click()
    TxtEkran.Text = 0
    TusaBasildi = 0
    Ondalik = False
    LbBilgiEkr.Caption = ""
    End Sub Tam Silme butonuna basılıyor. Tüm değerler sıfırlanıyor.
    Private Sub BtnCE_Click()
    TxtEkran.Text = 0
    Ondalik = False
    LbBilgiEkr.Caption = ""
    End Sub Kısmi Silme butonuna basılıyor. TusaBasildi hariç tüm değerler sıfırlanıyor. Dolayısıyla işlem ve işlemden önceki sayı korunmuş oluyor.
    Private Sub BtnDel_Click()
    If CDbl(TxtEkran.Text) <> 0 Then
    If Len(TxtEkran.Text) = 1 Or (Len(TxtEkran.Text) = 2 And Left(TxtEkran.Text, 1) = "-") Then
    TxtEkran.Text = 0
    Else
    TxtEkran.Text = Left(TxtEkran.Text, Len(TxtEkran.Text) - 1)
    End If
    End If
    LbBilgiEkr.Caption = ""
    End Sub Sağdan-Silme butonuna basılıyor. Kod eğer ekrandaki text sıfırdan farklıysa çalışıyor. İki durumda inceleniyor: Eğer ekranda tek karakter kaldıysa ya da tek karakterli negatif bir sayı kaldıysa (-3 gibi) doğrudan sıfıra indirgeniyor. Aksi durumlarda ekrandaki karakterler sağdan birer birer siliniyor.



    Private Sub BtnEsit_Click()
    If Arti Then
    TxtEkran.Text = sayi + CDbl(TxtEkran.Text)
    Arti = False
    ElseIf Eksi Then
    TxtEkran.Text = sayi - CDbl(TxtEkran.Text)
    Eksi = False
    ElseIf Carpi Then
    TxtEkran.Text = sayi * CDbl(TxtEkran.Text)
    Carpi = False
    ElseIf Bol Then
    If CDbl(TxtEkran.Text) = 0 Then
    LbBilgiEkr.Caption = "E"
    Else
    TxtEkran.Text = sayi / CDbl(TxtEkran.Text)
    End If
    Bol = False
    ElseIf Kuvvet Then
    TxtEkran.Text = sayi ^ CDbl(TxtEkran.Text)
    Kuvvet = False
    End If
    TusaBasildi = 1
    Ondalik = False
    LbBilgiEkr.Caption = ""
    End Sub Eşittir butonuna basılıyor. Daha önce basılan arit.işlem butonuna göre işlemden önceki sayı ve o an ekranda bulunan sayı işleme sokuluyor.
    Bölme işleminde, sıfıra bölünme hatası algılanıyor ve bilgi ekranına hata işareti (E) basılıyor.
    Private Sub BtnOff_Click()
    Unload Me
    End Sub Off butonuna basılıyor. Form geri-yükleniyor.
    Private Sub BtnOndlk_Click()
    If Not Ondalik Then
    Ondalik = True
    If TusaBasildi = 0 Then
    TxtEkran.Text = TxtEkran.Text & ","
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "0,"
    End If
    End If
    End Sub Ondalık butonuna basılıyor. Kod eğer daha önce bu butona basılmadıysa çalışıyor. Aritmetik işlem butonuna basılmışsa sayı ekrandan alınıyor (işlemde kullanılmak üzere) ve ekrana “0,” basılıyor. Aksi durumda ekrandaki değer “,” ekleniyor.
    Private Sub BtnSqrt_Click()
    TusaBasildi = 1
    If CDbl(TxtEkran.Text) < 0 Then
    LbBilgiEkr.Caption = "E"
    Else
    TxtEkran.Text = Sqr(CDbl(TxtEkran.Text))
    End If
    If LbBilgiEkr.Caption<>"E" Then LbBilgiEkr.Caption=""
    End Sub Karekök butonuna basılıyor. Eğer ekrandaki sayı negatifse bilgi ekranına hata işareti basılıyor. Aksi durumda ekrandaki sayının karekökü hesaplanıp yine ekrana aktarılıyor.

    Private Sub BtnVer1_Click()
    If Bellek1 <> 0 Then
    If TusaBasildi = 0 Then
    TxtEkran.Text = Bellek1
    Else
    sayi = CDbl(TxtEkran.Text)
    TusaBasildi = 0
    TxtEkran.Text = Bellek1
    End If
    End If
    TusaBasildi = 1
    End Sub İlk bellek hücresine veri çıkış butonuna basılıyor. Kod, hücredeki değer sıfırdan farklıysa iki durumda çalışıyor: Eğer aritmetik işlem tuşuna basılmamıisa ekrana Bellek1 değişkenindeki değer yerleştiriliyor. Aksi durumda ekrandaki değer sayı değişkenine alınıyor ve ekrana Bellek1 değişkenindeki değer yerleştiriliyor.
    Private Sub BtnX_Click()
    TusaBasildi = 1
    If CDbl(TxtEkran.Text) = 0 Then
    LbBilgiEkr.Caption = "E"
    Else
    TxtEkran.Text = 1 / CDbl(TxtEkran.Text)
    End If
    If LbBilgiEkr.Caption<>"E" Then LbBilgiEkr.Caption=""
    End Sub 1/x butonuna basılıyor. Ekrandaki değer sıfırdan farklıysa 1/değer hesaplanıp tekrar ekrana aktarılıyor. Aksi durumda bilgi ekranına hata işareti (E) basılıyor.
    Private Sub BtnX2_Click()
    TusaBasildi = 1
    TxtEkran.Text = CDbl(TxtEkran.Text) ^ 2
    LbBilgiEkr.Caption = ""
    End Sub x^2 butonuna basılıyor. Ekrandaki değerin karesi hesaplanıp tekrar ekrana aktarılıyor.
    Kodun Tamamı
    Dim sayi, Bellek1, Bellek2, Bellek3, Bellek4 As Double
    Dim TusaBasildi As Byte
    Dim Arti, Eksi, Carpi, Bol, Kuvvet, Ondalik As Boolean

    Private Sub Btn0_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "0"
    Else
    TxtEkran.Text = "0"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "0"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "0"
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub
    Private Sub Btn1_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "1"
    Else
    TxtEkran.Text = "1"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "1"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "1"
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub Btn2_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "2"
    Else
    TxtEkran.Text = "2"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "2"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "2"
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub Btn3_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "3"
    Else
    TxtEkran.Text = "3"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "3"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "3"
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub Btn4_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "4"
    Else
    TxtEkran.Text = "4"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "4"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "4"
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub Btn5_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "5"
    Else
    TxtEkran.Text = "5"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "5"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "5"
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub Btn6_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "6"
    Else
    TxtEkran.Text = "6"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "6"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "6"
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub Btn7_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "7"
    Else
    TxtEkran.Text = "7"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "7"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "7"
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub Btn8_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "8"
    Else
    TxtEkran.Text = "8"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "8"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "8"
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub Btn9_Click()
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "9"
    Else
    TxtEkran.Text = "9"
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & "9"
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "9"
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnAE_Click()
    TxtEkran.Text = -1 * CDbl(TxtEkran.Text)
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnAl1_Click()
    If CDbl(TxtEkran.Text) <> 0 Then
    Bellek1 = CDbl(TxtEkran.Text)
    BtnAl1.BackColor = QBColor(12)
    End If
    End Sub

    Private Sub BtnAl2_Click()
    If CDbl(TxtEkran.Text) <> 0 Then
    Bellek2 = CDbl(TxtEkran.Text)
    BtnAl2.BackColor = QBColor(12)
    End If
    End Sub

    Private Sub BtnAl3_Click()
    If CDbl(TxtEkran.Text) <> 0 Then
    Bellek3 = CDbl(TxtEkran.Text)
    BtnAl3.BackColor = QBColor(12)
    End If
    End Sub

    Private Sub BtnAl4_Click()
    If CDbl(TxtEkran.Text) <> 0 Then
    Bellek4 = CDbl(TxtEkran.Text)
    BtnAl4.BackColor = QBColor(12)
    End If
    End Sub

    Private Sub BtnBellekTmz_Click()
    Bellek1 = 0
    Bellek2 = 0
    Bellek3 = 0
    Bellek4 = 0
    BtnAl1.BackColor = QBColor(10)
    BtnAl2.BackColor = QBColor(10)
    BtnAl3.BackColor = QBColor(10)
    BtnAl4.BackColor = QBColor(10)
    End Sub

    Private Sub BtnBol_Click()
    TusaBasildi = 1
    Bol = True
    Ondalik = False
    LbBilgiEkr.Caption = "/"
    End Sub

    Private Sub BtnC_Click()
    TxtEkran.Text = 0
    TusaBasildi = 0
    Ondalik = False
    LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnCarp_Click()
    TusaBasildi = 1
    Carpi = True
    Ondalik = False
    LbBilgiEkr.Caption = "x"
    End Sub

    Private Sub BtnCikar_Click()
    TusaBasildi = 1
    Eksi = True
    Ondalik = False
    LbBilgiEkr.Caption = "-"
    End Sub

    Private Sub BtnDel_Click()
    If CDbl(TxtEkran.Text) <> 0 Then
    If Len(TxtEkran.Text) = 1 Or (Len(TxtEkran.Text) = 2 And Left(TxtEkran.Text, 1) = "-") Then
    TxtEkran.Text = 0
    Else
    TxtEkran.Text = Left(TxtEkran.Text, Len(TxtEkran.Text) - 1)
    End If
    End If
    LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnEsit_Click()
    If Arti Then
    TxtEkran.Text = sayi + CDbl(TxtEkran.Text)
    Arti = False
    ElseIf Eksi Then
    TxtEkran.Text = sayi - CDbl(TxtEkran.Text)
    Eksi = False
    ElseIf Carpi Then
    TxtEkran.Text = sayi * CDbl(TxtEkran.Text)
    Carpi = False
    ElseIf Bol Then
    If CDbl(TxtEkran.Text) = 0 Then
    LbBilgiEkr.Caption = "E"
    Else
    TxtEkran.Text = sayi / CDbl(TxtEkran.Text)
    End If
    Bol = False
    ElseIf Kuvvet Then
    TxtEkran.Text = sayi ^ CDbl(TxtEkran.Text)
    Kuvvet = False
    End If
    TusaBasildi = 1
    Ondalik = False
    LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnOff_Click()
    Unload Me
    End Sub

    Private Sub BtnOndlk_Click()
    If Not Ondalik Then
    Ondalik = True
    If TusaBasildi = 0 Then
    TxtEkran.Text = TxtEkran.Text & ","
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "0,"
    End If
    End If
    End Sub

    Private Sub BtnSqrt_Click()
    TusaBasildi = 1
    If CDbl(TxtEkran.Text) < 0 Then
    LbBilgiEkr.Caption = "E"
    Else
    TxtEkran.Text = Sqr(CDbl(TxtEkran.Text))
    End If
    If LbBilgiEkr.Caption <> "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnTopla_Click()
    TusaBasildi = 1
    Arti = True
    Ondalik = False
    LbBilgiEkr.Caption = "+"
    End Sub

    Private Sub BtnCE_Click()
    TxtEkran.Text = 0
    Ondalik = False
    LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnVer1_Click()
    If Bellek1 <> 0 Then
    If TusaBasildi = 0 Then
    TxtEkran.Text = Bellek1
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = 0
    TusaBasildi = 0
    TxtEkran.Text = Bellek1
    End If
    End If
    TusaBasildi = 1
    End Sub

    Private Sub BtnVer2_Click()
    If Bellek2 <> 0 Then
    If TusaBasildi = 0 Then
    TxtEkran.Text = Bellek2
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = 0
    TusaBasildi = 0
    TxtEkran.Text = Bellek2
    End If
    End If
    TusaBasildi = 1
    End Sub

    Private Sub BtnVer3_Click()
    If Bellek3 <> 0 Then
    If TusaBasildi = 0 Then
    TxtEkran.Text = Bellek3
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = 0
    TusaBasildi = 0
    TxtEkran.Text = Bellek3
    End If
    End If
    TusaBasildi = 1
    End Sub

    Private Sub BtnVer4_Click()
    If Bellek4 <> 0 Then
    If TusaBasildi = 0 Then
    TxtEkran.Text = Bellek4
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = 0
    TusaBasildi = 0
    TxtEkran.Text = Bellek4
    End If
    End If
    TusaBasildi = 1
    End Sub

    Private Sub BtnX_Click()
    TusaBasildi = 1
    If CDbl(TxtEkran.Text) = 0 Then
    LbBilgiEkr.Caption = "E"
    Else
    TxtEkran.Text = 1 / CDbl(TxtEkran.Text)
    End If
    If LbBilgiEkr.Caption <> "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnX2_Click()
    TusaBasildi = 1
    TxtEkran.Text = CDbl(TxtEkran.Text) ^ 2
    LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnXY_Click()
    TusaBasildi = 1
    Kuvvet = True
    LbBilgiEkr.Caption = "^"
    Ondalik = False
    End Sub

    Private Sub Form_Load()
    TxtEkran.Text = 0
    TusaBasildi = 0
    Arti = False
    Eksi = False
    Carpi = False
    Bol = False
    Ondalik = False
    Bellek1 = 0
    Bellek2 = 0
    Bellek3 = 0
    Bellek4 = 0
    End Sub

    HESAP MAKİNESİ V1.1 : HESAPLAMADA HIZIN YENİ ADI !
    Hesap makinemizin bu yeni versiyonunda görünüm ve işlev olarak önemli bir değişiklik yapmıyoruz. Ancak sloganımıza da uygun olarak kodlarda oldukça kısalık sağlayacak, dolayısıyla çalışabilir program kodunu (exe) önemli ölçüde küçültecek ve çalışma-zamanı hızını artıracak bazı modifikasyonlar yapacağız.
    Bunlar iki grupta toplayabiliriz:
    • Kontrol Dizileri (Control Arrays)
    • Hata Algılayıcı (On Error .. GoTo)
    Kontrol Dizileri (Control Arrays)
    Kontrol dizileri, benzer koda sahip kontrol nesnelerinin bir sayı ile indekslenerek, olay kodlarının tek bir sub içersinde verilmesine olanak sağlarlar. Bu sayı, Index adlı ilk değeri sıfır olan bir değişkende tutulur. Örneğin BtnSayilar adlı bir CommandButton kontrol nesnesi eğer bir kontrol dizisi haline getirilirse, BtnSayilar(0), BtnSayilar(1), ..., BtnSayilar(n) biçiminde n-tane kontrol nesnesi elde ederiz.
    Bir Kontrol Dizisini Nasıl Yaratırım?
    Kontrol dizilerini yaratmanın en pratik yöntemi, dizi haline getirilecek kontrol nesnesinin kopyalanıp tekrar yapıştırılmasıdır. Bu yapıldığında aşağıdaki mesajı içeren bir mesaj kutusu ile karşılaşırız:
    You already have a control named ‘BtnSayilar’. Do you want to create a control array?
    Bize, BtnSayilar adlı bir kontrol nesnemizin zaten varolduğu ve bir kontrol dizisi yaratmak isteyip istemediğimiz sorulmaktadır. Eğer cevabımız hayır ise yapıştırılan, BtnSayilar kontrolünden bağımsız yeni bir nesne olacaktır. Aksi durumda ise BtnSayilar otomatik olarak indekslenerek BtnSayilar(0), yapıştırılan yeni nesne de BtnSayilar(1) olarak adlandırılacaktır.
    Gelelim bizim uygulamamıza...
    Hesap makinemizin aşağıda verilen butonları, birbirlerine oldukça benzer olay kodlarına sahiptirler:
    • Sayı butonları. (Btn0, Btn1, ..., Btn9)
    • Aritmetik işlem butonları (BtnTopla, BtnCikar, BtnCarp, BtnBol, BtnXY)
    • Fonksiyon butonları (BtnSqrt, BtnX, BtnX2)
    • Bellek Giriş butonları (BtnAl1, ..., BtnAl4)
    • Bellek Çıkış butonları (BtnVer1, ..., BtnVer4)
    Dolayısıyla bu buton gruplarının her birini birer kontrol dizisi hailen getirebiliriz. Aşağıdaki resimde bu kontrol dizileri gösterilmiştir:


    Kontrol dizilerinde yer alan her bir buton birbirinden Index değişkeni ile ayrılmaktadır. Örneğin, BtnSayi(2)_Click olayı 2 butonuna basıldığı anda, BtnFonk(2)_Click olayı ise 1/x butonuna basıldığı anda oluşacaktır.
    On Error .. GoTo
    Bir prosedür içersinde herhangi bir hata oluştuğunda programın davranışını belirlemek için kullanılır. Üç farklı sözdizimi vardır:
    On Error GoTo <satır adı> : Hata durumunda kodun akışını belirtilen satıra yönlendirir.
    On Error Resume Next : Hata durumunda kodun akışını hatanın oluştuğu deyimden sonraki deyime geçirir.
    On Error GoTo 0 : Söz konusu prosedür için hata algılayıcısını kapatır.
    On Error ile yakalanan hata, Err nesnesi kullanılarak saptanabilir. Hata oluştuğunda Err nesnesinin Number özelliği hatanın kodunu gösteren sayısal bir değer alır.
    Biz uygulamamızda iki tip hatayı bu yöntemleri kullanarak yakaladık ve bilgi ekranımızda hata mesajı (E) verdirdik: sıfıra bölme ve negatif sayıların karekökü. (Bu hataların kodları sırasıyla 11 ve 5’tir.) Böylece her durum için (paydanın sıfır olup olmadığı, karekökü alıncak sayının negatif olup olmadığı gibi) gereksiz denetimler yapmaktan kurtulmuş olduk.
    Uyarılar&Açıklamalar
    “On Error Resume Next” her nekadar çoğunlukla programcının sihirli değneği konumunda da olsa aslında oldukça tehlikeli bir komuttur. Koda “hata ne olursa olsun sen bir sonraki deyimden devam et” demek, sizin de takdir edeceğiniz gibi pekte profesyonel bir yaklaşım olmasa gerek...!
    Oluşan hatanın kodunu öğrenmenin pratik bir yolu vardır. Hatanın oluştuğu görüldükten ve hataya sebep olan prosedür belirlendikten sonra o prosedürün başına yerleştirilecek On Error GoTo ile yönlendirme yapılan satırda şu fonksiyonu yazmak yeterli olacaktır:
    MsgBox Err.Number
    Hesap Makinesi V1.1 - Kodun Tamamı
    Dim sayi, Bellek(3) As Double
    Dim TusaBasildi As Byte
    Dim Arti, Eksi, Carpi, Bol, Kuvvet, Ondalik As Boolean

    Private Sub BtnAE_Click()
    TxtEkran.Text = -1 * CDbl(TxtEkran.Text)
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnBellekTmz_Click()
    For j = 0 To 3
    Bellek(j) = 0
    BtnGirdi(j).BackColor = QBColor(10)
    Next j
    End Sub

    Private Sub BtnC_Click()
    TxtEkran.Text = 0
    TusaBasildi = 0
    Ondalik = False
    LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnCikti_Click(Index As Integer)
    If Bellek(Index) <> 0 Then
    If TusaBasildi = 0 Then
    TxtEkran.Text = Bellek(Index)
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = 0
    TusaBasildi = 0
    TxtEkran.Text = Bellek(Index)
    End If
    End If
    TusaBasildi = 1
    End Sub

    Private Sub BtnDel_Click()
    If CDbl(TxtEkran.Text) <> 0 Then
    If Len(TxtEkran.Text) = 1 Or (Len(TxtEkran.Text) = 2 And Left(TxtEkran.Text, 1) = "-") Then
    TxtEkran.Text = 0
    Else
    TxtEkran.Text = Left(TxtEkran.Text, Len(TxtEkran.Text) - 1)
    End If
    End If
    LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnEsit_Click()
    On Error GoTo HATA
    If Arti Then
    TxtEkran.Text = sayi + CDbl(TxtEkran.Text)
    Arti = False
    ElseIf Eksi Then
    TxtEkran.Text = sayi - CDbl(TxtEkran.Text)
    Eksi = False
    ElseIf Carpi Then
    TxtEkran.Text = sayi * CDbl(TxtEkran.Text)
    Carpi = False
    ElseIf Bol Then
    TxtEkran.Text = sayi / CDbl(TxtEkran.Text)
    Bol = False
    ElseIf Kuvvet Then
    TxtEkran.Text = sayi ^ CDbl(TxtEkran.Text)
    Kuvvet = False
    End If
    TusaBasildi = 1
    Ondalik = False
    LbBilgiEkr.Caption = ""
    HATA:
    If Err.Number = 11 Then LbBilgiEkr.Caption = "E"
    End Sub

    Private Sub BtnFonk_Click(Index As Integer)
    On Error GoTo HATA
    TusaBasildi = 1
    If LbBilgiEkr.Caption <> "E" Then LbBilgiEkr.Caption = ""
    Select Case Index
    Case 0: TxtEkran.Text = Sqr(CDbl(TxtEkran.Text))
    Case 1: TxtEkran.Text = CDbl(TxtEkran.Text) ^ 2
    Case 2: TxtEkran.Text = 1 / CDbl(TxtEkran.Text)
    End Select
    HATA:
    If Err.Number = 11 Or Err.Number = 5 Then LbBilgiEkr.Caption = "E"
    ' 11 :Sıfıra bölme, 5: negatif karekök.
    End Sub

    Private Sub BtnGirdi_Click(Index As Integer)
    If CDbl(TxtEkran.Text) <> 0 Then
    Bellek(Index) = CDbl(TxtEkran.Text)
    BtnGirdi(Index).BackColor = QBColor(12)
    End If
    End Sub
    Private Sub BtnIslem_Click(Index As Integer)
    TusaBasildi = 1
    Ondalik = False
    Select Case Index
    Case 0: Arti = True
    LbBilgiEkr.Caption = "+"
    Case 1: Eksi = True
    LbBilgiEkr.Caption = "-"
    Case 2: Carpi = True
    LbBilgiEkr.Caption = "x"
    Case 3: Bol = True
    LbBilgiEkr.Caption = "/"
    Case 4: Kuvvet = True
    LbBilgiEkr.Caption = "^"
    End Select
    End Sub

    Private Sub BtnOff_Click()
    Unload Me
    End Sub

    Private Sub BtnOndlk_Click()
    If Not Ondalik Then
    Ondalik = True
    If TusaBasildi = 0 Then
    TxtEkran.Text = TxtEkran.Text & ","
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = "0,"
    End If
    End If
    End Sub

    Private Sub BtnSayi_Click(Index As Integer)
    If TusaBasildi = 0 Then
    If CDbl(TxtEkran.Text) <> 0 Or Ondalik Then
    TxtEkran.Text = TxtEkran.Text & Index
    Else
    TxtEkran.Text = Index
    End If
    Else
    TusaBasildi = 0
    If Ondalik Then
    TxtEkran.Text = TxtEkran.Text & Index
    Else
    sayi = CDbl(TxtEkran.Text)
    TxtEkran.Text = Index
    End If
    End If
    If LbBilgiEkr.Caption = "E" Then LbBilgiEkr.Caption = ""
    End Sub

    Private Sub BtnCE_Click()
    TxtEkran.Text = 0
    Ondalik = False
    LbBilgiEkr.Caption = ""
    End Sub

    Private Sub Form_Load()
    TxtEkran.Text = 0
    TusaBasildi = 0
    Arti = False
    Eksi = False
    Carpi = False
    Bol = False
    Ondalik = False
    For j = 0 To 3
    Bellek(j) = 0
    Next j
    End Sub

    MESAJ KUTUSU FONKSİYONU (MsgBox)
    Kullanıcıya bir diyalog penceresi ile bir mesaj iletir, kullanıcı pencerede yer alan ilgili butona basıncaya kadar bekler ve kullanıcının hangi butona bastığını bize sayısal bir değerle geri döndürür. İki türlü kullanılabilir:
    1. Basit Kullanım:
    MsgBox “Mesaj metni”
    Üzerinde sadece Tamam butonu olan ve bizim yazdığımız mesaj metnini kullanıcıya ileten diyalog penceresini açar.
    2. İleri Düzeyde Kullanım:
    MsgBox(“mesaj metni”[,butonlar][,“başlık metni”][,yardım dosyası,indeks])
    “mesaj metni” : Yazılması zorunlu. Mesajın içeriğini belirten max. 1024 karakter string ifade.
    butonlar : Zorunlu değil. Pencerede yer alacak butonlar ve pencere resmi gibi görsel ve işlevsel detayları belirten sabitler toplamı.
    “başlık metni” : Zorunlu değil. Pencere başlığına yazılacak metni belirleyen string ifade.
    yardım dosyası: Zorunlu değil. Pencere aktif iken F1 tuşuna basıldığında açılacak indeksli yardım dosyasının yolu ve adı.
    indeks : Açılan yardım dosyasında ilgili yardımın indeks numarası.
    butonlar Parametresi için Sabit Tanımları
    Sabit Değer Açıklama
    vbOKOnly 0 Sadece TAMAM butonu görüntülenir.
    vbOKCancel 1 TAMAM ve İPTAL butonları görüntülenir.
    vbAbortRetryIgnore 2 VAZGEÇ, TEKRAR DENE ve ATLA butonları görüntülenir.
    vbYesNoCancel 3 EVET, HAYIR ve İPTAL butonları görüntülenir.
    vbYesNo 4 EVET ve HAYIR butonları görüntülenir.
    vbRetryCancel 5 TEKRAR DENE ve İPTAL butonları görüntülenir.
    vbCritical 16 Hata simgesi görüntülenir.
    vbQuestion 32 Soru işareti simgesi görüntülenir.
    vbExclamation 48 Uyarı simgesi görüntülenir.
    vbInformation 64 Bilgi simgesi görüntülenir.
    vbDefaultButton1 0 İlk buton geçerli. (Seçili durumda)
    vbDefaultButton2 256 İkinci buton geçerli.
    vbDefaultButton3 512 Üçüncü buton geçerli.
    vbDefaultButton4 768 Dördüncü buton geçerli.
    vbApplicationModal 0 Uygulama modeli; Kullanıcı o an kullanmakta olduğu uygulamaya devam edebilmek için mesaj kutusunu yanıtlamalı.
    vbSystemModal 4096 Sistem modeli; Kullanıcı mesaj kutusunu yanıtlayıncaya kadar çalışır durumda olan tüm uygulamalar durdurulur.
    vbMsgBoxHelpButton 16384 Mesaj kutusuna Yardım butonu ekler.
    VbMsgBoxSetForeground 65536 Mesaj kutusu penceresini ön cephe (foreground) penceresi olarak belirler.
    vbMsgBoxRight 524288 Mesaj metni sağa dayalı.
    vbMsgBoxRtlReading 1048576 Mesaj metni sağdan sola doğru yazılır. (Arabik sistem)
    Örnek Uygulama : Kimlik Bilgileri Veri Giriş Ekranı
    Bu uygulamada nüfus cüzdanı bilgilerinin girilebileceği bir veri giriş formu tasarlayacağız. Bazı alanlar bilgi girilmesi zorunlu alanlar olarak belirlenecek. Henüz veritabanı bilgimiz olmadığından kaydetme işlemi yapmayacağız. Ama formumuzda yer alan Kaydet ve Kapat düğmelerine yazacağımız kodlar, aşağıdaki işlemleri gerçekleştirecek:
    Kaydet Düğmesi :
    Basıldığında ilk olarak zorunlu alanlar denetlenecek ve eğer bunlardan en az birisi boş bırakılmış ise kullanıcı, üzerinde hata simgesi ve Tamam butonu bulunan bir mesaj kutusu ile uyarılacak.
    Eğer zorunlu alanların hepsi dolu ise kaydetme işleminin gerçekleştirildiğine dair, üzerinde bilgi simgesi ve Tamam butonu bulunan bir mesaj kutusu açılacak ve kullanıcı Tamam’a basınca formdaki tüm alanlar ilk haline getirilecek. (Form bir sonraki bilgi girişine hazırlanacak.)
    Kapat Düğmesi :
    Eğer zorunlu alanlar doldurulmuş ve Kaydet düğmesine basılmadan Kapat’a basılmış ise kullanıcıya, üzerinde uyarı simgesi ile Evet ve Hayır butonları bulunan, bilgileri kaydetmeden formu kapatmaya çalıştığını belirten ve kaydetmeyi isteyip istemediğini soran bir mesaj kutusu açılacak. Kullanıcının verdiği cevap evet ise yine kaydetme işleminin gerçekleştirildiğine dair, üzerinde bilgi simgesi ve Tamam butonu bulunan bir mesaj kutusu açılacak ve kullanıcı Tamam’a bastığında form kapanacak. Hayır ise hiçbir mesaj gelmeden form doğrudan kapanacak.
    Aksi durumda, yani zorunlu alanların hepsi doldurulmamış ya da Kaydet düğmesine zaten basılmış ise form doğrudan kapanacak.
    Alanlarla İlgili Açıklamalar :
    Form üzerinde yer alan Ad, Soyad, Baba adı gibi alanlar TextBox olabilir. Ancak Medeni hal, Kan grubu vb. alanlar çoktan seçimli alan tiplerinden (ComboBox, ListBox, OptionButton) seçilmelidir.
    Tarih alanı ise formatta bütünlük sağlamak açısından kullanıcıyı sınırlayacak şekilde (Gün, Ay ve Yıl ayrı alanlar şeklinde gibi) düşünülmelidir.
    Nüfusa kayıtlı olduğu il bir çoktan seçimli alandan seçildikten sonra ilçeye ait çoktan seçimli alan, o ilin ilçe adları ile doldurulacaktır.
    ÖNEMLİ NOT : Birbirleriyle uyumlu olarak çalışan OptionButton’lar yaratmak için. bunlar birbirleri ile gruplandırılmalıdır. Bunu yapmanın en pratik yolu, önce ortak bir Frame yaratıp sonra gruplamak istediğimiz OptonButton’ları bu Frame’in içinde yaratmaktır.
    Tasarlayacağımız formun genel görünümü aşağıda verilmiştir:

    Şimdi, bu uygulama ile ilk defa kullandığımız iki nesneden bahsedelim: ListBox ve CheckBox. Formumuzda yer alan Veriliş Nedeni alanı bir ListBox, Sabıka Kaydı ve Askerlik Yapamaz Belgesi alanları ise birer CheckBox’tır.
    ListBox
    ComboBox ile aynı gruptadır. Yani kullanıcıya birçok seçenek içinden istediğini seçtirmek için kullanırız. Ancak bazı özellikleri ile ComboBox’dan ayrılır. Bunlar:
    1. ComboBox’dakinin aksine ListBox’da kullanıcı, oluşturulan kutunun büyüklüğü ölçüsünde bir çok seçeneği aynı anda görür.
    2. ListBox, MultiSelect özelliği sayesinde birden çok seçeneğin aynı anda seçilmesine olanak tanır. Yani,
    ListBox.MutiSelect=0 ise Sadece bir seçenek seçilebilir.
    ListBox.MutiSelect=1 ise Birden çok seçenek seçilebilir.
    ListBox.MutiSelect=2 ise Birden çok seçenek, klavyeden Ctrl tuşuna basılı iken seçilebilir.

    CheckBox
    OptionButton ile aynı gruptadır. Ancak OptionButton gruplarında sadece bir seçenek seçilmesine izin verilirken, CheckBox kontrollerinde kullanıcı birden çok seçeneği aynı anda işaretleyebilir.
    Kod
    Dim kaydedildi As Boolean

    Private Sub CmbIL_Click()
    CmbILCE.Clear
    Select Case CmbIL.Text
    Case "Ankara":
    CmbILCE.AddItem "Merkez"
    CmbILCE.AddItem "Altındağ"
    CmbILCE.AddItem "Keçiören"
    CmbILCE.AddItem "Mamak"
    CmbILCE.AddItem "Çankaya"
    CmbILCE.AddItem "Yeni Mahalle"
    CmbILCE.AddItem "Polatlı"
    CmbILCE.AddItem "Beypazarı"
    Case "Adana":
    CmbILCE.AddItem "Merkez"
    CmbILCE.AddItem "Seyhan"
    CmbILCE.AddItem "Kozan"
    CmbILCE.AddItem "Pozantı"
    CmbILCE.AddItem "Aladağ"
    Case "Artvin":
    CmbILCE.AddItem "Merkez"
    CmbILCE.AddItem "Ardanuç"
    CmbILCE.AddItem "Arhavi"
    CmbILCE.AddItem "Şavşat"
    CmbILCE.AddItem "Hopa"
    Case "Bolu":
    CmbILCE.AddItem "Merkez"
    CmbILCE.AddItem "Gerede"
    CmbILCE.AddItem "Mengen"
    CmbILCE.AddItem "Mudurnu"
    CmbILCE.AddItem "Seben"
    Case "Bursa":
    CmbILCE.AddItem "Merkez"
    CmbILCE.AddItem "Osmangazi"
    CmbILCE.AddItem "İnegöl"
    CmbILCE.AddItem "İznik"
    Case "İstanbul":
    CmbILCE.AddItem "Merkez"
    CmbILCE.AddItem "Adalar"
    CmbILCE.AddItem "Bakırköy"
    CmbILCE.AddItem "Beykoz"
    CmbILCE.AddItem "Beyoğlu"
    CmbILCE.AddItem "Beşiktaş"
    CmbILCE.AddItem "Kadıköy"
    CmbILCE.AddItem "Üsküdar"
    CmbILCE.AddItem "Zeytinburnu"
    CmbILCE.AddItem "Şişli"
    CmbILCE.AddItem "Çatalca"
    CmbILCE.AddItem "Sarıyer"
    End Select
    End Sub

    Private Sub CmdKapat_Click()
    Dim cvp As Integer
    If Not kaydedildi And TxtSyd.Text <> "" And TxtAd.Text <> "" And TxtBAd.Text <> "" And TxtAAd.Text <> "" Then
    cvp = MsgBox("Değişiklikleri kaydetmek istiyor musunuz?", vbYesNo + vbExclamation, "DİKKAT")
    If cvp = 6 Then
    MsgBox "Bilgiler kaydedilmiştir...", vbInformation, ""
    Unload Me
    Else
    Unload Me
    End If
    Else
    Unload Me
    End If
    End Sub

    Private Sub CmdKaydet_Click()
    Dim msj As String
    kaydedildi = True
    If TxtSyd.Text = "" Or TxtAd.Text = "" Or TxtBAd.Text = "" Or TxtAAd.Text = "" Then
    msj = "Zorunlu alanlarda bilgi eksikliği saptanmıştır."
    msj = msj & Chr(13) & "Lütfen bu bilgileri tamamlayınız."
    MsgBox msj, vbCritical, "UYARI"
    kaydedildi = False
    Else
    MsgBox "Bilgiler kaydedilmiştir...", vbInformation, ""
    TxtSyd.Text = ""
    TxtAd.Text = ""
    TxtBAd.Text = ""
    TxtAAd.Text = ""
    TxtAileNo.Text = ""
    TxtCiltNo.Text = ""
    TxtSiraNo.Text = ""
    TxtDYer.Text = ""
    TxtDYil.Text = ""
    TxtKayNo.Text = ""
    TxtKNo.Text = ""
    TxtKSeri.Text = ""
    TxtMah.Text = ""
    TxtVerYer.Text = ""
    OptEvli.Value = False
    OptBekar.Value = False
    OptDul.Value = False
    OptBosan.Value = False
    OptRhPoz.Value = False
    OptRhNeg.Value = False
    LstVerNed.Text = ""
    CmbDAy.Text = ""
    CmbDGun.Text = ""
    CmbIL.Text = ""
    CmbILCE.Text = ""
    CmbKanGr.Text = ""
    ChckAsk.Value = False
    ChckSab.Value = False
    TxtKSeri.SetFocus
    kaydedildi = False
    End If
    End Sub

    Private Sub Form_Load()
    kaydedildi = False
    End Sub
    ÇOK FORMLU UYGULAMALAR
    Birden çok formla çalışan bir uygulama tasarlamak, tek formla çalışan bir uygulama tasarlamaktan daha zor değildir. Bu işlem, ana formu yaptıktan sonra Project menüsünden Add Form seçeneği kullanılarak yeni formlar eklemek suretiyle gerçekleştirilebilir.
    Birden çok form bulunduran uygulamalarda, aksi belirtilmediği sürece ilk yapılan form ana form olur ve uygulama çalıştırıldığında ilk olarak bu form yüklenir. Bu sıralama, Project menüsünden <Proje Adı> Properties seçeneği kullanılarak değiştirilebilir.
    Herhangi bir formu çalışma-anında (runtime) görüntülemek için Show metodu kullanılır. Metodun ayrıntıları aşağıda verilmiştir:
    Show Metodu
    Herhangi bir formu ya da MDI formu görüntüler. Sözdizimi aşağıdaki gibidir:
    <Form Adı>.Show <Mod>
    <Mod>, görüntülenen formun aktif durumdaki davranışını belirleyen bir parametredir. İki değer alabilir: 0-Modeless (Geçerli durum) ve 1-Modal. Modeless durumunda form aktif durumda iken, yani fokus form üzerinde iken kullanıcı, açık durumda olan diğer formlara geçiş yapmak gibi başka aktiviteleri gerçekleştirebilir. Modal durumunda ise açık kaldığı sürece sadece görüntülenen form üzerinde işleme izin verilir.
    Şimdi, bir ana form ve bu form tarafından çağrılan ikinci bir forma sahip örnek bir uygulama üzerinde, aynı zamanda üç yeni kontrol nesnesinin kullanılışını göreceğiz: DirListBox, DriveListBox ve FileListBox.
    DirListBox
    Disk içinde yer alan klasör haritasını görüntüler ve kullanıcıya bu harita üzerinde istediği klasörü çift-tıklama yolu ile seçme olanağı tanır. Seçilen klasörün yolu, bu kontrol nesnesinin Path özelliğine aktarılır. Diğer bir deyişle DirListBox nesnemizin adı Dir1 ise Dir1.Path bize Dir1 içinde seçilen klasörün tam yolunu verecektir.



    DriveListBox
    Bilgisayarda tanımlı olan tüm disk sürücülerini görüntüler ve kullanıcıya istediği sürücüyü seçme olanağı sağlar. Seçilen sürücü bu kontrol nesnesinin Drive özelliğine aktarılır.

    FileListBox
    Kendisine ait Path özelliği tarafından belirlenen klasördeki dosyaları görüntüler ve kullanıcıya bunlardan seçim yapma olanağı tanır. Çalışma-anında değiştirilmediği sürece bu yol geçerli klasörü (VB kurulum klasörü) gösterecektir. Seçilen dosya ise kontrolün File özelliğinde saklanır.


    Örnek uygulamamızda bu kontroller yazılan kodlarla ilişkilendirilerek eş güdümlü (senkronize) çalışmaları sağlanmıştır. Uygulamada yer alan ana form bir metin kutusu ve üç buton içermektedir: Tamam, İptal ve Gözat. Tamam ve İptal butonlarının her ikisi de formu kapatmaktadır. (Çünkü bu örnek büyük bir uygulamanın bir parçası olarak düşüünülmüştür.) Gözat düğmesine basıldığında, üzerinde yukarıda anlatılan kontrol nesnelerini ilişkilendirilmiş bir biçimde taşıyan ikinci formumuz Modal modunda görüntülenmektedir. Bu kontroller kullanılarak belirlenen dosya adı ve yolu, eğer Tamam butonuna basılırsa ana formumuzun dosya adı metin kutusuna aktarılarak form kapanmakta, aksi halde, yani İptal butonuna basılırsa ikinci formumuz doğrudan kapatılmaktadır.

    Şimdi, FrmBul formuna aranan dosyanın türünü de seçebileceğimiz bir ComboBox ekleyeceğiz ve böylece dosya listemizde sadece istediğimiz türden dosyaların görüntülenmesini sağlayacağız. Bunun için ilk olarak, dosya türünü seçebileceğimiz CmbDosyaTur adlı bir ComboBox yaratacağız ve tasarım-anında (design-time) bu ComboBox’ımızın liste özelliğine uygun seçenekleri gireceğiz. Daha sonra FileListBox’ımızı gizleyeceğiz ve onun yerine LstDosyalar adlı sıradan bir ListBox yerleştireceğiz. Bunu yapmaktaki amacımız, FileListBox’ta yer alan dosya adlarından sadece CmbDosyaTur’de seçilen uzantıya sahip olan dosya adlarını buradan seçip, ListBox’a aktarmaktır. Diğer bir deyişle, LstDosyalar adlı liste kutumuz, File1 adlı dosya liste kutumuzdan dosya türü kriterine uygun olarak süzülen dosyaları gösterecektir.
    FrmBul formunun yeni şekli ve bu forma ait kodlar aşağıda verilmiştir:

    Private Sub CmbDosyaTur_Click()
    LstDosyalar.Clear
    For j = 0 To File1.ListCount - 1
    If Right(File1.List(j), 3) = Right(CmbDosyaTur.Text, 3) Then
    LstDosyalar.AddItem File1.List(j)
    End If
    Next j
    End Sub

    Private Sub CmdBulIptal_Click()
    Unload Me
    End Sub

    Private Sub CmdBulTamam_Click()
    FrmAna.TxtDosAd.Text = File1.Path & "\" & LstDosyalar.Text
    Unload Me
    End Sub

    Private Sub Dir1_Change()
    File1.Path = Dir1.Path
    LstDosyalar.Clear
    For j = 0 To File1.ListCount - 1
    If Right(File1.List(j), 3) = Right(CmbDosyaTur.Text, 3) Then
    LstDosyalar.AddItem File1.List(j)
    End If
    Next j
    End Sub
    RESİM İLİŞTİRME (PICTURE CLIP)
    Bu kesimde, hazırlayacağımız bir sayı tutmaca oyunu ile PictureBox ve Image kontrollerinin etkin kullanımını öğreneceğiz. Uygulama iki formdan oluşmaktadır. Ana form (FrmSor) ve program hakkında penceresi (FrmAbout). Ana formumuzda bir Image, Program Hakkında formunda ise bir PictureBox nesnesi kullandık. Image, PictureBox ile aynı işlevi taşır, ancak PictureBox’ın özelliklerinin bir altkümesini içerir. Buna karşın runtime’da PicturBox’tan daha hızlı çalışır.
    Program hakkında formumuzda, üç adet PictueBox kullanılmıştır. Bunlardan sadece biri kullanıcıya gösterilmektedir. Diğer ikisi sabit olarak iki resim dosyası iliştirilmiş olarak (tasarım-anında Picture özelliği kullanılarak atanan resim dosyaları) formun görünmeyen yüzünde yer almaktadır. Aşağıda, formun kullanıcıya gösterilmeyen bölümü işaretlenmiştir:
    Bu bölümde PictureBox nesneleri ile birlikte yine ilk defa bu uygulamamızda kullandığımız Timer kontrolü de yer almaktadır. Şimdi bu kontrolleri daha yakından tanıyalım:
    PictureBox
    Bitmap (*.bmp), ikon (*.ico), metafile (*.wmf), gelişmiş metafile (*.emf), JPEG (*.jpg) ya da GIF dosyalarını görüntülemek için kullanılır. En önemli özellikleri tasarım-anında veya LoadPicture fonksiyonunu kullanarak kod içersinde resim atamak için kullanacağımız Picture özelliği ile, PictureBox’ın boyutunu atanan resmin boyutuna göre genişletip genişletmeyeceğini belirleyen (True ya da False) AutoResize özelliğidir.
    Image
    PictureBox ile aynı amaçlarla kullanılır ama sistem kaynaklarını daha ekonomik kullanır ve yeniden resimlendirme hızı daha fazladır. En önemli özellikleri yine Picture özelliği ile, atanan resmin Image’in boyutuna göre ayarlanıp (daraltma ya da genişletme) ayarlanmayacağını belirleyen Stretch (True ya da False) özelliğidir.
    Timer
    Timer kontrolü, belirli bir kodu düzenli zaman aralıkları ile çalıştırmak için kullanılır. Çalıştırılacak kod, kontrolün Timer olayına yazılır ve zaman aralığı kontrolün Interval özelliği ile belirlenir.
    Bizim uygulamamızda, görünen bölümde yer alan PictrueBox’ta diğer iki PictureBox’ın resimlerinin uygun bir periyotla görüntülenebilmesi için bir Timer kontrolü kullanılmıştır. Bu şekilde, Tolga Güyer yazısına konan kelebeğin kanat çırpması sağlanmıştır.
    LoadPicture Fonksiyonu
    Genel Sözdizimi : LoadPicture([string ifade])
    [string ifade] atanacak resim dosyasının yolunu (path) ve tam dosya adını belirtir. Dosya, Bitmap (*.bmp), ikon (*.ico), metafile (*.wmf), gelişmiş metafile (*.emf), run-length encoded (.rle), JPEG (*.jpg) ya da GIF türünde olmalıdır.
    Ana formun ilk çalıştığı andaki hali (PictureBox’ın resmi uygulama içinde değiştiriliyor) ve açıklamalı kodlar aşağıda verilmiştir:
    FrmSor
    Dim syc As Byte 'Kart resimlerinin sayaç değişkeni
    Dim RsmYol As String 'Resim dosyalarının path stringi
    Dim tutulansayi, sayilar(7) As Integer

    Private Sub CmdAbout_Click()
    FrmAbout.Show 1 'Program hakkında formunu görüntüle
    End Sub

    Private Sub CmdKapat_Click()
    End
    End Sub

    Private Sub CmdTuttum_Click()
    RsmYol = App.Path & "\images\kartsor1.bmp" 'İlk kartın path ve dosya adı
    Image1.Picture = LoadPicture(RsmYol) 'İlk kartı göster
    CmdTuttum.Visible = False
    CmdVar.Visible = True
    CmdYok.Visible = True
    End Sub

    Private Sub CmdVar_Click()
    tutulansayi = tutulansayi + sayilar(syc) 'Tutulan sayıyı hesapla
    syc = syc + 1 'Kart dosyalarının sayacını artır
    If syc < 8 Then 'Sadece 7 tane kart dosyası var
    RsmYol = App.Path & "\images\kartsor" & syc & ".bmp"
    'Uygulamanın yolu+dosya adı+sayaç stringi oluşturuluyor
    Else
    Image1.Picture = LoadPicture("")
    'Son resim de gösterildi, sıra finalde
    Image1.Left = 1800 'Final resmi daha küçük olduğundan soldan ortalanıyor
    BackColor = &H8000000E 'Arka fon beyaz
    RsmYol = App.Path & "\images\final.bmp"
    Label1.Visible = True
    Label1.Caption = tutulansayi 'Ve işte tutlan sayı
    CmdVar.Visible = False
    CmdYok.Visible = False
    End If
    Image1.Picture = LoadPicture(RsmYol)
    End Sub

    Private Sub CmdYeni_Click()
    Image1.Picture = LoadPicture("")
    sifirla 'Değişkenleri baştaki değerlerine döndür
    RsmYol = App.Path & "\images\grfsor.bmp" 'Tekrar ilk resim
    Image1.Picture = LoadPicture(RsmYol)
    End Sub

    Private Sub CmdYok_Click()
    'Var düğmesi ile aynı, tek fark tablo sayısı tutlansayi'ya eklenmiyor.
    syc = syc + 1
    If syc < 8 Then
    RsmYol = App.Path & "\images\kartsor" & syc & ".bmp"
    Else
    Image1.Picture = LoadPicture("")
    Image1.Left = 1800
    BackColor = &H8000000E
    RsmYol = App.Path & "\images\final.bmp"
    Label1.Visible = True
    Label1.Caption = tutulansayi
    CmdVar.Visible = False
    CmdYok.Visible = False
    End If
    Image1.Picture = LoadPicture(RsmYol)
    End Sub

    Private Sub Form_Load()
    sayilar(1) = 1 'Tablo sayıları dizisi oluşturuluyor
    sayilar(2) = 2
    sayilar(3) = 4
    sayilar(4) = 8
    sayilar(5) = 16
    sayilar(6) = 32
    sayilar(7) = 64
    sifirla
    End Sub

    Private Sub sifirla()
    'Değişkenlere ve kontrollere ilk değerleri atanıyor
    syc = 1
    tutulansayi = 0
    Label1.Visible = False
    CmdVar.Visible = False
    CmdYok.Visible = False
    CmdTuttum.Visible = True
    BackColor = &H8000000F
    Image1.Left = 0
    End Sub
    FrmAbout
    Dim kontrol As Byte 'Sıralamayı belirleyen bayrak değişkeni

    Private Sub kelebek()
    'Sıraya göre uygun resim atanıyor:
    If kontrol = 0 Then
    PicKlbk.Picture = PicKlbk1.Picture
    kontrol = 1
    Else
    PicKlbk.Picture = PicKlbk2.Picture
    kontrol = 0
    End If
    End Sub

    Private Sub BtnTamam_Click()
    Unload Me
    End Sub

    Private Sub Timer1_Timer() ‘Tasarımda Interval özelliği 200 olarak belirlenmiştir.
    kelebek 'Ve kelebeğimiz kanat çırpıyor
    End Sub


    MENÜLER
    Caption, menümüzde yer alacak ilk seçeneğin etiketidir. Name alanına ise o menü seçeneğine ait (kodlarda kullanılacak) bir isim verilmelidir. Index her menü seçeneğini, aynı kontrol dizilerinde olduğu gibi sayısal bir değerle numaralandırmak suretiyle, gerektiğinde kodlarda kolaylık sağlamak amacıyla kullanılır. Ancak bu sayının seçeneğin menüdeki pozisyonu ile bir ilgisi yoktur.
    Menü seçeneğinin görünümü ile ilgili opsiyonlar (Checked=İşretli, Enabled=Aktif, Visible=Görünür, WindowList=MDI formları gösteren pencere listesi) işaretlenerek, menü seçeneklerinin pozisyonları ve altmenüler ise alt kısımda yer alan ok resimli butonlar kullanılarak ayarlanabilir.
    Next : Seçili seçeneğin altına yeni seçenek eklemek için yer açar.
    Insert : Seçili seçeneğin üzerine yeni seçenek eklemek için yer açar.
    Delete : Seçili seçeneği siler.
    Sol Ok : Seçileni bir seviye yukarı çıkartır. (Bir üst menü seçeneği olur)
    Sağ Ok : Seçileni bir seviye aşağı indirir. (Kendisinden önceki seçeneğin bir altmenü seçeneği olur)
    Yukarı Ok : Seçileni menü sıralamasında bir yukarı çıkartır. (Soldan sağa sıralamada sola geçirir.)
    Aşağı Ok : Seçileni menü sıralamasında bir aşağı indirir. (Soldan sağa sıralamada sağa geçirir.)
    Aşağıda menü editörü kullanılarak hazırlanan bir menü örneği görsel olarak açıklanmıştır. Editörde yapılan ayarlamaların uygulamadaki yansımalarına dikkat edin:

    Ayrıca ShortCut ComboBox’ı kullanılarak her menü seçeneği için bir kısayol atanabilir.
    Menü Seçeneklerinin Adlandırılması
    Her menü seçeneğinin (Caption’ın dışında) bir adı olmalıdır. Bu ad, değişken isimlendirme kurallarına uygun olarak verilmelidir. Kodların anlaşılabilir olması açısından, menü seçenekleri adlandırılırken şu kurala uyulması yararlı olacaktır: Bir menünün bir seçeneği ya da alt menüsü, o menünün adı ile başlayan bir isimle adlandırılmalıdır. Örneğimizde MnDosya menüsünde yer alan Aç seçeneği, MnDosyaAc olarak adlandırılmıştır. Aynı şekilde, MnArac menüsünde yer alan Çizim Araçları seçeneği MnAracCiz, bunun altında yer alan Çember seçeneği ise MnAracCizCember olarak adlandırılmıştır.



    MODÜLLER
    Modüller, proje kapsamında kullanılacak tanımlamaların (değişken, prosedür ya da fonksiyonlar) yer aldığı bileşenlerdir. Bir proje, içerdiği formlardan bağımsız olarak bir ya da daha çok sayıda modül içerebilir.
    Projeye bir modül eklemek için Project menüsünden Add Module seçeneğinin seçilmesi yeterlidir. Bu yapıldığında ekrana gelen pencereden yeni bir modül seçilebilir ya da önceden hazırlanmış bir modül projeye dahil edilebilir.
    Bir modül sadece bir kod bölümünden oluşur: tüm tanımlamaların yapılacağı General Declarations bölümü. Aşağıda örnek bir modülün kod penceresi verilmiştir:
    Burada TusaBasildi, C1 ve C2 değişkenleri global olarak tanımlanmışlardır. Dolayısıyla tüm proje kapsamında kullanılabilirler. Ancak katsayi değişkeni lokal olarak tanımlandığından sadece ilgili modül içersinde kullanılabilir.
    Diğer yandan hesapla fonksiyonu da proje dahilinde kullanılabilecektir.
    Şimdi geliştireceğimiz örnek uygulamada son olarak öğrendiğimiz iki yeni kavramı da kullanacağız: Menü ve Modül.
    BİR HAFIZA OYUNU: ResimBUL V1.0
    Oyun oldukça basit bir amaca sahiptir: Arkaları dönük durumda olan 10 çift resimli kartı, her bir çifti art arda açmak suretiyle tümüyle açmaya çalışmak. Ancak her kart üzerinde tıklandığında sadece 1-2 saniye gözüküyor ve sonra tekrar geri dönüyor. Böylece fotoğrafik hafızamızın gücü ölçüsünde bu amaca en kısa sürede ve en az tıklama sayısı ile ulaşmaya çalışıyoruz. Sonuçta program bize uygun bir formül kullanarak performansımız doğrultusunda bir puan hesaplıyor.
    Projenin en önemli özelliklerinden birisi, her oyunun başında kartların (PictureBox’ların) rasgele (random) olarak program tarafından karıştırılmasıdır. Bu işlemde, VB’nin rasgele sayı üreten Rnd fonksiyonu kullanılmıştır. Bu fonksiyonun özellikleri aşağıda açıklanmıştır:
    Rnd Fonksiyonu
    Genel Sözdizimi : Rnd[(sayı)]
    Single türünde (32 bit ondalık sayı) rasgele sayı üretir. Bu işlemi, Rastgele Sayı Üreteci (Random Number Generator) adlı, sistem saatini kullanan bir algoritma kullanarak gerçekleştirir. Ancak bu algoritma program çalıştığında başlatıldığından (initialize), eğer üreteç her sayı üretilmeden önce başlatılmazsa sürekli aynı sayıyı üretecektir. Bu yüzden her sayı için Randomize deyimi kullanılarak üreteç yeniden başlatılmalıdır.
    sayı parametresi zorunlu değildir. Bu parametrenin aldığı değerler aşağıdaki tabloda verilmiştir:
    sayı Rnd tarafından üretilen rasgele sayı
    Sıfırdan küçük Her seferinde aynı sayı üretilir
    Sıfırdan büyük Her seferinde farklı sayı üretilir
    Sıfıra eşit En sık üretilen rasgele sayı üretilir
    Belirtilmezse Her seferinde farklı sayı üretilir
    Rnd fonksiyonunun kullanım örneği için verilen uygulamanın ana formuna ait kodu inceleyiniz.
    Projemiz beş adet formdan ve bir adet modülden oluşmaktadır. Ana form (FrmAna), üzerinde bir menü ve 20 adet PictureBox’ın yer aldığı (kartlar için) bir formdur. Ayrıca süreyi tutmakta kullanılan bir Timer nesnesi, süre ve oyun sonunda hesaplanan puanın basılacağı label’lar ve oyunla ilgili tüm ayarlamaların yapılacağı birde menü içermektedir. Diğer formlar ise Program Hakkında Formu (FrmAbout), Kart Seçimi Formu (FrmKartSec), oyun seviyesinin ayarlandığı Ayarlar Formu (FrmSeviye) ve oyunun kurallarının açıklandığı Yardım Formudur (FrmYardim).
    Formların genel görünümleri ve çalıştırdıkları kodlar aşağıda verilmiştir:
    FrmAna

    Dim c, ilk, TiklamaSayaci, EslemeSayaci, ZamanSayaci
    Private Sub Form_Load()
    c = 0
    EslemeSayaci = 0
    ZamanSayaci = 0
    TiklamaSayaci = 0
    Timer1.Enabled = False
    MnOyunStop.Visible = False ‘Oyun henüz başlamadığından oyunu durdurma menü seçeneği gizli
    seviye = 2 ‘Default oyun seviyesi
    surekli = True ‘Default oyun ayarı
    fondosya = "fon1.jpg" ‘Default kart arkafon resmi
    End Sub

    Private Sub MnAboutAbout_Click()
    FrmAbout.Show 1
    End Sub

    Private Sub MnAboutYard_Click()
    FrmYardim.Show 1
    End Sub

    Private Sub MnOyunCikis_Click()
    End
    End Sub

    Private Sub MnOyunStop_Click()
    Timer1.Enabled = False
    For j = 0 To 19 ‘Oyun bitirildi, tüm kartları aç
    Picture1(j).Picture = LoadPicture(App.Path & "\images" & "\resim" & j & ".wmf")
    Picture1(j).Enabled = False
    Next j
    MnOyunYeni.Visible = True ‘Yeni oyun menü seçeneği tekrar göründü
    MnOyunStop.Visible = False ‘Oyunu bitir menü seçeneği kayboldu
    MnSec.Enabled = True ‘Oyun sırasında Disable olan menü seçenekleri tekrar Enable oldu
    MnAbout.Enabled = True
    End Sub

    Private Sub MnOyunYeni_Click()
    Karistir ‘Karistir prosedürü çağrılıyor (Kartları rasgele karıştırır)
    For j = 0 To 19 ‘Kartların arkafon resimleri yükleniyor ve PitureBox’lar Enable oluyor
    Picture1(j).Picture = LoadPicture(App.Path & "\images\" & fondosya)
    Picture1(j).Enabled = True
    Next j
    c = 0
    EslemeSayaci = 0 ‘Yeni oyun için sayaçlar sıfırlandı
    ZamanSayaci = 0
    TiklamaSayaci = 0
    Timer1.Enabled = True
    Label4.Caption = ""
    MnSec.Enabled = False ‘Menü seçenekleri oyun sırasındaki ayarlarına getiriliyor
    MnAbout.Enabled = False
    MnOyunYeni.Visible = False
    MnOyunStop.Visible = True
    End Sub

    Private Sub MnSecAyar_Click()
    FrmSeviye.Show 1
    End Sub

    Private Sub MnSecKart_Click()
    FrmKartSec.Show 1
    End Sub

    Private Sub Picture1_Click(Index As Integer)
    TiklamaSayaci = TiklamaSayaci + 1 ‘Her tıklama sayılıyor
    If c = 0 Then 'Oyun tipi sürekli seçildi ise sadece ilk hamlede çalışacak
    resimkoy (Index)
    bekle (seviye / 10)
    Picture1(Index).Picture = LoadPicture(App.Path & "\images\" & fondosya)
    c = 1
    ilk = Index
    Else
    If Not surekli Then c = 0 ‘Oyunu her turda (her iki kart açıldığında) başa döndürüyor.(turlu oyun)
    If (Abs(ilk - Index) = 5 And ilk < 10 And Index < 10) Or (Abs(ilk - Index) = 5 And ilk > 9 And Index > 9) Then
    'Eşleme yapılmış (açıklama için kodların sonuna bakınız)
    resimkoy (Index) 'Yeni bulunan resim
    resimkoy (ilk) 'İlk tıkladığı resim
    Picture1(Index).Enabled = False ‘Bulanan resimleri PictureBox larını disable yapalım ki bir daha ‘tıklayamasın
    Picture1(ilk).Enabled = False
    EslemeSayaci = EslemeSayaci + 1 ‘Doğru tıklamaları sayıyoruz
    If EslemeSayaci = 10 Then OyunBitti ’10 eşleme demek resimlerin hepsi açılmış demek
    Else ‘Eğer doğru resmi bulamadıysa göster-bekle-kapat
    resimkoy (Index) ‘Göster
    bekle (seviye / 10) ‘Bekle
    Picture1(Index).Picture = LoadPicture(App.Path & "\images\" & fondosya) ‘Ve kapat
    End If
    ilk = Index
    End If
    End Sub

    Private Sub resimkoy(idx)
    Dim yol
    yol = App.Path & "\images" & "\resim" & idx & ".wmf" ‘Gelen indekste (idx) bulunan PicturBox’a
    Picture1(idx).Picture = LoadPicture(yol) ‘resim&idx.wmf dosyası yükleniyor
    End Sub

    Private Sub bekle(sure)
    Dim basla
    basla = Timer ‘ basla ya sistem sayıcısının o anki değeri aktarılıyor.
    Do While Timer < basla + sure ‘Sistem sayıcısı (Timer fonksiyonu) sure kadar saydırılıyor (bekleme için)
    Loop
    End Sub

    Private Sub Timer1_Timer()
    ZamanSayaci = ZamanSayaci + 1 ‘Oyun sırasında süreyi tutan Timer kontrolü
    Label2.Caption = ZamanSayaci
    End Sub

    Private Sub OyunBitti()
    Dim puan, mesaj
    Timer1.Enabled = False
    puan = CInt((1 / ZamanSayaci) * 1000 + (1 / TiklamaSayaci) * 1000)
    ‘Puan hesaplayan bu formül, ne kadar az tıklama ile ne kadar az sürede oyun tamamlanırsa o kadar
    ‘yüksek puan değeri veriyor
    mesaj = "OYUN BİTTİ" & Chr(13) & "PUANINIZ : " & puan
    MsgBox mesaj
    Label4.Caption = puan
    MnSec.Enabled = True
    MnAbout.Enabled = True
    MnOyunYeni.Visible = True
    MnOyunStop.Visible = False
    End Sub

    Private Sub Karistir()
    Dim Rsayi(19), sayi, h, j, k, T, L
    Randomize ‘Bu prosedür her çağırıldığında rasgele sayı üreteci yeniden başlatılacak
    Rsayi(0) = Int(20 * Rnd) ’20 adet rasgele sayıdan oluşan bir dizi oluşturuluyor
    For j = 1 To 19
    Do
    sayi = Int(20 * Rnd)
    h = 0
    For k = 1 To j
    If sayi <> Rsayi(k - 1) Then h = h + 1 ‘Bu dizide hiçbir sayı tekrarlanmamalı
    Next k
    Loop Until h = j
    Rsayi(j) = sayi
    Next j
    T = 120 ‘PictureBox ların ilk Top pozisyonu
    L = 120 ‘PictureBox ların ilk Left pozisyonu
    For j = 0 To 19
    Picture1(Rsayi(j)).Top = T ‘Rasgele indeksli PictureBox ların Top ve Left pozisyonları ayarlanıyor
    Picture1(Rsayi(j)).Left = L
    L = L + 1200
    If L = 6120 Then
    T = T + 1320
    L = 120
    End If
    Next j
    End Sub
    FrmSeviye

    FrmAbout
    FrmYardim
    FrmKartSec
    Private Sub CmdIptal_Click()
    Unload Me
    End Sub

    Private Sub CmdTamam_Click()
    If Shape1(0).Visible Then ‘Hangi dikdörtgen (Shape) görünür durumda ise o arkafon seçilmiş demektir
    fondosya = "fon1.jpg"
    ElseIf Shape1(1).Visible Then
    fondosya = "fon2.jpg"
    ElseIf Shape1(2).Visible Then
    fondosya = "fon3.jpg"
    ElseIf Shape1(3).Visible Then
    fondosya = "fon4.jpg"
    End If
    Unload Me
    End Sub

    Private Sub Form_Load()
    Select Case fondosya
    Case "fon1.jpg": Shape1(0).Visible = True
    Case "fon2.jpg": Shape1(1).Visible = True
    Case "fon3.jpg": Shape1(2).Visible = True
    Case "fon4.jpg": Shape1(3).Visible = True
    End Select
    End Sub
    Private Sub Image1_Click(Index As Integer)
    For j = 0 To 3 ‘Hangi Image e tıklandı ise o resme ait Shape görünür oluyor
    If j = Index Then ‘Amaç kullanıcıya resim seçildi etkisi yaratmak
    Shape1(j).Visible = True
    Else
    Shape1(j).Visible = False
    End If
    Next j
    End Sub
    Program Eş Kartları Nasıl Anlıyor?
    Birbiri ile eş olan resimleri içeren PictureBox’lar aşağıdaki gösterilmiştir:






    Yani,
    1. Indeks farkı = 5 olan (6-1=5 gibi) ve Indeks değeri 10’dan küçük olan kartlar eş resimleri taşır. (0-9 arası kartlar)
    2. Indeks farkı = 5 olan (16-11=5 gibi) ve Indeks değeri 10’dan büyük olan kartlar eş resimleri taşır. (10-19 arası kartlar)
    PictureBox’lara ait resimler bu şekilde belirlendikten sonra Karistir prosedürü PictureBox’ların yerlerini rasgele değiştiriyor. Böylece oyunu oynayan eşleri bilemiyor (Programcı da buna dahil), ancak program biliyor.


    TOOLBAR (ARAÇ ÇUBUĞU)
    Programlarımıza, menünün yanı sıra bir araç çubuğu da ekleyebiliriz. Bunu, VB’nin ToolBar ve ImageList kontrollerini kullanarak gerçekleştiriyoruz. Aşağıda klasik bir araç çubuğu gösterilmiştir:


    ImageList ve ToolBar Kontrolleri
    ImageList ve ToolBar kontrolleri VB’nin standart bileşenleri içersinde yer almazlar. Bu kontrolleri içeren bileşen (component) Microsoft Windows Common Controls adlı bileşendir. Bu ve benzeri harici bileşenleri projemize dahil etmek için aşağıdaki yol izlenmelidir:
    1. Project Menüsü-Components seçeneğini seç.
    2. Açılan pencerede istediğin bileşen(ler)in yanına işaret koy ve Tamam düğmesine bas.
    Bu işlemleri yapıldığında, eklenen bileşenin içerdiği kontrollerin simgelerinin, VB’nin standart araç çubuğuna eklendiği görülür.
    Bir ToolBar kontrolü yaratmak için öncelikle forma toolbarın resimlerini sağlayacak bir ImageList yerleştirilmelidir. ImageList nesnesi de Timer kontrolü gibi çalışma anında otomatik olarak görünmez olur. Yerleştirilen ImageList’in özellikler-properties penceresinde (sağ tuş menüsünden açılan), listeye dahil edilecek resim dosyaları belirlenir ve her resim 0’dan başlayan tamsayılarla indekslenir.
    Form üzerine yerleştirilecek ToolBar kontrolü de, şekilde gösterildiği gibi daha önce yerleştirilmiş olan ImageList kontrolü ile ilişkilendirilir ve Insert tuşu kullanılarak butonlar eklenir. Her bir butona, ImageList’te indekslenen sayı ile bir resim atanır.
    ImageList’in Properties penceresinin Images sekmesinde yer alan bazı özellikler aşağıda açıklanmıştır:
    Index : Seçilen resme ait indeks numarası (Toolbarda kullanılacak)
    Insert Picture : Resim listesine yeni resim ekler.
    Remove Picture: Listeden seçilen resmi kaldırır.
    Image Count : Listedeki resimlerin toplam sayısını gösterir.
    Tag : Programcı bilgi alanı. (İşlevsiz)
    Key : Seçilen resme ait anahtar ad. (Kodlarda kullanılır)
    ToolBar’ın Properties penceresinin Buttons sekmesinde yer alan bazı özellikler aşağıda açıklanmıştır:
    Indeks : Seçilen butona ait indeks numarası.
    Caption : Seçilen butonun yazısı.
    Key : Seçilen butona ait anahtar ad. (Kodlarda kullanılır)
    Style : Seçilen butonun görünüm tipi.
    Tag : Programcı bilgi alanı. (İşlevsiz)
    ToolTipText : Seçilen butona ait balon yardım metni.
    Image : Butona ait resmin ImageList’teki indeks numarası.



    ÖRNEK UYGULAMA : SLAYT GÖSTERİCİSİ
    Bu örnek uygulamamız, manyetik ortamda kayıtlı (Disk, Disket ya da CD) çeşitli formatlardaki resim dosyalarını derleyerek slayt düzeninde görüntülemekte, bunların söz konusu ortamdaki adreslerinden (yollarından) bir slayt dosyası oluşturmakta ve bu dosyayı istenildiğinde açmaktadır. Uygulama, üzerinde bir menü ve toolbar bulunan bir ana form ve bunun dışında dört adet formdan ve bir modülden oluşmaktadır. Toolbar, menü ile aynı fonksiyonları gerçekleştiren butonları içerir. Ana formun haricindeki formlar, uygulamaya ait ayarlamaların yapıldığı bir form, manyetik ortamda yer alan resim dosyalarını derleyebileceğimiz bir form, program hakkında formu ve yardım formudur.
    Dosya açma ve dosya kaydetme işlemleri dışında uygulama, şu ana kadar kazanılan bilgi birikimi ile rahatlıkla anlaşılabilir. Bu işlemleri, Windows’un kendisine ait “Yeni adla kaydet” (Save as) ve “Aç” (Open) DialogBox’larını kullanarak gerçekleştiriyoruz. Bu DialogBox’ları, VB’nin Microsoft Common Dialog Control bileşeninde yer alan (ki bu bileşen standart araç çubuğunda yer almaz, bir önceki bölümde anlatıldığı gibi eklenir) CommonDialog nesnesini kullanılarak kontrol ederiz. Bu kontrolle uyumlu olarak çalışacak diğer bir nesne, Microsoft Rich Text Box Control bileşeninde yer alan RichTextBox nesnesidir.
    Form üzerine yerleştirilecek bir CommonDialog, çalışma anında görünmez olur. İşlevi, Windows’a ait DialogBox’ları açmak ve bu pencerelerle veri alışverişi gerçekleştirmektir. Bizim uygulamamızda, Aç penceresinde seçilen dosyanın içeriği, form üzerinde yer alan RichTextBox’a metin olarak aktarılır ve programımız bu veriyi işleyerek kendisi için anlamlı bir biçime getirir. Kaydet penceresi de bunun tam tersi mantıkla, RichTextBox içersindeki bilgiyi kullanıcının isimlendireceği bir dosyaya kaydeder. Elbette bu bilgi de programımız tarafından kaydetme işleminden önce anlamlı bir biçime getirilmiştir.
    Diğer bir deyişle, işletim sistemi ile programımız arasındaki köprü RichTextBox, bu köprü üzerinde veriyi her iki taraf taşıyan kontrol ise CommonDialog’dur.

    Aşağıda, formların genel görünümleri ile her bir forma ait kodlar verilmiştir:




    FrmAna
    Dim yol, sol, sag

    Private Sub MnuCikis_Click()
    End
    End Sub

    Private Sub CmdGeri_Click()
    rsyc = rsyc - 1
    If rsyc = -1 Then
    If devirli Then
    rsyc = LstGelenPath.ListCount - 1
    Else
    rsyc = 0
    End If
    End If
    yol = LstGelenPath.List(rsyc) & "\" & LstGelenFile.List(rsyc)
    If yol <> "\" Then
    Image1.Picture = LoadPicture(yol)
    End If
    End Sub

    Private Sub Cmdileri_Click()
    rsyc = rsyc + 1
    If rsyc = LstGelenPath.ListCount Then
    If devirli Then
    rsyc = 0
    Else
    rsyc = LstGelenPath.ListCount - 1
    End If
    End If
    yol = LstGelenPath.List(rsyc) & "\" & LstGelenFile.List(rsyc)
    If yol <> "\" Then
    Image1.Picture = LoadPicture(yol)
    End If
    End Sub

    Private Sub Form_Load()
    isyc = 0
    gsyc = 0
    devirli = True
    boyut = True
    End Sub

    Private Sub MnuDosyaAc_Click()
    DosyaAc
    End Sub

    Private Sub MnuDosyaExit_Click()
    End
    End Sub

    Private Sub MnuDosyaKaydet_Click()
    DosyaKaydet
    End Sub

    Private Sub MnuDosyaYeni_Click()
    YeniKaset
    End Sub

    Private Sub MnuSecAyr_Click()
    FrmSecenek.Show 1
    End Sub

    Private Sub MnuSecTlb_Click()
    If MnuSecTlb.Checked = True Then
    MnuSecTlb.Checked = False
    Toolbar1.Visible = False
    Else
    MnuSecTlb.Checked = True
    Toolbar1.Visible = True
    End If
    End Sub

    Private Sub MnuSlaytEkle_Click()
    SlaytEkle
    End Sub

    Private Sub MnuYardimAbout_Click()
    FrmAbout.Show 1
    End Sub

    Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)
    Select Case Button.Key
    Case "BtnYeni"
    YeniKaset
    Case "BtnAc"
    DosyaAc
    Case "BtnKaydet"
    DosyaKaydet
    Case "BtnYazdir"
    Case "BtnEkle"
    SlaytEkle
    Case "BtnScnk"
    FrmSecenek.Show 1
    Case "BtnYardim"
    Case "BtnCikis"
    End
    End Select
    End Sub

    Private Sub SlaytEkle()
    FrmBul.Caption = "Slayt Ekle"
    For j = 0 To LstGelenPath.ListCount - 1
    FrmBul.LstPath.AddItem LstGelenPath.List(j)
    FrmBul.LstSecilen.AddItem LstGelenFile.List(j)
    Next j
    FrmBul.Show 1
    End Sub

    Private Sub YeniKaset()
    LstGelenPath.Clear
    LstGelenFile.Clear
    FrmBul.Caption = "Yeni Slayt Kaseti"
    FrmBul.Show 1
    End Sub

    Private Sub DosyaAc()
    CommonDialog1.Filter = "Slayt Dosyaları|*.sly"
    CommonDialog1.ShowOpen
    RichTextBox1.LoadFile CommonDialog1.filename, rtfRTF
    dosya = RichTextBox1.Text
    Do
    p = InStr(1, dosya, "/")
    If p <> 0 Then
    parca = Left(dosya, p - 1)
    Mid(dosya, 1) = Space(p)
    dosya = Trim(dosya)
    Else
    parca = dosya
    End If
    Parcala (parca)
    LstGelenPath.AddItem Trim(sol)
    LstGelenFile.AddItem sag
    Loop Until p = 0
    End Sub

    Private Sub DosyaKaydet()
    Dim dosya As String
    dosya = LstGelenPath.List(0) & "\" & LstGelenFile.List(0)
    For j = 1 To LstGelenPath.ListCount - 1
    dosya = dosya & "/" & LstGelenPath.List(j) & "\" & LstGelenFile.List(j)
    Next j
    RichTextBox1.Text = dosya
    CommonDialog1.Filter = "Slayt Dosyaları|*.sly"
    CommonDialog1.ShowSave
    RichTextBox1.SaveFile CommonDialog1.filename, rtfRTF
    End Sub

    Private Sub Parcala(GelenStr As String)
    sol = " "
    sag = " "
    Do
    p = InStr(1, GelenStr, "\")
    If p <> 0 Then
    sol = sol & Left(GelenStr, p)
    Mid(GelenStr, 1) = Space(p)
    GelenStr = Trim(GelenStr)
    Else
    sag = GelenStr
    End If
    Loop Until p = 0
    sol = Left(sol, Len(sol) - 1)
    End Sub








    FrmBul

    Dim j

    Private Sub CmdEkle_Click()
    Dim syc, k
    syc = 0
    For j = 0 To File1.ListCount - 1
    If File1.Selected(j) Then
    For k = 0 To LstSecilen.ListCount - 1
    If LstSecilen.List(k) <> File1.List(j) Then syc = syc + 1
    Next k
    If syc = LstSecilen.ListCount Then
    LstSecilen.AddItem File1.List(j)
    LstPath.AddItem File1.Path
    End If
    syc = 0
    End If
    Next j
    End Sub

    Private Sub CmdIptal_Click()
    Unload Me
    End Sub

    Private Sub CmdSil_Click()
    For j = 0 To LstSecilen.ListCount - 1
    If LstSecilen.Selected(j) Then
    LstSecilen.RemoveItem (j)
    LstPath.RemoveItem (j)
    Exit For
    End If
    Next j
    End Sub

    Private Sub CmdTamam_Click()
    FrmAna.LstGelenFile.Clear
    FrmAna.LstGelenPath.Clear
    If LstSecilen.ListCount <> 0 Then
    For j = 0 To LstSecilen.ListCount - 1
    FrmAna.LstGelenPath.AddItem LstPath.List(j)
    FrmAna.LstGelenFile.AddItem LstSecilen.List(j)
    Next j
    FrmAna.Image1.Picture = LoadPicture(LstPath.List(0) & "\" & LstSecilen.List(0))
    End If
    rsyc = 0
    Unload Me
    End Sub

    Private Sub CmdTemizle_Click()
    LstSecilen.Clear
    LstPath.Clear
    End Sub

    Private Sub Dir1_Change()
    File1.Path = Dir1.Path
    End Sub

    Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
    End Sub

    Private Sub File1_Click()
    Image1.Picture = LoadPicture(Dir1.Path & "\" & File1.filename)
    End Sub
    FrmSecenek

    Private Sub CmdIptal_Click()
    Unload Me
    End Sub

    Private Sub CmdTamam_Click()
    If OptDevirli.Value Then
    devirli = True
    Else
    devirli = False
    End If
    If Check1.Value = 1 Then
    FrmAna.Image1.Stretch = True
    FrmAna.Image1.Width = 5385
    FrmAna.Image1.Height = 3255
    Else
    FrmAna.Image1.Stretch = False
    End If
    Unload Me
    End Sub

    Private Sub Form_Load()
    If devirli Then
    OptDevirli.Value = True
    Else
    OptDevirsiz.Value = True
    End If
    If FrmAna.Image1.Stretch Then
    Check1.Value = 1
    Else
    Check1.Value = 0
    End If
    End Sub

    RANDOM (RASGELE) ERİŞİMLİ DOSYALAR
    Şu ana kadar yaptığımız bütün uygulamalarda, bilgiyi sadece değişkenlerde sakladık. Oysa amacı veri depolamak ve gerektiğinde bu veriyi işleyerek bilgiye dönüştürmek olan bir uygulamanın, bundan daha gelişmiş bir veri saklama yöntemine gereksinimi vardır. Bunlardan ilki, rasgele erişimli dosyalardır. “Rasgele” sözcüğü, VB’nin kullandığı erişim yönteminden gelmektedir. Bu dosya tipinde her kayıt, otomatik olarak bir kayıt numarası ile numaralandırılır. Herhangi bir kayda bu kayıt numarası ile doğrudan ulaşabiliriz. Ancak bir kayda başka bir alan kullanılarak ancak sıradan erişilebilir. Bu da kayıt sayısı arttığında çok ta pratik bir yöntem değildir. Ama az sayıda kayıt ile işlem yapıyorsak ya da binary dosyalar üzerinde çalışıyorsak, bu dosyalama türünü rahatlıkla kullanabiliriz.
    Şimdi kullanacağımız bazı komut ve deyimleri açıklayalım:
    Open Deyimi
    Dosya açmak/yaratmak için kullanılır. İlk açıldığında dosya yaratılır. Daha sonraki her açılışında ise belirlenen moda uygun olarak açılır. Genel sözdizimi:
    Open <dosya> For mod [Access erişim] [kilit] As [#]DosyaNumarası [Len=KayıtUzunluğu]
    <dosya> : Açılacak dosyanın yolu ve tam adını belirleyen string. Eğer yol belirtilmez ve sadece dosya adı (uzantısı ile) verilirse dosya, uygulamanın çalıştığı konumda aranır.
    mod : Dosyanın açılma modunu belirleyen anahtar. Append, Binary, Input, Output ya da Random. Eğer belirtilmezse dosya Random (Rasgele) modda açılır. Append, Input ve Output Sequential (Sıralı) dosyalar içindir. Bu tür dosyalar, kayıt mantığı olmayan metin tabanlı dosyalardır. Append bu dosyaya veri ekleme, Input girdi Output ise veri okuma modunda açar. Binary ise ikili (makine koduna dönüştürülmüş) dosya açmak için kullanılır.
    erişim : Erişim biçimi. Read, Write, ya da Read Write anahtarlarından birisi kullanılır. Belirtilme zorunluluğu yoktur.
    kilit : Dosyanın kilit modunu belirten anahtar. Shared, Lock Read, Lock Write ya da Lock Read Write. Bunlar sırasıyla dosyayı paylaşılan, okumaya kilitli, yazmaya kilitli ve hem okumaya hem yazmaya kilitli yapar. Belirtilme zorunluluğu yoktur.
    DosyaNumarası: Kodlarda açılan dosyayı temsil edecek 1-511 arası bir dosya numarası. Sıradaki boş dosya numarasını FreeFile fonksiyonunu kullanarak saptayabilirsiniz.
    KayıtUzunluğu : 32,767 byte ile sınırlı bir değer. Dosya random açıldı ise bu değer kayıt uzunluğudur. Eğer sequential dosya söz konusu ise bu değer dosyadaki karakter sayısı olacaktır.
    Örnekler:
    Sequential bir dosyayı Girdi amaçlı açalım:
    Open "TESTFILE" For Input As #1
    ' Başka bir modda açmadan önce dosyayı kapatalım:
    Close #1
    ' Bu örnekte binary bir dosya sadece yazma amaçlı açılıyor:
    Open "TESTFILE" For Binary Access Write As #1
    Close #1
    ' Dosya, Kayitlar adlı bir kayıt adı ile rasgele erişimli olarak açılıyor:
    Open "TESTFILE" For Random As #1 Len = Len(Kayitlar)
    Close #1
    ' Sequential dosya Çıktı amaçlı olarak okuma ya da yazma yapılabilecek biçimde açılıyor:
    Open "TESTFILE" For Output Shared As #1
    Close #1
    ' Binary bir dosya okuma amaçlı olarak açılıyor. Ancak okuma kilidi konduğundan dosya açıkken başka bir uygulama tarafından kullanılamaz.
    Open “TESTFILE” For Binary Access Read Lock Read As #1
    Close Deyimi
    Open deyimi kullanılarak açılan bir dosyayı kapatmak için kullanılır. Genel sözdizimi:
    Close [DosyaNumarası]
    DosyaNumarası belirtilmezse o an açık durumda olan tüm dosyalar kapatılır.
    Get Deyimi
    Random ya da Binary bir dosyadan okuma amaçlı olarak kullanılır. Genel sözdizimi:
    Get [#]DosyaNumarası, [KayıtNumarası], Değişken
    DosyaNumarası : Hangi dosyadan okuma yapıldığını belirtir.
    KayıtNumarası : Random dosyada kaydın sıra numarası, Binary dosyada ise byte numarası olarak algılanır.
    Değişken : Okutulan kaydın aktarılacağı değişken. Random dosyada kayıt türünde olmalıdır.
    Put Deyimi
    Random ya da Binary bir dosyaya yazma amaçlı olarak kullanılır. Genel sözdizimi:
    Put [#]DosyaNumarası, [KayıtNumarası], Değişken
    DosyaNumarası : Hangi dosyaya yazma yapılacağını belirtir.
    KayıtNumarası : Random dosyada kaydın sıra numarası, Binary dosyada ise byte numarası olarak algılanır.
    Değişken : Okutulan kaydın aktarılacağı değişken. Random dosyada kayıt türünde olmalıdır.
    Len Fonksiyonu
    Bir stringin karakter sayısını ya da bir kaydın byte uzunluğunu verir. Genel sözdizimi:
    Len(string | değişken)

    LOF Fonksiyonu
    Open deyimi ile açılan dosyanın byte uzunluğunu verir. Genel sözdizimi:
    LOF(DosyaNumarası)
    EOF Fonksiyonu
    Open deyimi ile Random ya da Sequential modunda açılan dosyanın sonuna ulaşılıp ulaşılmadığını belirten boolean değer döndürür. Genel sözdizimi:
    EOF(DosyaNumarası)
    FreeFile Fonksiyonu
    Open deyimi ile kullanılmak üzere, sıradaki boş dosya numarasını verir. Genel sözdizimi:
    FreeFile[(Aralık)]
    Aralık : 0 (default) verilirse boş dosya numarası 1 – 255, 1 verilirse 256 – 511 arasında aranacaktır.
    Type Bildirimi
    Modül seviyesinde kullanıcı-tanımlı veri türleri yaratmak için kullanılır. Random bir dosyayı oluşturacak kayıtların türü, modülde Type bildirimi kullanılarak belirlenir. Genel sözdizimi:
    [Private | Public] Type <değişken>
    <bileşen> As type
    [<bileşen> As type]
    . . .
    End Type
    ÖRNEK UYGULAMA
    Hazırlayacağımız uygulama Random (Rasgele) bir dosya üzerinde çalışacak ve aşağıdaki özelliklere sahip olacaktır:
    • Kayıt Girişi
    • Kayıt Arama
    • Kayıt Düzeltme
    • Kayıt Silme
    Bu özelliklerin hepsi uygulamamızda bir ana form tarafından çağrılan birer form olarak tasarlanmıştır. Aşağıda her bir form ve bu formlara ait kodlar verilmiştir:
    Module1
    Type kayitturu
    Ad As String * 10
    Soyad As String * 15
    Adres As String * 50
    Tel As String * 10
    End Type
    Global Kayit As kayitturu
    Global Yeni As Boolean
    FrmAna
    FrmGiris

    Private Sub CmdKaydet_Click()
    If TxtAd.Text <> "" And TxtSoyad.Text <> "" Then
    Kayit.Ad = Trim(UCase(TxtAd.Text))
    Kayit.Soyad = Trim(UCase(TxtSoyad.Text))
    Kayit.Adres = TxtAdres.Text
    Kayit.Tel = TxtTel.Text
    cevap = MsgBox("Bilgiler dosyaya yazılsın mı?", 4)
    If cevap = 6 Then
    Put #1, TxtKayitNo.Text, Kayit
    TxtKayitNo.Text = TxtKayitNo.Text + 1
    TxtAd.Text = ""
    TxtSoyad.Text = ""
    TxtAdres.Text = ""
    TxtTel.Text = ""
    TxtAd.SetFocus
    End If
    Else
    MsgBox "ADI ve SOYADI alanlarının doldurulması zorunludur."
    End If
    End Sub

    Private Sub Form_Load()
    Open "Rehber.dat" For Random As #1 Len = Len(Kayit)
    TxtKayitNo.Text = LOF(1) / Len(Kayit)
    TxtKayitNo.Text = TxtKayitNo.Text + 1
    End Sub

    FrmBul

    Private Sub CmdAra_Click()
    Dim bulundu As Boolean
    bulundu = False
    If TxtAd.Text = "" Or TxtSoyad.Text = "" Then
    MsgBox "Lütfen ADI ve SOYADI alanlarını doldurunuz"
    Else
    For i = 1 To LOF(1) / Len(Kayit)
    Get #1, i, Kayit
    If Trim(UCase(TxtAd.Text)) = Trim(Kayit.Ad) And Trim(UCase(TxtSoyad.Text)) = Trim(Kayit.Soyad) Then
    TxtKayitNo.Text = i
    TxtAd.Text = Kayit.Ad
    TxtSoyad.Text = Kayit.Soyad
    TxtAdres.Text = Kayit.Adres
    TxtTel.Text = Kayit.Tel
    bulundu = True
    End If
    Next i
    If Not bulundu Then
    MsgBox "Aranan kayıt bulunamamıştır..."
    End If
    End If
    End Sub

    Private Sub TxtKayitNo_KeyPress(KeyAscii As Integer)
    If TxtKayitNo <> "" Then
    If KeyAscii = 13 Then
    Get #1, TxtKayitNo.Text, Kayit
    TxtAd.Text = Kayit.Ad
    TxtSoyad.Text = Kayit.Soyad
    TxtAdres.Text = Kayit.Adres
    TxtTel.Text = Kayit.Tel
    End If
    End If
    End Sub

    FrmDuzelt



    Private Sub CmdAra_Click()
    Dim bulundu As Boolean
    bulundu = False
    If TxtAd.Text = "" Or TxtSoyad.Text = "" Then
    MsgBox "Lütfen ADI ve SOYADI alanlarını doldurunuz"
    Else
    For i = 1 To LOF(1) / Len(Kayit)
    Get #1, i, Kayit
    If Trim(UCase(TxtAd.Text)) = Trim(Kayit.Ad) And Trim(UCase(TxtSoyad.Text)) = Trim(Kayit.Soyad) Then
    TxtKayitNo.Text = i
    TxtAd.Text = Kayit.Ad
    TxtSoyad.Text = Kayit.Soyad
    TxtAdres.Text = Kayit.Adres
    TxtTel.Text = Kayit.Tel
    bulundu = True
    End If
    Next i
    If Not bulundu Then
    MsgBox "Aranan kayıt bulunamamıştır..."
    End If
    End If
    End Sub
    Private Sub CmdDuzelt_Click()
    If TxtAd.Text <> "" And TxtSoyad.Text <> "" Then
    Kayit.Ad = Trim(UCase(TxtAd.Text))
    Kayit.Soyad = Trim(UCase(TxtSoyad.Text))
    Kayit.Tel = TxtTel.Text
    Kayit.Adres = TxtAdres.Text
    FrmSor.Show 1
    If TxtAd.Text <> Kayit.Ad Or TxtSoyad.Text <> Kayit.Soyad Then
    If Yeni Then
    Put #1, LOF(1) / Len(Kayit) + 1, Kayit
    Else
    Put #1, TxtKayitNo.Text, Kayit
    End If
    End If
    Close #1
    Unload Me
    End If
    End Sub

    Private Sub CmdKapat_Click()
    Close #1
    Unload Me
    End Sub

    FrmSor


    FrmSil




    Private Sub CmdAra_Click()
    Dim bulundu As Boolean
    bulundu = False
    If TxtAd.Text = "" Or TxtSoyad.Text = "" Then
    MsgBox "Lütfen ADI ve SOYADI alanlarını doldurunuz"
    Else
    For i = 1 To LOF(1) / Len(Kayit)
    Get #1, i, Kayit
    If Trim(UCase(TxtAd.Text)) = Trim(Kayit.Ad) And Trim(UCase(TxtSoyad.Text)) = Trim(Kayit.Soyad) Then
    TxtKayitNo.Text = i
    TxtAd.Text = Kayit.Ad
    TxtSoyad.Text = Kayit.Soyad
    TxtAdres.Text = Kayit.Adres
    TxtTel.Text = Kayit.Tel
    bulundu = True
    End If
    Next i
    If Not bulundu Then
    MsgBox "Aranan kayıt bulunamamıştır..."
    End If
    End If
    End Sub

    Private Sub CmdKapat_Click()
    Close #1
    Unload Me
    End Sub

    Private Sub CmdSil_Click()
    For i = TxtKayitNo.Text To LOF(1) / Len(Kayit) - 1
    Get #1, i + 1, Kayit
    Put #1, i, Kayit
    Next i
    Open "Rehber.tmp" For Random As #2 Len = Len(Kayit)
    For i = 1 To LOF(1) / Len(Kayit) - 1
    Get #1, i, Kayit
    Put #2, i, Kayit
    Next i
    Close
    FileCopy "Rehber.tmp", "Rehber.dat"
    Kill "Rehber.tmp"
    MsgBox "Kayıt silinmiştir..."
    Unload Me
    End Sub















    DOSYA VE KLASÖRLER ÜZERİNDE İŞLEMLER
    Bu bölümde, uygulamanın kendisi dışındaki dosyalara ve klasörlere müdahale etmesini sağlayacak bazı özel VB deyimlerini ve fonksiyonlarını tanıtacağız.
    CurDir : Geçerli klasörü verir. Eğer değiştirilmedi ise bu klasör, uygulamanın çalıştığı klasördür.
    ChDir() : Geçerli klasörü değiştirir. Örnek : ChDir “C:\Belgelerim”
    ChDrive() : Geçerli sürücüyü değiştirir. Örnek : ChDrive “D”
    MkDir() : Geçerli sürücü ve klasör altında bir klasör yaratır. Örnek : MkDir “Oyunlar”
    RmDir() : Geçerli sürücü ve klasör altında belirlenen klasörü siler. Örnek : RmDir “Oyunlar”
    FileCopy() : Belirli bir klasörde yer alan bir dosyayı belirlenen bir klasöre yeni adla kopyalar. Birden çok sayıda dosya üzerinde işlem yapmak için Joker karakterlerden yararlanılabilir. (*,?) Örnek : FileCopy “A:\Bulutlar.bmp” “C:\Windows\YeniBulutlar.bmp”
    Kill() : Belirli bir klasörde yer alan bir dosyayı silmek için kullanılır. Yine Joker karakterlerden yararlanılabilir. Örnek : Kill “C:\Windows\Gereksiz.doc”
    Name() : Bir dosya ya da klasörün adını değiştirmek için kullanılır. Örnek : Name “C:\Rehber.dat” “C:\Rehber.Tmp”
    FileLen() : Dosyanın byte olarak uzunluğunu verir. Örnek: FileLen “A:\deneme.exe”
    GetAttr()/SetAttr() : Dosyanın özniteliklerini değiştirir/verir. Parametreler aşağıda verilmiştir:
    vbNormal 0 Normal (geçerli)
    vbReadOnly 1 Salt-okunur
    vbHidden 2 Gizli
    vbSystem 4 Sistem dosyası
    vbDirectory 16 Klasör
    vbArchive 32 Arşiv dosyası
    Örnekler: GetAttr("C:\TEST.DAT")
    SetAttr "C:\TEST.DAT", vbHidden + vbReadOnly





    neyse yeterince örnekli sayfalardan vermeye çalıştım açıklamalarla beraber...
    unutmayın eğer kitap gibi bişey varsa elinizde paylaşın bizimle.







  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.