102
VisualBasic Programlamaya Giriş Visual dillerden biri olan VisualBasic programlama dili ile istediğiniz programları yapmak artık zor değil. Programlarda kullanılabilecek standart işlemler birer kontrol olarak tasarlanmış olup programcının kullanımına sunulmuştur. Örneğin; Personel bilgileri girilen bir program yapılırsa, personelin adı, soyadı ,doğum yeri ve tarihi gibi bilgilerin girileceği Edit kutusu, kullanıcının neyi girmesi gerektiğini belirten Label, değişik seçeneklerden birini seçme imkanı sağlayan aşağı doğru açılan ComboBox kutusu, komut butonları, personelin bir listesini gösterecek bir liste kutusu (ListBox). Bunları kolayca forma taşıyarak programımızın ekranını tasarlayabiliriz. Tek yapılması gereken form üzerindeki kontrolleri oluşturmak için ana formun üzerinde bulunan Componentlerden ilgili ikonları seçmek ve formumuza tıklamak. Form Tasarımı Programlarda kullanılabilecek standart işlemler birer kontrol olarak tasarlanmış ve programcının kullanımına sunulmuştur. Örneğin bir listeleme programında personelin adı, soyadı, doğum yeri, doğum tarihi gibi bilgiler için birer boş kutu (Text Kutusu), kullanıcının neyi girmesini belirten yazılar (Label), meslek seçimi için daha önceden bilgilerin girildiği aşağı açılan bir liste (ComboBox), komut düğmeleri (Command Button), mevcut personel listesini gösterecek liste kutusu (Listbox); programda bulunabilecek seçeneklerdendir. İşte bu tip işleri yapmak için hazır kontrollerimiz bulunmaktadır. Bu kontrolleri uygun şekilde formumuza yerleştirerek tasarlayabiliriz. VisualBasic programını çalıştırdığınızda ilk olarak yapacağımız programın türünü soran pencere karşımıza çıkacaktır. Penceredeki ilk seçenek olan Standart EXE normal programlar için kullanılır. Bu seçeneği işaretledikten sonra düğmesine basınız. Ekranda boş bir form oluşacaktır. Ekranda görülebilen en önemli üç bileşen şunlardır. Form Penceresi Toolbox Properties Üzerinde Form1 yazan form penceresi programı oluşturacağımız ekrandır. Programın ekran görüntüsü bu form üzerinde oluşturulur. Programımızın ekranında neler bulunacağı Toolbox penceresindeki simgelerle belirlenir. Properties penceresi ile de Toolbox'tan form üzerine yerleştirilen kontrollerin bazı özellikleri belirlenir. Properties Penceresi ile Özellikleri Ayarlama 1

VisualBasic Programlamaya Giriş - Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Embed Size (px)

Citation preview

Page 1: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

VisualBasic Programlamaya Giriş

Visual dillerden biri olan VisualBasic programlama dili ile istediğiniz programları yapmak artık zor değil. Programlarda kullanılabilecek standart işlemler birer kontrol olarak tasarlanmış olup programcının kullanımına sunulmuştur. Örneğin; Personel bilgileri girilen bir program yapılırsa, personelin adı, soyadı ,doğum yeri ve tarihi gibi bilgilerin girileceği Edit kutusu, kullanıcının neyi girmesi gerektiğini belirten Label, değişik seçeneklerden birini seçme imkanı sağlayan aşağı doğru açılan ComboBox kutusu, komut butonları, personelin bir listesini gösterecek bir liste kutusu (ListBox). Bunları kolayca forma taşıyarak programımızın ekranını tasarlayabiliriz. Tek yapılması gereken form üzerindeki kontrolleri oluşturmak için ana formun üzerinde bulunan Componentlerden ilgili ikonları seçmek ve formumuza tıklamak.

Form TasarımıProgramlarda kullanılabilecek standart işlemler birer kontrol olarak tasarlanmış ve programcının

kullanımına sunulmuştur. Örneğin bir listeleme programında personelin adı, soyadı, doğum yeri, doğum tarihi gibi bilgiler için birer boş kutu (Text Kutusu), kullanıcının neyi girmesini belirten yazılar (Label), meslek seçimi için daha önceden bilgilerin girildiği aşağı açılan bir liste (ComboBox), komut düğmeleri (Command Button), mevcut personel listesini gösterecek liste kutusu (Listbox); programda bulunabilecek seçeneklerdendir. İşte bu tip işleri yapmak için hazır kontrollerimiz bulunmaktadır. Bu kontrolleri uygun şekilde formumuza yerleştirerek tasarlayabiliriz.

VisualBasic programını çalıştırdığınızda ilk olarak yapacağımız programın türünü soran pencere karşımıza çıkacaktır. Penceredeki ilk seçenek olan Standart EXE normal programlar için kullanılır. Bu seçeneği işaretledikten sonra Aç düğmesine basınız. Ekranda boş bir form oluşacaktır. Ekranda görülebilen en önemli üç bileşen şunlardır.

Form Penceresi Toolbox Properties

Üzerinde Form1 yazan form penceresi programı oluşturacağımız ekrandır. Programın ekran görüntüsü bu form üzerinde oluşturulur. Programımızın ekranında neler bulunacağı Toolbox penceresindeki simgelerle belirlenir. Properties penceresi ile de Toolbox'tan form üzerine yerleştirilen kontrollerin bazı özellikleri belirlenir.

Properties Penceresi ile Özellikleri AyarlamaBir örnekle Properties penceresinin özelliğine bakalım. Toolbox'tan formumuza 4 adet Label, 2 adet

Text Kutusu, 1 adet Combo1, 1 adet List1 ve 1 adet Command Button ekleyelim.

Şimdi Label1 nesnesini seçin ve F4 tuşuna basınız. Ekrana Label1 nesnesine ait özellikleri gösteren pencere gelir. Bu pencere Properties penceresidir ve bütün kontrollerin özellikleri buradan değiştirilir. Bu pencerede sol tarafta gördüğümüz; Color, Height gibi kelimelere properties (Özellikler) diyoruz. Sağ taraftaki 255, (none) gibi yazılarda bu özelliğin şu andaki değerini göstermektedir. Her nesnenin farklı ve ortak özellikleri vardır.

Şimdi bu özelliklerin değerlerini değiştirelim. Önce Caption yazan özelliğin karşısındaki Label1 kelimesi yerine Adı kelimesini yazınız. Aynı anda formumuzun üzerindeki Label1 üzerine de yazıldığını göreceksiniz. Bu özelliği formumuzdaki List1, Combo1, Command button' larada uygulayınız. Şimdi Combo kutusuna meslekleri girelim. Bunun için Combo1 nesnesini seçin ve F4 tuşuna basınız. Açılan menüde List özelliğinin yanındaki tuşa basınız. Ekranımıza boş bir liste gelecektir. Buraya Meslekleri yazınız. Bir alt satıra geçmek içinde Ctrl + Enter tuşuna basınız.

Programı ÇalıştırmaArtık yukarıdaki programımızın ekran tasarımı hazır. Programa hiç kod yazmadan çalıştıralım. Bunun

için F5 tuşuna basmalısınız. Artık tasarım ortamında değil çalışma ortamındasınız. Hiç kod yazılmadan kutulara yazı yazmayı, birinden kopyalayıp diğerine yapıştırmayı , formu boyutlandırmayı yapabildiğimizi göreceğiz.

1

Page 2: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Kod Yazma İlk önce programdan çıkış için gerekli kodun ne olduğunu görelim. Kodu herhangi bir yere değil o nesne üzerinde yapılabilecek değişik işlemlere göre ilgili yere yazmamız gerekir. Örneğin mouse butonun üzerinden geçtiği zaman mesaj verilmesi isteniyorsa bu kodu butonun MouseMove olayına yazılması gerekiyor. Şimdi butona basıldığı zaman programdan çıkılması için yapılması gerekenleri görelim. Bunu gerçekleştirmek için Butonun Click olayına kodumuzu yazacağız. (Butonun üzerine 2 kez tıklarsanız Click olayına gidersiniz). Buraya Sub-End Sub bloğu arasına programdan çıkmak için End yazınız. Diğer olaylara ulaşmak için ise kod pencerelerinin sağ üst köşesindeki kutuyu kullanacağız.

Şimdi Text1.Text 'te yazılan personelin adının ListBox'a eklenmesini görelim. Bunun için Butonun Caption'una ekle yazalım. Daha sonra ekle butonuna 2 kez tıklayarak Click olayına geçelim. Daha sonra Sub-End Sub bloğuna aşağıdaki kodu yazacağız.

List1.AddItem Text1.Text

Listeden bir elemanı silmek için Command2 Butonun Caption'una sil yazalım. üzerine 2 kez tıklayarak Click olayına ulaşalım ve aşağıdaki kodu yazalım.

List1.RemoveItem List1.ListIndex

yazarak F5 tuşu ile programı çalıştırınız.Böylece bir programın formunun nasıl tasarlanacağı, form üzerindeki kontrollerin özelliklerinin

(Properties) nasıl değiştirileceği ve gerekli kodun hangi olaylara (Events) nasıl yazılacağını öğrenmiş olduk. Yapacağınız bütün programlarda bu yolu izleyeceksiniz.

Hataları DüzeltmeYaptığınız programlarda eğer bir elemanı listeden seçmeden silmeye çalışırsanız. VisualBasic sizi

aşağıdaki gibi uyaracaktır.

Run-time error'5'Invalid procedure call or argument

yazan form gelecektir.VB programındaki bir prosedürün geçersiz bir parametre ile çağrıldığını belirten bir hata mesajı veriyor.

İsterseniz End düğmesini kullanarak programı sonlandırabilirsiniz. Bunun yerine Debug düğmesini kullanarak hatanın nerede olduğunu gösterebilir ve hatayı düzelttikten sonra tekrar kaldığı yerden devam etmesini sağlayabilirsiniz. Yukarıda listede seçili eleman olmadığı halde seçili eleman silinmeye çalışmasıdır. Bunu önlemek için sil butonunun Click olayına aşağıdaki kodu ekleyelim.

If List1.ListIndex < 0 Then MsgBox("Önce silinecek elemanı seçiniz.")Else List1.RemoveItem List1.ListIndex End If

2

Page 3: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

VisualBasic Ekranı ve MenüleriVisualBasic Ekranı

1. VB'e ait menüler ve araç çubukları.

2. Kullanıcının kendi programını oluşturması için gerekli form.

3. Hazır öğeleri programa yerleştirebilmek için gerekli olan Toolbox.

4. Form üzerine yerleştirilen kontrollerin özelliklerini değiştirmek için kullanılan Properties penceresi.

5. Projede bulunan dosyaları gösteren Project Explorer penceresi.

6. Program kodu yazmak için kullanılan kod penceresi.

1- VisualBasic'in Ana Formuİlk olarak VB'nin kendine ait olan aşağıdaki form görülür. Görüldüğü gibi VB diğer programlardan

farklı olarak formu sadece menülerden ve başlık çubuğundan oluşur.

2- Programcı FormuVB masa üstünde bulacağımız diğer önemli bir formda aşağıdaki gibi bir form penceresidir. Bu form

programa ait kullanıcı arabiriminin oluşturulduğu yerdir ve formun görüntüsü program çalıştığı zamanda görülecektir. Diğer dillerde programın ekran görüntüsü program çalışması esnasında oluşturulurken VB'de bu iş tasarım esnasında da yapılabilmektedir. Programda birden fazla formda bulunabilir.

Form üzerine alınan her kontrol elemanın özellikleri properties penceresinde gözükür. İstendiğinde birden fazla form ile çalışabilir.

3

Page 4: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Eğer form penceresini ekranda göremiyorsanız;1- Şu an açık olan proje olmayabilir. Yeni bir proje başlatın veya varolan bir projeyi açınız.2- Programınız çalışıyor olabilir. Run menüsünden End komutunu seçiniz.3- Form kapatılmıştır. Project penceresinden formunuzu çift tıklayınız. Eğer Project penceresini göremiyorsanız View menüsünden Project Explorer seçeneği ile önce bu pencereyi gösteriniz sonra bu pencereden formunuza ait seçeneği çift tıklayınız.

3- ToolBox Form üzerine yerleştirilecek kontrollerin tamamı Toolbox penceresinde yer alır. Bu pencereye yeni tab eklemek, silmek, ad değiştirmek gibi işlemler uygulanabilir. Form üzerine yerleştirilmek istenilen kontrolü bu pencereden seçiniz ve formunuza bir dikdörtgen şeklinde fare ile çiziniz. Aynı işlemi çift tıklama ile de yapabilirsiniz. VB'nin kontrolleri sadece Toolbox penceresinde görülenlerden ibaret değildir. VB ile birlikte gelip de bu pencerede bulunmayan kontrollerde vardır. Bunları Toolbox penceresine eklemek için Project menüsündeki Components komutu tıklanır. Böylece ekleyebileceğiniz kontrolleri gösteren pencere açılacaktır. Bu pencerede VB'ye ekleyebileceğiniz bütün kontroller bulunur. Bunlardan bir kısmı VB ile birlikte gelirken büyük bir kısmı da bilgisayarımıza kurulu olan diğer programlar aracılığıyla gelir. Bunlardan birini programa eklemek için onun başındaki kutuyu seçmeniz yeterlidir. Ayrıca bir listede yer almayan OCX dosyalarıda Browse düğmesi aracılığı ile bulunup eklenebilir.

4- Properties (Özellikler) Penceresi

Form üzerine yerleştirilen elemanların tümünün özelliklerini properties penceresinde yer almaktadır. Form üzerine bir kontrolü tıkladığınız zaman ona ait özellikler Properties penceresinde görüntülenir. Seçili olan elemanın properties pencerisine yansıyan özellikleri hem alfabetik hemde kategorik olarak listelenebilir. Kategorik olarak getirilen bölümler şunlardır:

Appearance (elemanın görünüşü ile ilgili özellikler), behavior (elemanın durumu , davranışı ile ilgili özellikler), dde, font (font ile ilgili özellikler),misc (bir gruba dahil edilemeyen farklı farklı özellikler),position (elemanın boyutları, form ve ekran üzerindeki konumları ile ilgili özellikler),Scale (Elemanın bulunduğu aralık ile ilgili özellikler).

Eğer properties penceresini ekranda göremiyorsanız View menüsünden Properties Windows komutunu seçebilir veya kısaca F4 tuşuna basabilirsiniz.

5- Project Penceresi

4

Page 5: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Bu pencerede programa dahil edilen form, module, usercontrol vb. gibi elemanların listesi yeralır. Bu pencere aracılığıyla istenilen bir forma geçiş yapmak yada istenilen bir formu yada modülü forma dahil etmek mümkün olmaktadır. Bu pencerenin sol üst kısmında yer alan 3 adet düğmenin 1.si seçili nesne ile ilgili kod penceresini açar, 2.si seçili nesnenin form tasarımını gösterir, 3.süde aynı cinsten olan form yada modülleri bir klasör prensibiyle gösterir.

Eğer form penceresini ekranda göremiyorsanız;View menüsünden Project Explorer komutunu seçiniz. Projeye dahil edilen bir form veya modülü

programdan çıkarmak için o nesneyi Project Explorer penceresinden seçin ve farenin sağ tuşu ile açılan pencereden Remove komutunu seçiniz. Projeye yeni bir dosya eklemek için de aynı pencerede sağ fare tuşu ile açılan pencerede bulunan Add menüsü altındaki seçenekler kullanılan .

6- Kod Penceresi Visual Diller programcının kendi kodunu yazacağı bir editör sunarlar. Bu editörler Windows'un kullandığı hemen hemen tüm metodları destekler. Program yazarken genellikle kodlar form üzerine yerleştirilmiş kodların olaylarına yazılır. Örneğin bir komut butonuna tıklandığında çalışmasını istediğimiz kodu onun Click olayına yazmamız gerekir. Herhangi bir kontrol için kod yazmamız gerekiyorsa; o kontrolü form üzerinde çift tıklamamız veya o kontrolü seçtikten sonra F7 tuşuna basmanız sizi o kontrole ait kod penceresine getirecektir. Bu durumu aşağıdaki örnekte daha iyi kavrayacağız.

Örnek: Bu örnekte formumuzun üzerine ToolBox penceresinden Command1 button yerleştirelim. Command1 kontrolüne çift tıklayarak kod penceresini açalım. Sub-End Sub arasına şu kodu yazalım.

MsgBox("Ali AÇIKGÖZ' den herkese selamlar ")

Kod penceresinin sağ üst köşesindeki listeyi aşağı tarafa doğru açarsanız o kontrole ait olayların listesini görürsünüz. Bu listeden bir olayı seçtiğiniz o olaya ait program başlığı da VB tarafından otomatik olarak yazılacaktır.

Kod Penceresinde Önemli ÖzelliklerDiğer Visual dillerde olduğu gibi VisualBasic'te de herhangi bir kontrol elemanının adını yazıp "."

nokta karakterine bastığınız zaman kursorun bulunduğu noktadan itibaren aşağıya doğru bir liste açılır (yukardaki resime bakınız). Burada bütün elemanların ortak olarak kullandığı özellikler ve metodlar yer almaktadır. Kullanılacak özellik bu listeden seçilmek suretiyle program satırına dahil edilir. Bu özellik programcıyı bir sürü özelliği ezberinde tutma zahmetinden kurtarır. Aşağı doğru açılan listeden istenilen özellik seçilip "=" karakterine basıldığı zaman bu defa ilgili özellikle kullanılacak ifade aynı metodla gösterilmektedir. Bu özelliğin otomatik olarak kullanılabilmesi için form üzerinde ilgili kontrolün mutlaka bulunması gerekmektedir.

7- Watches (Değişken İzleme Penceresi)Programı yazarken hata yapıldığı zaman veya sonuçların beklenenden farklı çıktığı zaman; bu gibi

durumlarda programdaki değişkenlerin değerlerini takip ederek sorunun nereden kaynaklandığını bulmak gerekir. Bu işlemler için, izlenmek istenen değişkenler Debug - Add Watch menüleri ile tanımlanır. Böylece bu değişkenler Watches penceresine eklenecektir. Bu işlemden sonra programın çalışması kesilerek değişkenlerin durumu bu pencere aracılığı ile izlenebilir. Programın çalışmasını kesmek için Ctrl+Break kullanılabilirsiniz. Kesilmek istenen satırda F9 tuşu ile kesme de bırakılabilir. Program kesildikten sonra F8 tuşuyla programı adım adım çalıştırınız. Böylece değişkenlerin durumunu Watches penceresinde gösterildiğini göreceksiniz.

8- Form Layout Penceresi

5

Page 6: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

VB ekranın sağ alt köşesinde bir monitör resmi ve içinde bir form gösterilir (Yandaki resme bakınız). Bu pencere aracılığı ile formunuzu ekranın istediğiniz konumuna alabilirsiniz.

Object BrowserView - Object Browser menü seçeneği kullanılarak Object Browser penceresine ulaşılır. Bu pencere

aracılığıyla gerek VB kütüphanesinde kullanılan tüm veriler gerekse oluşturulan proje ve bu projenin modüllerinin kullandığı tüm tip ve değişkenler hakkında bilgi sahibi olmak mümkündür. Bu pencerenin sol üst köşesindeki combo kutusu aracılığıyla VB kütüphanelerine ulaşılır. Sağdaki liste kutusunda bu kütüphanenin veri sınıfları, soldaki liste kutusunda ise ilgili veri sınıfının içerdiği fonksiyonlar, sabitler ve özellikler yer almaktadır. Pencerenin en altında ise seçili olan verinin tanımı, parametreleri ve bulunduğu kütüphane adı verilmektedir. Şimdi sol üstteki ComboBox' tan Project1 ' i seçelim. Bu işlem yapıldıktan sonra projenin içerdiği formlar, modüller ve bu modüllerde tanımlı tip ve değişkenler karşımıza çıkmaktadır.

VisualBasic Menüleri

File MenüsüFile menüsü altındaki seçenekler projede bulunan dosyaları kaydetmeye ve yazdırmaya yarar. Yeni bir

projeye başlamak için bu menüdeki New Project seçeneğini kullanarak açılan pencereden projenin türü seçilir. Daha önce kaydedilmiş bir projeyi açmak için ise Open Project seçeneği kullanılır.

KaydetmeVisualBasicte yapılan projeler birden fazla bileşenden oluşabilir. Örneğin bir projede birden fazla form

veya modül bulunabilir. Projede bulunan bütün dosyaları kaydetmek için File menüsünden Save Project seçeneği kullanılır. Kullanılan her nesne için bir isim vermeniz istenir. Bir projeyi kaydederken size hem formun adı hem de projenin adı sorulur. Her ikisi içinde aynı ismi kullanabilirsiniz. Ancak birden fazla formunuz varsa her forma ayrı bir isim vermeniz gerekecektir.

File menüsündeki diğer seçenekte Save seçeneğidir.Bu seçenek sadece aktif nesneyi kaydetmeye yarar. Yani projenizde form1 aktifse form1 ' i, form2 aktifse form2 ' yi kaydeder.

Derleyerek Çalıştırılabilir Hale GetirmeYaptığınız VisualBasic'in olmadığı bir bilgisayarda da çalışabilmesi için onu derlemeniz gerekir.

Derleme işlemi için File menüsündeki Make Project1.exe seçeneği kullanılır. Bu işlemden sonra size oluşturulacak dosyanın ismi sorulacaktır. Böylece verdiğiniz isimde EXE dosya oluşturulacaktır.

YazdırmaProjede bulunan nesneleri yazdırmak istediğiniz zaman File menüsündeki Print (Ctrl + P) seçeneği

kullanılır. Bir projede bulunan form görüntüsünü, kodu veya kontrollerin özelliklerini yazdırmak isteyebilirsiniz. VisualBasic 3 işlem içinde seçenek sunar. Eğer aktif nesneyi yazdırmak isterseniz penceredeki Current Module seçeneğini tıklayınız. Eğer projede bulunan bütün nesneleri yazdırmak istiyorsanız Current Project seçeneğini seçiniz. Eğer form görüntüsünün yazdırılmasını istiyorsanız Form Image seçeneğini işaretleyiniz. Kontrollere ait özellikleri yazdırmak isterseniz Form as Text seçeneğini işaretleyiniz.

Edit MenüsüEdit menüsü aracılığı ile kopyalama, yapıştırma, bulma, değiştirme gibi işlemler yapılabilir. Bu

menüdeki Cut, Copy, Paste, Delete komutları ile kesme, kopyalama, yapıştırma ve silme işlemlerini yapabilirsiniz.

Bul & DeğiştirEdit menüsündeki Find seçeneği kullanılır. Bu menüde bulunan Replace komutuda projedeki bir

ifadeyi başka bir ifade ile değiştirmek istediğinizde oldukça kolaylık sağlar. Yanlız her iki komutun da çalışabilmesi için kod penceresinin aktif olması gerekir. Penceredeki Current Procedure seçeneği sadece şu

6

Page 7: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

anki alt program içerisinde arama yapar. Current Module seçeneği aktif olan form veya modüle ait bütün kodlar üzerinde arama yapar. Current Project seçeneği ise projede bulunan bütün dosyalar üzerinde arama işlemini yapar.

View MenüsüView menüsünde bulunan seçenekler projeyle ilgili nesneleri gösterip gizlemek için kullanılır.

Programdaki Nesnelerin Yerini Bulma Bir forma ait kod penceresini görmek için çift tıklayabileceğiniz gibi menüdeki Code seçeneği de

kullanabilirsiniz. Kod ortamındayken ismi geçen kontrolün form üzerinde hangi kontrol olduğunu görmek isterseniz bu menüdeki Object seçeneğini kullanabilirsiniz. Programda geçen bir değişkenin nerede tanımlandığını görmek isterseniz bu menüdeki Definition seçeneğini kullanabilirsiniz.

Debug İşlemlerinde Kullanılan PencerelerBütün Diller Debug (Hata Ayıklama) işlemlerini destekler. Bu moda girilerek programlar satır satır

çalıştırılabilir ve değişkenlerin aldığı değerler takip edilebilir. Böylece programda yolunda gitmeyen şeyler çözülmeye çalışılır. Bu işlemleri yaparken bize yardımcı olacak bazı pencereler vardır.

Immediate Window seçeneği ile immediate penceresi görüntülenir. Bu pencere Debug modunda değişkenler üzerinde işlem yapmak için kullanılır.

Local Window seçeneği ile Locals penceresi görüntülenir. Bu pencere de Debug modunda kullanılır. O anda projede bulunan kontrollerin özelliklerine ait değerler bu pencereden izlenebilir.

Watch Window seçeneği ile Watch penceresi görüntülenir. Bu pencerede Debug modunda kullanılır ve Debug - Add Watch menüleri ile eklenen değişkenlerin o anki durumunu gösterir. F8 veya F7 tuşu ile adım adım çalıştırarak değişkenlerin değişimği izlenebilir.

VB Pencerelerini Gösterip / Gizleme VB ekranında daha önce görüldüğü gibi birden fazla pencere bulunur. Bunlarda çoğu programın

geliştirilmesi aşamasında işe yarar.Ancak bazen bunlardan gereksiz olanları kapatmak gerekir.Project Explorer seçeneği ile projedeki dosyaların gösterildiği kısma ulaşılır.Project Window seçeneği ile properties penceresi görüntülenir.Form Layout Window seçeneği ile formun görüntüsünü bir ekranda gösteren pencere görüntülenir.Bu pencere aracılığıyla formu ekranın istenilen bölümüne taşımak mümkündür.Property Pages seçeneği ile seçili kontrolün Custom Property sayfasına ulaşılır.Bu sayfa özellikleri topluca değiştirme imkanı verir.Toolboxseçeneğiyle kontrol elemanlarının yer aldığı Toolbox penceresi görüntülenir.Color Palet seçeneğiyle renk penceresi görüntülenir.Toolbars özelliği ile araç çubukları gösterilip gizlenilebilir.

Debug seçeneği ; araç çubuklarını gizler veya gösterir. Edit seçeneği ; edit araç çubuklarını gösterir veya gizler. Form editör seçeneği ise form editör araç çubuklarını gösterir veya gizler.

Project MenüsüProject menüsü altında projeyle ilgili işlemler için bir çok seçenek bulunur.

Add Form seçeneğiyle projeye yeni form eklenir. Böylece program içerisinde birden fazla form oluşturulabilir. Bunları aktif yapabilmek için Form2.Show gibi komutları uygun yerlere yazmanız gerekiyor.Add MDI Form seçeneğiyle projeye yeni MDI form eklenir.Add Module seçeneğiyle projeye yeni Module eklenir. Modül dosyaları genellikle tip tanımları ve genel fonksiyomlar için kullanılır.Add Class Module seçeneğiyle projeye yeni Class Module eklenir. Class Modullerle yeni nesneler tanımlamak mümkündür.Add User Control seçeneğiyle projeye yeni kullanıcı kontrolü eklenir. VB kullanıcıları kendi kontrollerini oluşturmasına imkan verir.Add Property Page seçeneğiyle yeni Property Page eklenir. Kullanıcı tanımlı kontrollerle birlikte o kontrollerin özelliklerini belirleyebilecek property sayfaları da tanımlanabilmektedir.Remove seçeneğiyle seçili olan dosya projeden çıkarılır.Components seçeneğiyle Toolbox penceresine yeni kontroller eklenebilir. Normalde VB'de kullanılan kontroller Toolbox penceresinde görünenler ile sınırlı değildir. Components menüsü yardımıyla açılan pencereden yeni kontrolleri projenize ekleyebilirsiniz.

7

Page 8: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Project Properties seçeneğiyle de proje ile ilgili özellikler ayarlanır. Projede birden fazla form varsa, çalışmaya hangi formla başlanacağı, programın kullanacağı yardım dosyasının ismi gibi bazı özellikler bu pencereden belirlenir.

Run MenüsüStart seçeneğiyle tasarımı tamamlanmış veya çalışması deurdurulmuş bir programı çalıştırır veya

kısayol tuşu F5'ten yararlanabilirsiniz.Start With Full Compile seçeneği programın tamamını kontrol ettikten sonra çalışmaya başlamasını sağlar.Break seçeneği çalışmakta olan bir programı geçici olarak durdurur. Bazen program çok üzün bir döngüye veya sonsuz döngüye girdiğinde; program kullanıcı tarafından kapatılamaz. Her zaman bu menüyede ulaşamayabiliriz. Böyle bir durumdaki programı kırmak için kısa yol tuşu olan Ctrl+Break tuşu kullanılır.End seçeneği ise çalışan bir programın çalışmasını sona erdirir.ReStart seçeneği de geçici olarak durdurulmuş bir programın çalışmasını baştan başlatır.

Format MenüsüAynı Hizaya Getirme

Align Form üzerindeki birden fazla kontrolü aynı hizaya getirmek uğraştırıcı bir iştir. Bunu VB'de kolay yapabilirsiniz. İlgili kontrolleri seçtikten sonra bu menünün alt menüleri ile kontrolleri kolayca hizalandırabilirsiniz.Lefts seçeneği elemanların sol taraflarını hizalar.Centers seçeneği ile elemanların merkez noktalarını hizalar.Rights seçeneği elemanların sağ taraflarını hizalar.Tops seçeneği elemanların üst taraflarını hizalar.Middles seçeneği elemanları üst üste getirerek orta kısımlarını hizalar.Bottoms seçeneği ise elemanların alt taraflarını hizalar.To Grid ise elemanların form üzerindeki noktalara denk gelmesini sağlar.

Boyutları EşitlemeMake Same Size: Form üzerindeki birden fazla kontrolü aynı boyuta getirmek için ilgili kontrolleri

seçtikten sonra bu menünün alt menüleri ile kontrolleri kolayca boyutlandırabilirsiniz.Width ile elemanları aynı genişliğe ayarlar.Height ile elemanları aynı yüksekliğe ayarlar.Both ile elemanları aynı yükseklik ve genişliğe ayarlar.

Aralıkları EşitlemeHorizontal Spacing: Form üzerindeki birden fazla kontrolün arasındaki yatay boşluğu ayarlamak için

bu menünün alt seçenekleri kullanılır. İlgili kontrolleri seçtikten sonra bu menünün alt menüleri ile kontrolleri kolayca aralayabilirsiniz.Make equal elemanların aralarındaki yatay boşlukları eşitler.Increase elemanların arasındaki yatay boşlukları artırır.Decrease elemanların arasındaki yatay boşlukları azaltır.Remove elemanların aralarındaki yatay boşlukları tamamen kaldırır.Vertical Spacing : Form üzerindeki birden fazla kontrolün arasındaki dikey boşluğu ayarlamak için bu menünün alt seçenekleri kullanılır.Make Equal elemanların aralarındaki dikey boşlukları eşitler.Increase elemanların aralarındaki dikey boşlukları artırır.Decrease elemanların aralarındaki dikey boşlukları azaltır.Remove elemanların aralarındaki dikey boşlukları tamamen kaldırır.Center In Form Seçeneği form üzerindeki seçili olan elemanları formun ortasına ayarlar.Order Form üzerindeki kontroller üst üste ise bunları alt alta yada üste alır. Bir kontrol başka bir kontrolün altında kalıpta gözükmüyorsa bu menü seçenekleri kullanılır.Bring to Front seçeneği alttaki elemanı üste alır.Send to Back seçeneği üstteki elemanı alta alır.Lock Controls Seçil elemanları kilitleyerek bunların yerlerinin değiştirilmemesi sağlar.

Tools MenüsüAdd Procudure: Kod penceresine Function (Fonksiyon), Sub ( lt Program , Event (Olay) ve Property

(Özellik) eklemek için kullanılır.

8

Page 9: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Menü Editor Bu olayla menü tasarım penceresine ulaşılır. Bu pencere aracılığıyla istenilen menü tasarımı yapılabilir.Options Bu seçenekle üzerinde çalışılan pencerelerle ilgili çok özellik değiştirilebilir. Açılan Pencerede; Auto Syntax Check seçeneği işaretli ise kod penceresinde yazılan program kodları otomatik olarak yazım kontrolüne tabi tutulur.Require Variable Declaration seçeneği işaretli ise kullanılacak her değişkene tanımlama mecburiyeti getirilir.Auto List Members seçeneği işaretli ise kontrol elemanlarının adı yazıldığında ilgili özellikler otomatik olarak karşımıza çıkacaktır.Auto Quick Info seçeneği işaretli ise herhangi bir fonksiyon yazıldığı zaman bu fonksiyonun içermesi gerektiği parametreler otomatik olarak gösterilerek kullanıcıya hatırlatmada bulunur.Auto Data Tips seçeneği işaretli ise, debug modunda bir değişkenin üzerinde mouse ile durulduğunda VB o değişkenin değerini gösterir.Options penceresinin Editor Format kısmında kod penceresinde yazılan ifadelerin renkleri ve font büyüklükleri ayarlanır. Ayarlanacak ifade Code Colors listesinden seçildikten sonra Foreground ile yazı rengi, Background ile de zemin rengi ayarlanır.

Debug MenüsüBu menü vasıtasıyla program içerisindeki hatalar ayıklanabilir. Bahsedilen hatalar yazım hatası değil

Mantıksal hatalardır. Program adım adım çalıştırılarak değişkenlerin durumu bu pencere vasıtasıyla incelenebilir.Step Into: Programı adım adım çalıştırmaya çalışır. Her defasında F8 tuşuna bastığınızda programdaki tek bir satır çalıştırılır. Böylece her satırın etkisi tek tek görülür.Step Over: Bu seçenekte adım adım çalıştırmaya yarar. Ancak prosedür çağrılarıda bir satırmış gibi tek satırda işlenir.Add Watch: Program çalışırken izlenecek değişkenler bu seçenekle eklenir. Eklenen değişkenlerin değeri debug penceresinde görüntülenir.Break When Value True seçeneğini işaretlerseniz program çalışır ve bu değişkene sıfırdan farklı bir değer atandığında çalışması kırılır.Breake When Value Changes: seçeneğini işaretlerseniz program çalışır ve bu değişkenin değeri değiştiği anda çalışması kırılır.Run to Cursor: Program kursorun bulunduğu yere kadar çalıştırılır ve çalışması kırılır. F8 ve F7 tuşları ile program adım adım çalıştırılır. Yalnız bu tuşlarla uzun döngülerden çıkmak çok zordur. Böyle durumlarda kürsor istenen satıra konumlandırıldıktan sonra Ctrl + F8 tuşlarına basılırsaprogram o satıra kadar gelir ve durur.Quick Watch: Bu seçenekle sadece seçilen değişkenin veya işlemin o andaki değeri öğrenilebilir.Edit Watch: Add Watch ile eklenen değişkenleri silmek veya değiştirmek için bu pencere kullanılabilir.Toggle Breakpoint: Programın bazı satırlarına BreakPoint denilen kesmeler konularak programın oraya kadar çalışıp durması sağlanabilir.Clear All Breakpoints: Tüm kesme noktalarını siler.

Değişkenler ve Veri TipleriVisual Basic’de Degişken Tanımlama

Degişken tanımlarken Visual Basic’te Dim bildiri deyimini kullanabiliriz. Değişkenin tanımlanması hafızada ayrılacak hafıza miktarının belirli olmasını sağlar. Eğer degişkenlerin tipini belirtmeden bir kullanım yaparsak bu değişkenlerin Variant tipinde olduğu kabul edilir. Bu da hafızada gereksiz yer kaybına sebep olur. Eğer tanımlanan bütün degişkenlerin tiplerinin belli olmasını isterseniz kod penceresinin General, Declarations kısmına Option Explicit yazılır.

Ayrıca değişken tanımlarken kullanılabilecek bir başka bildiri deyimide Def bildiri deyimidir. Bu bildiri deyimi daha genel tanımlamalar yapmak için kullanılır. Def bildiri deyimleri aşagıda verilmiştir.

Def bildiri deyimi projenin general, declarations bölümünde tanımlanmalıdır.DefBool : Boolean tipinde degişken tanımlamak için kullanırız.DefByte : Byte tipinde degişken tanımlamak için kullanırız. DefInt : Integer tipinde degişken tanımlamak için kullanırız. DefLng : Long tipinde degişken tanımlamak için kullanırız. DefCur : Currency tipinde degişken tanımlamak için kullanırız. DefSng : Single tipinde degişken tanımlamak için kullanırız. DefDbl : Double tipinde degişken tanımlamak için kullanırız. DefDate : Date tipinde degişken tanımlamak için kullanırız. DefStr : String tipinde degişken tanımlamak için kullanırız. DefVar : Variant tipinde degişken tanımlamak için kullanırız.

9

Page 10: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Örnek:Private Sub Form_Load()Dim Ad As StringDim Maas As CurrencyDim D_tarihi As DateDim Adres As StringDim Sira As IntegerEnd Sub

Burada görmüş olduğunuz gibi 5 adet degişken tanımlanmaktadır. Ad değişkeni string tipinde bir değişkendir. Maaş değişkeni Currency tipinde bir değişkendir. D_tarihi değişkeni Date tipinde bir değişkendir. Adres değişkeni string tipinde bir değişkendir. Sıra değişkeni integer tipinde bir değişkendir.Aşagıdaki satırları formun general, declarations bölümüne yazalım.

Örnek: DefInt A-CDefStr SDefVar KDefDate DDefSng V

Bu örnekte A , B, C ile başlayan bütün karakterler Integer türünde olmak zorundadır. D ile başlayan bütün karakterler Date türünde olmak zorundadır. V ile başlayan bütün karakterler Single türünde olmak zorundadır. K ile başlayan bütün karakterler Variant türünde olmak zorundadır. S ile başlayan bütün karakterler String türünde olmak zorundadır. Def deyimi dim deyiminden farklıdır. Def ile sadece bir harf yada harf aralıgı belirtilebilir. Burada belirtilen harf ile başlayan bütün değişkenler artık o bildiri deyimindeki tipdedir

Örnek :Private Sub Form_Load()Dim ad As String , soyad As StringDim maas As CurrencyEnd Sub

Bu örnektede ad ve soyad isimli iki degişken string türünde ve maas degişkeni ise Currency tipindedir.

Tip DöşümleriVisual Basic'de kullandıgımız sayısal değişkenleri diger veri tiplerine dönüştürebiliriz. Bu işlemi yapan

fonksiyonlara tip dönüşüm fonksiyonları adı verilir. Tip dönüşüm fonksiyonları aşagıda verilmiştir.

Fonksiyon Geri Dönen Değer Yaptığı İşlem

CBool (ifade) Boolean Matemetiksel ifadeyi Boolean türüne dönüştürür. CByte (ifade) Byte Matemetiksel ifadeyi Byte türüne dönüştürür. CCur (ifade) Currency Matemetiksel ifade Currency türüne dönüştürür. CDate (ifade) Date Matemetiksel ifade Date türüne dönüştürür. CDbl (ifade) Double Matemetiksel ifade Double türüne dönüştürür. CDec (ifade) Decimal Matemetiksel ifadeDecimal sayıya dönüştürür. CInt (ifade) Integer Matemetiksel ifade tam sayıya dönüştürür. CLng (ifade) Long Matemetiksel ifade Long türüne dönüştürür. CSng (ifade) Single Matemetiksel ifade Single türüne dönüştürür. CVar (ifade) Variant Matemetiksel ifade Variant türüne dönüştürür. CStr (ifade) String Matemetiksel ifade String türüne dönüştürür.

Aşagıda çeşitli örneklerle tip dönüşümleri açıklanmaya çalışılmıştır.

10

Page 11: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Örnek1: A=10 , B=5 , C=10 , D=0check = CBool(A < B) 'check=Falsecheck = CBool(A > B) 'check=Truecheck = CBool(A = C) 'check=Truecheck = CBool(D) 'check=Falsecheck = CBool(B) 'check=True

Örnek2 : A=10 , B=5 , C=0 check = CBytel(A < B) 'check=0check = CByte(A > B) 'check=1check = CByte(A = C) 'check=0

Örnek3 : A=1 , B=2 , C=36000 , D=36001check = CDate(A) 'check=12/31/1899check = CDate(B) 'check=1/1/1900check = CDate(C) 'check=7/24/98check = CDate(D) 'check=7/26/98

Örnek4 : A=2.4 , B=2.5 , C=2.6 , D=3.5check = CInt(AB) 'check=2check = CInt(B) 'check=2check = CInt(C) 'check=3check = CInt(D) 'check=4

Veri Tipleri Integer

Visual Basic’te tam sayı degişkenleri tanımlamak için kullanılır. Hafızada 2 byte yer kaplarlar. Alabilecegi değer aralıgı –32768 ile +32767 arasındadır. Defint bildiri deyimi ile tanımlanabilirler. Ayrıca bir degişkenin sonunda % karakteri bulunuyorsa bu degişken integer tipindedir.

Örnek :Private Sub Form_Load()Dim Maas As IntegerDefInt A-COran% = 100A_sayı = 100B_sayı = Oran*A_sayıC_sayı = B_sayı + A_sayı – 1000Maas= 32767End Sub

Eğer burada tanımlanan degişkenlere daha büyük sayılar atanırsa overflow oluşur.

Long Daha büyük bir aralıkta integer yani tamsayı tanımlamak için kullanabilecegimiz bir veri tipidir.

Hafızada 4 byte yer kaplar. Kullanılabilecek uç degerler +2,147,483,647 ile -2,147,483,648 dir. Long tipinde bir degişken tanımlamak için DefLng bildirimini veya degişken sonunda & karakterini kullanabiliriz.

Örnek :Private Sub Form_Load()DefLng A-BBölüm=50000

cıkan&=600000Kalan& = (cıkan / Bölüm ) * 10000End Sub

11

Page 12: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

SingleTam sayı olmayan küsüratlı sayılar için kullanabilecegimiz bir veri tipidir. Kayan-noktalı sayı olarak

isimlendirilir. Single tipindeki veriler bellekte 4 byte yer kaplarlar. Nekatif sayılar için alabilecegi aralık -3.402823E38 ile –1.401298E-45, pozitif sayılar için alabilecegi aralık 1.401298E-45 ile 3.402823E38 arasındadır. Single tipinde veri tanımlamak için DefSgn bildirimi veya degişken sonuna ! karakteri konur. 7 haneye kadar hassastır. Daha sonrası yuvarlatılır.

Örnek :Private Sub Form_Load()DefSgn A-BBölüm=50000 Cıkan!=600000End Sub

DoubleVisual Basic’te kullanılabilecek en büyük sayısal degerlerin veri tipidir. Hafızada 8 byte yer

kaplarlar. 16 haneye kadar hassastırlar. Maximum alabilecegi degerler pozitif sayılar için 4.94065645841247E-324 ile 1.797693134862232E308, nekatif sayılar için de -1.797693134862232E308 ile -4.94065645841247E-324 arasındadır. DefDbl bildirimi veya # sembölü ile double tipinde degişkenler tanımlanabilir

Örnek :Private Sub Form_Load()DefDbl A-KDarı=50000 Bugday=600000Arpa=340.56End Sub

Veri Yapıları Const

Bunlar program içinde degeri degiştirilemeyen sabitlerdir. Public ve Private tipinde sabitler tanımlanabiliilir. Public sabitlere tüm modüller içinden ulaşılabilir. Private türündeki sabitler ise sadece tanımlandıkları modül içersinde geçerlidirler. Ayrıca Visual Basic içinde tanımlanmış çok sayıda sabit vardır. Bunlara CONSTANT.TXT dosyasını açarak inceleyebiliriz.

Örnek :Const sehır=”Istanbul”Const Ulke="Turkey"Const posta_kodu=34650Const tek_kod=212

Type - End Type YapısıType yapısını kullanarak programıcı farklı veri tiplerini kullanarak kendi veri yapısını oluşturabilir. Bu

C deki Struct yapısına benzetilebilir. Bu yeni veri tipine record adı verilir. Herhangi bir modülün Declarations kısmında aşagıdaki gibi bir tanımlama yapabiliriz.

Örnek :Type OgrenciAd As String *10Soyad As String *12Not As ByteKredi As IntegerEnd Type

“Ögrenci veri tipi toplam hafızada 25 byte yer kaplamaktadır. Bu veri tipini kullanmak için” Ögrenci tipınde değişkenler tanımlamak gerekmektedir.

Private Sub Form_Load()Dim A As OgrencıDım B As Ogrencı

12

Page 13: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

'Bu degıskenlere bilgi atamak aşagıdaki şekildeki gibidir.A.Ad="Ali" A.Soyad ="Armer" End Sub

Visual Basic'te Döngü KomutlarıBu komutlar belirli işlemleri belirli sayıda veya herhangi bir şart sağlanana kadar tekrarlamak amacı ile

kullanılırlar. Bu komutlar aşağıda verilmiştir.

For ….. Next Döngüsü Do While …. Loop Döngüsü Do Until ……Loop Döngüsü Do …… Loop While Döngüsü Do …… Loop Until Döngüsü

Aşağıda da bu döngülerin nasıl kullanıldıkları açıklanmış ve örneklerle pekiştirilmiştir.

For Next DöngüsüBütün dillerde bulunan döngü yapısıdır. Genel yazım şekli aşagıdaki şekildeki gibidir.

For sayac=başlangıç To bitiş Step artım Arada işletilecek komutlar Next sayac

Bu döngü sayac baslangıc değerınden bitiş degerine kadar çalıştırılır. Sayaç başlangıc degerinde iken döngü içindeki komutlar işletilir. Next ifadesine gelindiginde tekrar For satırına gelinir. Sayac degeri artım kadar artırılır. Eğer Sayac degeri Bitiş değerini geçmiş ise Next adımından sonraki adım işletilir. Burada step degerine pozitif veya nekatif bir deger verşilebilir. Eger nekatif deger verilirse sayac her seferinde 1 azaltılır. Step adımını vermezsek bu pozıtif 1 (+1) anlamındadır ve her adımda sayac bir artırılacaktır. Biz içiçe For Next döngüleride kurabiliriz. Ancak burada şuda dikkat edilmelidir. En son başlatılan For döngüsü ilk önce bitirilmelidir.

For sayac1=basla1 To son1Komutlar For sayac2=basla2 To son2 Komutlar Next sayac2 Next sayac1

Biz buradaki sayıyı daha da artırabiliriz.Aşagıdaki şekideki gibi bir kullanım hatalıdır.

For sayac1=basla1 To son1 Komutlar For sayac2=basla2 To son2 Komutlar Next sayac1 Next sayac2

Burada For döngüsü işletilirken hata oluşacaktır.

Örnek : Factöriyel=1For I=1 To SayiFactöriyel= Factöriyel * INext I

Bu örnekte girmiş oldugunuz pozitif sayının faktoriyeli hesaplanmaktadır.

13

Page 14: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Do While DöngüsüBu dögünün genel yazim sekli asagidaki sekildeki gibidir.

Do While Kosul Komutlar Loop

Burada önce Kosula bakilir. Eğer kosul dogru ise aradaki satirlar çalistirilir taki Loop satirina kadar. Loop satirinda tekrar While satirina dönülür. Kosul tekrar kontrol edilir. Eger dogru ise ara satirlar tekrar çalistirilir. Kosul yanlis ise Loop’tan sonraki ilk satirdan program çalismaya devam eder. İçiçe Do While döngüleride kurabiliriz.

Do While Kosul1 …. Do While Kosul2 … Komutlar Loop ….. Loop

Her Do While için mutlaka bir Loop yerlestirmeliyiz.

Örnek : Fact=1 I=2Do While I<=SayiFact=Fact * II=I+1Loop

Buradaki örnekte te faktöriyel hesabini Do While döngüsü ile yapiyoruz. Burada sayac olarak I degeri kullaniliyor. Eğer faktöriyeli hesaplanacak deger 2 den kücükse (1 veya 0 ise) döngü içine girilmemektedir. Döngü içinde sayaç artimini kendimiz veriyoruz. Sayac sayi degerine eşit iken döngü son kez çalitiriliyor.

Do ….. Loop While DöngüsüBu döngü yapisinin genels yazim sekli asagida verilmistir.

Do ….. Komutlar ….. Loop While Kosul

Bu ifade de döngü içinde komutlar mutlaka bir defe icra edilir. Daha sonra Kosul kontrol edilir. Eğer kosul dogru ise tekrar Do satirina dallanilir ve aradaki komutlar tekrar icra edilir. Yanlis ise döngüden çikilir. Bu yapiyida içiçe kullanmamiz mümkündür.

Örnek: Fact =1 I=1DoFact=Fact *II=I+1Loop While I<=Sayi

Faktöriyel hesapini yapan bir baska örnek verilmistir.

Do Until Döngüsü

14

Page 15: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Bu döngünün genel yazım şekli aşagıdaki şekildeki gibidir.

Do Until Koşul Komutlar Loop

Burada önce Koşula bakılır. Eğer koşul yanlış ise aradaki satırlar çalıştırılır' taki Loop satırına kadar. Loop satırında tekrar While satırına dönülür. Koşul tekrar kontrol edilir. Eger yanlış ise ara satırlar tekrar çalıştırılır. Koşul doğru ise Loop‘tan sonraki ilk satırdan program çalışmaya devam eder. İçiçe Do Until döngüleride kurabiliriz. Do While döngüsünden tek farkı kosul yanlış iken çalıştırılır.

Do Until Kosul1 … Do Until Kosul2 … Komutlar Loop ….. Loop

Her Do Until için mutlaka bir Loop yerleştirmeliyiz.

Örnek : Fact=1 I=SayiDo Until I<=1Fact=Fact * II=I-1Loop

Buradaki örnekte'de faktöriyel hesabını Do Until döngüsü ile yapıyoruz. Burada sayac olarak I degeri kullanılıyor. Eger faktöriyeli hesaplanacak deger 2 den küçükse (1 veya 0 ise) döngü içine girilmemektedir. Döngü içinde sayac azaltımını kendimiz veriyoruz. Sayac 2 degerine eşit iken döngü son kez çalıştırılıyor.

Do … Loop Until DöngüsüBu döngü yapısının genel yazım şekli aşağıda verilmiştir.

Do … Komutlar … Loop Until Kosul

Bu ifade de döngü içinde komutlar mutlaka bir defa icra edilir. Daha sonra Koşul kontrol edilir. Eğer koşul yanlış ise tekrar Do satırına dallanılır ve aradaki komutlar tekrar icra edilir. Koşul dogru ise döngüden çıkılır. Bu yapıyıda içiçe kullanmamız mümkündür.

Örnek : Fact =1 I=1DoFact=Fact *II=I+1Loop While I>Sayi

Faktöriyel hesapını yapan bir başka örnek verilmiştir

Visual Basic'de Kontrol Komutları Kontrol komutları programcılar tarafından sıkca kullanılan belirli ifadeleri kontrol etmek veya bazı

şartların gerçekleşip gerçekleşmediğini kontrol etmek amacıyla kullanılan komutlardır. Biz burada en çok kullanılan komutların üzerinde duracağız.

15

Page 16: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

If Kontrol Yapısı :     Genel olarak bu komut yapısı şu şekilde yazılır. If Kosul Then Koşul doğru ise yapılması istenen işlemler. Endif Kullandıgımız her If kontrolu için mutlaka bir Endif kullanmalıyız. Bu kontrol yapısının sonlandıgını belirtir.

Örnek: If ad="FATIH" Then Maas=10000000 Endif

Eğer koşul gerçekleşmemiş ise yapılması istenen bazı işlemler varsa o zaman şu şekilde bir kontrol yapısını kullanabiliriz.

If Kosul Then Kosul dogru ise yapılması istenen işlemler. Else Kosul yanlış ise yapılması istenen işlemler. Endif

Aynı anda bir kaç koşul için karşılaştırma yapılmak isternirse;

If Kosul Then Kosul dogru ise yapılması istenen işlemler. Elseif Kosul1 Then Kosul1 dogru ise yapılması istenen işlemler. Elseif Kosul2 Then Kosul2 dogru ise yapılması istenen işlemler. Else Bütün kosullar yanlış ise yapılması istenen işlemler. Endif

yapısı kullanılır. Bu yapıda mutlaka Else bloğunun bulunmasına gerek yoktur. Burada eger Koşul doğru ise ilk Then’den sonraki satırlar çalıştırılarak Else if ifadesine kadar icra edilirler. Daha sonra End if ifadesinden sonraki satır icra edilir. Eger Kosul yanlış ise Kosul1 ifadesi kontrol edilir. Dogru ise buradaki then den sonraki satırlar çalıştırılır. Yanlış ise Kosul2’ye bakılır. Eger bu kosulda yanlıs ise Else ifadesinden sonraki satırlar çalıştırılır.

Örnek: If Isım=”Ali” Then Maas=Maas * 1.2 Elseif Isım=”Murat” Then Maas=Maas * 1.4 Elseif Isım=”Kemal” Then Maas=Maas * 1.1Endif

Örnek: If Bolen=0 ThenMsg.Text=” Bolen sayı sıfır olamaz."ElseSonuc= Sayı / BolenMsg.Text = SonucEndif

Ornek: If name="Ali" AND no="1301920035"

16

Page 17: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Not=4ElseIf name="Ahmet" AND no="1301940023" ThenNot=3ElseIf name="Hakan" AND no="1301930045" ThenNot=2ElseIf name="Hatice" AND no="1301940005" ThenNot=7Endif

Aritmetiksel Operatorler (+ , - , * , / , \ , ^ ,Mod , &)Genel olarak matematiksel işlemlerde kullanılan operatörlerdir. Bunlara kaynaştırma “&” operatörünü

de ilave edebiliriz. Şimdi bu operatörleri açıklayalım.

+ OperatörüBu operatör ile verilen iki veya daha fazla ifade toplanabilir.Genel yazılışı aşagıdaki şekilde gibidir.

Sonuc = Ifade1 + Ifade2Burda Sonuc mutlaka sayısal bir degerdir.(Eger kaynaştırma yapılmamış ise)Ifade1 çeşitli işlemlerden oluşmuş bir ifade veya bir sayıdır.Ifade2 çeşitli işlemlerden oluşmuş bir ifade veya bir sayıdır. Eger Ifade1 ve Ifade2 strıng türünde veriler ise + operatörü kaynaştırma yapar. Yani Ifade2 yi Ifade1’ın sonuna ekler. Aşagıda Çeşitli örnekler verilmiştir.

Örnek : Sonuc=13+45 'Sonuc=58Sonuc=1378+56.78+435.908 'Sonuc=1870.688A=89,B=3456Deger=A+B ' Deger=3545Ad="Ebru"Soyad=” Kayacı”Dim Name As StringName=Ad+Soyad 'Name=”Ebru Kayacı”

Karşılaştırma OperatörleriBu operatörler ile verilen ifadeler arasında karşılaştırmalar yapılır. Genel karşılaştırma operatörleri

aşagıda verilmiştir.

= operatörüBu operatör verilen iki ifadenin eşit olup olmadıgını anlamak için kullanılır. Genel yazım şekli

aşagıdaki şekildeki gibidir.

Sonuc=(Ifade11 = Ifade2) Burda Sonuc Booean tipinde bir degerdir. Ifade1 bir sayı veya bir metindir. Ifade2 bir sayı veya bir metindir. Aşagıda çeşitli örneklerle kaynaştırma operatörü açıklanmıştır

Örnek : Sonuc=(100=345) 'Sonuc=FalseSonuc=(100=100) 'Sonuc=TrueA=12,B=45Sonuc=(A=B) 'Sonuc=FalseC=23,D=23Sonuc=(A=D) 'Sonuc=True

<> operatörüBu operatör verilen iki ifadenin farklı olup olmadıgını anlamak için kullanılır.Genel yazım şekli

aşagıdaki şekildeki gibidir.

Sonuc=(Ifade11 <>Ifade2) Burada Sonuc Booean tipinde bir degerdir.

17

Page 18: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Ifade1 bir sayı veya bir metindir. Ifade2 bir sayı veya bir metindir.

Aşağıda çeşitli örneklerle kaynaştırma operatörü açıklanmıştır.Örnek : Sonuc=(100<>345) 'Sonuc=TrueSonuc=(100<>100) 'Sonuc=FalseA=12,B=45Sonuc=(A<>B) 'Sonuc=TrueC=23,D=23Sonuc=(A<>D) 'Sonuc=False

< operatörüBu operatör verilen birinci ifadenin ikinci ifadeden küçük olup olmadıgını anlamak için kullanılır.

Genel yazım şekli aşagıdaki şekildeki gibidir.Sonuc=(Ifade11 < Ifade2) Burda Sonuc Booean tipinde bir degerdir. Ifade1 bir sayı veya bir metindir. Ifade2 bir sayı veya bir metindir. Aşagıda çeşitli örneklerle kaynaştırma operatörü açıklanmıştır.

Örnek : Sonuc=(100<345) 'Sonuc=TrueSonuc=(100<100) 'Sonuc=FalseSonuc=(100<130) 'Sonuc=FalseA=12,B=45Sonuc=(A<B) 'Sonuc=TrueC=23,D=23Sonuc=(A<D) 'Sonuc=False

> operatörüBu operatör verilen birinci ifadenin ikinci ifadeden büyük olup olmadıgını anlamak için kullanılır.

Genel yazım şekli aşagıdaki şekildeki gibidir.

Sonuc=(Ifade11 > Ifade2) Burda Sonuc Booean tipinde bir degerdir. Ifade1 bir sayı veya bir metindir. Ifade2 bir sayı veya bir metindir. Aşağıda çeşitli örneklerle kaynaştırma operatörü açıklanmıştır.

Örnek : Sonuc=(800>345) 'Sonuc=TrueSonuc=(100>100) 'Sonuc=FalseSonuc=(100>130) 'Sonuc=FalseA=90,B=45Sonuc=(A>B) 'Sonuc=TrueC=23,D=23Sonuc=(A>D) 'Sonuc=False

=> operatörüBu operatör verilen birinci ifadenin ikinci ifadeden büyük veya eşit olup olmadıgını anlamak için

kullanılır. Genel yazım şekli aşagıdaki şekildeki gibidir. Sonuac=(Ifade11 => Ifade2) Burada Sonuç Booean tipinde bir degerdir. Ifade1 bir sayı veya bir metindir. Ifade2 bir sayı veya bir metindir. Aşagıda çeşitli örneklerle kaynaştırma operatörü açıklanmıştır.

Örnek :

18

Page 19: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Sonuc=(800=>345) 'Sonuc=TrueSonuc=(100=>100) 'Sonuc=TrueSonuc=(100=>130) 'Sonuc=FalseA=90,B=45Sonuc=(A=>B) 'Sonuc=TrueC=23,D=23Sonuc=(A=>D) 'Sonuc=True

<= operatörüBu operatör verilen birinci ifadenin ikinci ifadeden büyük olup olmadıgını anlamak için kullanılır.

Genel yazım şekli aşagıdaki şekildeki gibidir.

Sonuc=(Ifade11 <= Ifade2) Burda Sonuc Booean tipinde bir degerdir. Ifade1 bir sayı veya bir metindir. Ifade2 bir sayı veya bir metindir. Aşagıda çeşitli örneklerle kaynaştırma operatörü açıklanmıştır.

Örnek : Sonuc=(800<=345) 'Sonuc=FalseSonuc=(100<=100) 'Sonuc=TrueSonuc=(100<=130) 'Sonuc=TrueA=90,B=45Sonuc=(A<=B) 'Sonuc=FalseC=23,D=23Sonuc=(A<=D) 'Sonuc=True

And OperatörüLojik iki ifadenin karsilastirilmasi için kullanilir. Iki ifadenin'de dogru olmasi gereklidir. Genel yazim

sekli aşağidaki gibidir.

Sonuc=Kosul1 And Kosul2

Burada Sonuc herhangi bir sayisal tipde degiskendir. Kosul1 herhangi bir ifadedir. Kosul2 herhangi bir ifadedir. And operatörünün dogruluk tablosu asagidaki sekildeki gibidir.

İfade1 İfade2 Sonuc=İfade1 And İfade2 False False False False True False True False False True True True True Null Null Null True Null False Null False Null False False Null Null Null

And operatörü ayni zamanda bitwise comparison islemide yapilabilir.

İfade1 İfade2 İfade1 And İfade2 0 0 0 0 1 0 1 0 0 1 1 1

19

Page 20: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Örnek : Sonuc = (False And False ) 'Sonuc=FalseSonuc = (Null And False ) 'Sonuc=FalseA=True , B=TrueSonuc = (A And B ) ' Sonuc=TrueA=1 ,B=0Sonuc = (A And B ) ' Sonuc=0A=1 ,B=1Sonuc = (A And B ) ' Sonuc=1A=1,B=4Sonuc = (A And B ) ' Sonuc=0A=1,B=3Sonuc = (A And B ) ' Sonuc=1A=1,B=5Sonuc = (A And B ) ' Sonuc=1A=1,B=8Sonuc = (A And B ) ' Sonuc=0

DizilerAynı tür bilgileri bellekte tutmak için kullanabilecegimiz listelere dizi adı verilir. Dizi kullamanın

avantajı aynı tür bilgiler bir listede tutularak daha hızlı işlem yapılabilmesi saglanmış olacaktır. Visual Basic'de dizi şu şekildedir.Dizi_adı(İndis) olacaktır.

Örnek: Private Sub Form_Load()Dim ad(2) As StringDim no(2) As Integerad(0) = "ali"ad(1) = "ahmet"ad(2) = "ebru"no(0) = 133no(1) = 56no(2) = 67End Sub

Bu örnek'te ad ve no olmak üzere iki adet dizi tanımlanmaktadır. Ad dizisi string türünde bilgileri tutacak ve no dizisi ise integer türündeki bilgileri saklayacaktır. Görmüş olgunuz gibi dizilere bilgi atama şekli.dizi_adı(indis_sırası)=atanacak_bilgi şeklindedir.

Eğer diziyi sıfırdan değilde bir den itibaren başlatmak istersek diziyi tanımlamadan önce Option Base 1 satırını eklemeliyiz.

Burada dizi indisleri sıfırdan başlayarak tanımlama yaparken bizim belirtigimiz degere kadardır. Yani bizim bu dizilere atayabilecegim veri sayısı diziyi tanımlarken belirtdigimiz indis degerinden bir fazla olacaktır. Eger değer atama yaparken belirttigimiz sınırların dışına çıkarsak hata oluşur. Dizilere deger atarken dizi sınırlarını kontrol etmekle olası bir hatayı önlemiş oluruz.

Statik Diziler Bu tip dizilerde kullanılacak yer sayısı sabittir. Bu tip diziler sadece tanımlandıkları modül içersinde

kullanılabilirler. Statik dizi şu şekilde tanımlanabilir.Dim dizi_adı(sayi) As Veri_Tipi

Tüm proje içinde kullanılacak bir dizi tanımlanmak isterse standart modülün General,Declarations bölümünde yukarıdaki şekildeki gibi tanımlanmalıdır.

Örnek : Option Base 1Dim a(5) As Integer

20

Page 21: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Private Sub Command1_Click()Text1.Text = a(1) + a(2)End SubPrivate Sub Form_Load()a(1) = 10a(2) = 20End Sub

Bu örnekte görüldügü gibi projenin general, declarations kısmında a() dizisi tanımlanıyor. Bu dzi tanımlanmadan önce dizi indislerinin 1 den itibaren başlıyacagını belirten Option Base1 satırı koda dahil edilmiştir. Form1 yüklendiginde bu dizinin ilk elemanınna 10 sayısı ikinci elemanına 20 sayısı atanıyor. Eğer kullanıcı Command1 isimli butona tıklarsa dizinin ilk ce ikinci elemanları toplanarak Form üzerinde Text1 adlı nesnenin Text özelligine atanıyor. Yani TextBox'ın bu sayıların toplamını göstermesi sağlanıyor.

Dinamik DizilerBu tip dizilerde kullanılacak yer sayısında bir sınırlama yoktur. Bu tip diziler ilk başta şagıdaki

şekildeki gibi bir tanımlamaya ihtiyaç duyarlar.Dim dizi_adı( ) As Veri_Tipi

Daha sonra bu dizi kullanılacak iken botunu belirtmek gerekir bunun içinde aşagıdaki gibi bir tanımlama yapılmalıdır.ReDim dizi_adı(boyut ) As Veri_Tipi Artık bu veri dizisini projemiz içinde kullanabiliriz.

Örnek : Option Base 1Private Sub Form_Load()Dim s() As StringEnd SubPrivate Sub Command1_Click()ReDim s(10) As Strings(1) = "Selam "s(2) = "Ayşe"Text1.Text = s(1) + s(2)End Sub

Bu dizi tanımlanmadan önce dizi indislerinin 1 den itibaren başlıyacagını belirten Option Base1 satırı koda dahil edilmiştir. Form1 yüklendiginde s adlı bir dinamik dizi tanımlanmaktadır. Kullanıcı Command1 isimli butuna tıkladıgında s dizisinin boyutu belirtilerek yeniden tanımlanmıştır. Bu dizinin ilk elemanınna "Selam " değeri ikinci elemanına "Ayşe" değeri atanıyor. Dizinin ilk ve ikinci elemanları toplanarak form üzerinde Text1 adlı nesnenin Text özelligine atanıyor. Yani TextBox'ın bu degerlerin toplamını göstermesi sağlanıyor.

Örnek : Option Base 1Private Sub Form_Load()Dim s() As StringEnd SubPrivate Sub Command1_Click()ReDim s(10) As Strings(1) = "selam"s(2) = "fatih"Text1.Text = s(1) + s(2)End SubPrivate Sub Command2_Click()ReDim s(5) As Strings(2) = "fatih"Text1.Text = s(1) + s(2)End Sub

21

Page 22: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Bu örnekte yukarıdaki örnekten tek farklı yan olarak bir Command butonun arkasına yazılmış kod bulunuyor. Eğer kullanıcı Command1 adlı butondan sonra bu butona tıklarsa ne olacak ona bakalım. Command2 butonuna tıklanıldıgında s() dizisi tekrardan boyutu 5 olrak tanımlanıyor. s() dizisine daha önce atamış bütün değerler siliniyor. Yani s() dizisi bir nevi boşaltılıyor ve yeniden boyutlandırılıyor. Eger s() dizisine daha önce atanmış degerler korunmak istenirse aşagıdaki şekildeki gibi bir tanımlama yapılmak zorundadır.ReDim Preserve s(boyut) As Veri_tipi

Select CaseBu kontrol yapısında sadece bir degişkenin durum kontrolü yaılır.Kontrolü yapılacak degişkenin genel

olarak alabilecegi degerler belirli ise bu yapının kukllanılması If yapısına göre daha avantajlıdır. Yazılış biçimi genel olarak aşagıdaki şekildeki gibidir.

Select Case Degisken Case Deger1 Degisken=Deger1 oldugu durumda yapılması istenen işlemler Case Deger2 Degisken=Deger2 oldugu durumda yapılması istenen işlemler Case Else Degisken yukarıdaki degerler den hicbirine eşit degil ise yapılacak işlemler End Select Kullandıgımız her Select ifadesi için bir End Select kullanmalıyız.

Örnek : Select Case NoCase 1304Name="Murat Tuna"Case 1306Name="Ayse Sinem"Case 1307Name=”Hakan Kaya”Case 1312Name=”Abdullah Kahyalı”Case 1324Name="Hatice Uygun"End Select

Örnek : Select Case AyCase 1Max_date=31Case 2Dim Artık as IntegerArtık = Yıl Mod 4If Artık=0 ThenMax_date=29ElseMax_date=28EndifCase 3Max_date=31Case 12Max_date=31Case ElseMesaj=”Error : Bir yılda 12 ay vardır.”End Select

Data Form Wizard ile Form HazırlamakTablolara bilgi girişi sırasında kullanmanız gereken formu ve gerekli ayarlamaları Data Form Wizard

yardımı ile otomatik hazırlayabilirsiniz. Data Form Wizard'ı başlatmak için Add-Ins menüsünden Add-In Manager 'i seçiniz. Karşımıza gelen diyalog kutusunda VB Data Form Wizard onay kutusunu seçili duruma

22

Page 23: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

getirecek olursanız, veri giriş formu hazırlamada kullanılan Data Form Wizard, Add-Ins menüsünde bir komut ile temsil edilir. Şimdi Project menüsünden Add Form'u seçelim. Açılan dialog kutusunda VB Data Form Wizard'ı seçiniz. Böylece Data Form Wizard çalışmaya başlar. Şimdi sizinle birlikte bir form hazırlayalım.

İlk önce Add-Ins menüsünden Add-In Manager'den VB6 Data Form Wizard'ı seçelim. Daha sonra Project menüsünden Add Form'u seçelim. Burada VB Data Form Wizard'ı seçiniz. Açılan pencereyi Next tuşuyla geçelim. Açılan pencerede Database formatını seçilecektir. Biz Access'ta çalışacağımız için Access'ı seçiniz ve Next tuşuna basınız. Açılan pencerede oluşturduğumuz Databese Name'in adresini gireceğiz. Biz buraya hazır format olan Biblio.mdb'yi girdik ve Next tuşuna bastık. Açılan pencerede Single Record'u seçeceğiz. Eğer tablodaki kayıtların Excel Tablosu olarak ekrana getirilmesini istiyorsanız Grid'i, Kayıtlar birden fazla tablodan alınacaksa Master/Detail seçilmelidir. Single Record'u seçtikten sonra Next tuşuna basınız açılan pencerede Record Source kısmında tablo seçimi yapılır. Biz hazır Authors'u seçtik. Authors tablosunda bulunan alanlar Available Columns liste kutusunda listelenir. Tabloda bulunan alanları ucu sağa bakan tuşla tek tek Selected Fields kısmına dahil edebilrsiniz. Böylece alanları tek tek formumuza dahil etmiş olduk. Daha sonra Next tuşuna basınız. Ekrana Control Selection penceresi gelir. Burada Tablo üzerinde işlem yaparken kullanılacak düğmeleri seçmeye gelir. Burada formumuza yeni bir kayıt eklemek istemiyorsak Add Button onay kutusunun seçili olma özelliğini kaldırmalısınız. Daha sonra Next tuşuna basınız. Çıkan pencerede Finish butonuna bastığınızda Data Form Create penceresi açılır. Bu formu Ok butonuna basarak kapatınız. Böylece tablomuz Data Form Wizard ile otomatik olarak hazırlandığını göreceksiniz. Tasarım halindeki formumuzda Add butonunun ismini Ekle, UpDate butonunun ismini Güncelle, Delete butonunun ismini Sil, Refresh Butonunun ismini Yenile, Close butonunun ismini Formu Kapat olarak Caption özelliklerini değiştiriniz. F5 kısayol tuşuna basarak formumuzu çalıştırın.

Veri Tabanı Dosyası Üzerinde İşlem Yapmak Data Kontrolü

VisualBasict'te veri tabanı dosyaları üzerinde işlem yapmaya yönelik Data kontrolü vardır. Formumuza eklediğimiz Data kontrolü sayesinde veri tabanı dosyaları üzerinde hertürlü işlem kolay yapılabilir. Şimdi Toolbox menüsünden Formumuza Data kontrolü ekleyelim. Data1 kontrol nesnesinin üzerindeki ok işareti olan düğmelerden veri tabanının kayıtları arasında dolaşırken yararlanılır. Data kontrolü ile veri tabanı dosyası arasında bağlantı kurulmadan Data nesnesinin bir işlevi olmaz. Forma eklenen Data kontrolü ile veri tabanı dosyası üzerinde bağlantı Data kontrolün Properties özelliğinden DataBaseName özelliğinden yararlanılarak yapılır. Daha sonra Add-Ins menüsünden Visual Data Manager'den yararlanarak önceden Access'de hazırlamış olduğum veri tabanın açalım. Data1 kontrolünün DataBaseName kısmına hazırlamış olduğum personel.mdb'yi seçtim. Daha sonra Data1 kontrolünün RecordSource özelliğine bilgilerin hangi tablodan oknumasını istiyorsak onu seçeceğiz. Benim hazırlamış olduğum tabloda personeller 'i seçiyorum sizde kendi oluşturduğunuz tablonun ismini seçiniz. Böylece Data Kontrolü ile personel.mdb ismindeki veri tabanı dosyası arasındaki bağlantı kurulmuş olur. Tablonun açılması ile birlikte kayıt okuma kafasının ilk kayıda konumlanması sırasında Data nesne ile ilgili olarak Reposition olayı meydana gelir. Bu özellikten yararlanarak aşağıdaki kodları ekleyelim. Burada Fields ve Value parametrelerinden yararlanacağız. Data1 Kontrol Reposition kısmına daha önce oluşturduğum alanları formda göstermesi için aşağıdaki kodları yazacağım. Sizde kendi veri tabanınızdaki alanlar için benzer kodu yazınız.

Önceden oluşturduğum personel.mdb nin personeller tablosunda adı,soyadı, adresi , telefonu, ceptelefonu, şehir gibi alanlar bulunmaktadır. Şimdi bunu formda görüntülemek için Data1 Kontrolün üzerine çift tıklayınız ve sağ ComboBox'ta Reposition'u seçiniz.Sub-End Sub kısmına aşağıdaki kodu yazacağım.

Show Cls FontName="Arial"FontSize="12"Print "Personelin Adı :"; Data1.Recordset.Fields("Adı").ValuePrint "Personelin Soyadı :"; Data1.Recordset.Fields("soyadı").Value Print "Personelin Adresi :"; Data1.Recordset.Fields("Adresi").Value Print "Personelin Telefonu :"; Data1.Recordset.Fields("Telefonu").ValuePrint "Şehir :"; Data1.Recordset.Fields("Sehir").Value

yazdıktan sonra F5 kısayol tuşu ile formumuzu çalıştırınız. Görüldüğü gibi bilgiler formumuzun üzerine yazılmıştır. Data kontrol ile kayıtlar arasında ileri geri hareket edebilirsiniz. Şimdi formumuzu biraz daha geliştirelim. Formumuza Command Button koyalım ve Caption özelliğini İleri olarak değiştirelim. Butona çift tıklayarak Click özelliğini açalım.ve buraya aşağıdaki kodu yazalım.

23

Page 24: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Data1.Recordset.MoveNextBu kodla birlikte bir sonraki kayda gidebiliriz. Aynı şekilde formumuza 2. butonu yerleştirelim ve

Caption özelliğini Geri olarak değiştirelim. Daha sonra Click olayına aşağıdaki kodu yazalım.Data1.RecordSet.MovePrevious

Bu kodla birlikte bir önceki kayda gidebiliriz. Yine İlk kayda gitmek için 3.butonu formumuza ekleyelim. Click olayına aşağıdaki kodu yazalım.

Data1.RecordSet.MoveFirst

Bu kodla birlikte ilk kayıta gidebiliriz.Daha sonra 4.butonu formumuza ekleyelim. Caption özelliğini En Son Kayıt olarak değiştirelim ve aşağıdaki kodu Click olayına yazalım.

Data1.RecordSet.MoveLast

Bu kodla birlikte en son kayda gidebiliriz.Şimdi Formumuzu biraz daha geliştirelim. Yukarıda veri tabanımızdaki bilgileri formumuzun üzerine yazdırmıştık. Şimdi de Formumuza Text'ler ve Labeller yerleştirerek gerçekleştirelim. Data1 Kontrol nesnesini DataBase Name'ine hazırlamış olduğunuz veri tabanını dosyasının adresini ve Record Source kısmına tablonun adını (benim hazırladığım tablo personeller) seçiniz. Daha sonra Text kutusuna gelerek DataSource özelleğini Data1 seçiniz. Daha sonra Text kutusunun DataField özelliğinden alanın adını seçiniz. (sırayla Adı, Soyadı vb.) Labellerin Caption'unuda Personelin Adı, Personelin Soyadı vb. şekilde değiştiriniz. Böylece Text Kutularımızı Data1 Kontrolüne bağlamış olduk. Formumuzu çalıştırdığımızda Data1 Kontrol ok tuşlarıyla ileri geri veri tabanında hareket ettiğimizde Text kutusunda bilgilerin göründüğünü ve değiştiğini görürüz. Eğer Formumuza İleri, Geri Butonları koyarsak yukardaki şekilde herbirine kodlar yazmamız gerekir.Bir tane örnek verecek olursak;Formumuza 1 tane buton ekleyelim ve Caption özelliğini İlk Kayıt olarak değiştirelim ve Click olayına Aşağıdaki kodu yazalım.

MsgBox ("Tablonun İlk Kaydı Üzerindesiniz")Data1.Recordset.MoveFirst

Böylece ilk kayıda geçildiği zaman bizi İlk kaydın üzerindesiniz diye uyaran pencere karşımıza çıkacaktır.

Tabloya Yeni Kayıt GirmekFormumuza yeni bir buton ekleyelim ve Caption'unu Yeni Kayıt olarak değiştirelim. Daha sonra

Butonun Click olayına aşağıdaki kodu yazınız.

Data1.RecordSet.AddNew

Böylece bu kod ile yeni kayıt girişi yapmış oluruz.

Tablodan Bir Kayıt SilmekBunun için Formumuza yeni bir buton ekleyiniz ve Caption özelliğini Kayıt Sil olarak değiştiriniz.

Daha sonra Click olayına aşağıdaki kodu yazınız.

MsgBox ("Bir kayıt Silmek Üzeresiniz")Data1.Recordset.DeleteData1.Recordset.MovePrevious

Burada programı çalıştırıp Kayıt Sil tuşuna bastığımızda Bir Kayıt Silmek Üzeresiniz yazılı uyarı penceresi açılır. Data nesneleri ile ilişkilendirilen söz konusu nesnelerin içerikleri güncelleşmediği için Data1.Recordset.MovePrevious yazdık.

Yeni Eklediğimiz Kayıttan VazgeçmeFormumuza yeni buton ekleyiniz ve Caption'unu Vazgeç olarak değiştiriniz.Daha sonra Click olayına;

Data1.RecordSet.CancelUpDate

24

Page 25: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

kodunu yazınız. Böylece Yeni bir kayıt girip bundan vazgeçtiğimizde işimize yarar.

Kayıt GüncellemeFormumuza yeni buton ekleyiniz ve Caption'unu Kayıt Güncelleme olarak değiştiriniz. Daha sonra

Click olayına;

Data1.RecordSet.UpDate

kodunu yazınız. Böylece yeni bir kayıt girip bunu güncellemiş olduk.

ValiDate OlayıData Kontrol nesnesinde ValiDate olayı meydana gelmektedir. Bütün işlemlerin Validate özelliğinden

yararlanılarak yapılması önerilmektedir. Validate yordamı dışarıdan Action ve Save adında iki parametre almaktadır.

Validate olayında MoveNext methodu kullanılırsa bir sonraki kayda gitmeden temsil eden yordam işletilir ve bu yordama Action parametresi ile 3 sayısal değeri gönderilir.

Data nesnesine Delete metodu uygulanmak istenirse silme işlemi öncesinde Data nesnesine ait Validate yordamı otomatik olarak işletilir .Bu sırada ValiDate yordamına Delete metodunu temsilen 7 sayısal değeri gönderilir.Şimdi Data1 Kontrolüne çift tıklayalım ve Validate olayına aşağıdaki kodu yazalım.

Dim Cevap As IntegerIf Action = 7 Then Cevap = MsgBox("Bu Kayıt Dosyadan Silinsinmi?", 4)If Cevap = 7 ThenAction = 0End IfEnd If

Formumuzu çalıştırıp Kayıt Sil butonuna bastığımızda Bu Kayıt Dosyadan Silinsinmi? diye uyarı penceresi açılır. Bu pencerede Evet butonuna bastığımızda kayıt silinir. Hayır Butonuna bastığımız zaman ise kayıt silinmez. (Kendi Formunuzda da bu Validate olayını deneyiniz)

Tabloda Kayıt Aramak

Formumuza yeni buton ekleyelim ve Caption özelliğini Kayıt Bulma şeklinde değiştirelim.Click olayına aşağıdaki kodları yazalım.

Authors$ = InputBox("Aranacak Kişinin Adı :")Olcut = "Authors ='" & Authors$ & "'"Data1.Recordset.FindFirst Olcut

ve General Declarition kısmınada

Dim Olcut as String

yazalım.

Tablodaki Kayıt Sayısını ÖğrenmekFormumuzun Click olayına aşağıdaki kodu yazalım.

MsgBox Data1.Recordset.RecordCount

başlangıçta RecordCount özelliği 1 değerini içermektedir. Herhangi bir kayıtların arasında dolaşıldığında RecordCount özelliği kayıt sayısı ile ilgili doğru değeri gösterir.

Query-Sorgu HazırlamakBu bölümde Add-Ins menüsünde Visual Data Manager'den yararlanacağız. Açılan menüde Open

DataBase'den veri tabanınızı açın. Yeni sorgu hazırlamak için kısayol menüsünden New Query (Database Window'ın içine sağ tıklayarak) komutunu vermek gerekir. Kısayol menüsünden New Query komutunu

25

Page 26: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

verirseniz sorgu yapısının belirlendiği Query1 Builder diyalog kutusu ekrana gelir. Çok sayıda seçeneğin bulunduğu Query Builder diyalog kutusunda, üzerinde çalışılan veri tabanı dosyasında bulunan tablolar Tables liste kutusunda listelenmektedir. VB’de amaçla ilk olarak Tables liste kutusunda sorguya temel oluşturacak tablo veya tablolar seçilir. Seçilen tabloda bulunan alanlar Fields to Show liste kutusunda listelenir. Şimdi Tables kısımından Personeller tablosunu seçtim. Daha sonra FieldName'den Personelin Adı' nı seçtim. Operator kısmında '=', Value kısmında Bahadır'ı seçtim. Eğer "And" veya "Or" bağlacı ile 2. bir kriter yapmak istiyorsanız And Into Criteria veya Or Into Criteria düğmelerine tıklamanız gerekir. Ben And Into Criteria'ya tıkladım ve Criteria kısmına Personel Adı='Bahadır' yazıldı. Hazırladığınız sorguyu test etmek istiyorsanız Run düğmesinde ve sorguyu veri tabanı dosyasına kaydetmek istiyorsanız Save düğmesine tıklamanız gerekir. Daha sonbra Close düğmesinde tıklama yaparak Query Builder diyalog kutusunu kapatınız. Hazırlanan sorgu Visual Data Manager penceresi içinde listelenmeye başladı. Hazırladığınız sorguyu Data Manager penceresinde iken açabilir, sorgu yardımıyla sorguya temel oluşturan tablodaki kayıtlarda değişiklik yapabilirsiniz. Diğer taraftan yeni bir sorguyu hazırlamak için DataBase penceresinden ait kısayol menüsünden New Query komutunu vermek yerine Utility menüsünden Query Builder komutunu verebilirsiniz.

Program Kodu Yazarak Sorgu HazırlamakFormumuzun General Declaracition kısmına aşağıdaki kodları yazalım.

Dim Dosya As DatabaseDim Tablo As RecordsetDim Sorgu As QueryDef

Daha sonra önceden oluşturduğum personel.mdb'ye ulaşmak için formuma Text ve Labeller koydum.Daha sonra Form Click olayına aşağıdaki kodu yazdım.

Set Dosya = OpenDataBase("D:\personel.mdb")Set Sorgu = Dosya.CreateQueryDef("Sorgu", "SELECT * FROM personel;")Set Tablo = Dosya.openRecordSet("Sorgu")Form1.Text1 = Tablo.Fields("Personelin Adı")Form1.Text2 = Tablo.Fields("Personelin Soyadı")Form1.Text3 = Tablo.Fields("Personel Adresi")

Data Manager penceresinde daha önceden hazırlamış olduğunuz bir sorgunun üzerine mouse'ın sağ tuşu ile tıklama yaparsanız sorgu ile ilgili kısayol menüsü gelir. Kısayol menüsündeki Open komutu sorguyu açar, Delete komutu ile sorgu silinir, Rename komutu ile de sorgunun adını değiştirebilirsiniz. Sorguya ait kısayol menüsünden Design komutunu verirseniz sorgunun hazırlanması sırasında kullanılan ve SQL dilinde yazılmış olan program satırları Visual Data Manager penceresinin sağ tarafındaki SQL Statement penceresinde yazılır. Design komutu verildikten sonra SQL Statement kısmına SELECT * FROM personeller WHERE Personelin ADI ="Bahadır" yazınız.

Bu sırada Execute tuşuna basarak sorguda yaptığınız değişikliğin etkisini görürsünüz. Şimdi Formumuzun Load kısmına aşağıdaki kodu yazalım.

Set Dosya = OpenDataBase("D:\personel.mdb")Set Tablo = Dosya.openRecordSet("Sorgu")Form1.Text1 = Tablo.Fields("Personelin Adı")Form1.Text2 = Tablo.Fields("Personelin Soyadı")Form1.Text3 = Tablo.Fields("Personel Adresi")

kodunu yazınız. Daha sonra Formumuza buton yerleştirin. Captionunu Sonraki Kayıt olarak değiştirin ve aşağıdaki kodu yazınız.

Tablo.MoveNextForm1.Text1 = Tablo.Fields("Personelin Adı")Form1.Text2 = Tablo.Fields("Personelin Soyadı")Form1.Text3 = Tablo.Fields("Personel Adresi")

Formumuza 2. buton yerleştiriniz ve Caption'unu Kayıt Sil yapınız. Daha sonra Butonun Click olayına aşağıdaki kodu yazınız.

SQL$="DELETE FROM Personel WHERE Personel Adı='Bahadır';"Dosya.Execute SQL$

26

Page 27: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Data Kontrolü ile Birlikte SQL Kodu KullanımıDaha önceki bölümde de Data Kontrol nesnesinden bahsetmiştik. Biraz hatırlatmak maksadıyla; Data1

kontrolünün DataBaseName özelliğine veri tabanı yolunu tanımlıyorduk. RecordSource kısımınada veri tabanında bulunan tabloları listeliyorduk. RecordSource özelliğine tablo adı seçmek yerine tablo ve kayıt seçimi yapmak için SQL kodu yazabilirsiniz.

Şimdi formumuza yerleştirdiğimiz Data1 Kontrolünün DataBaseName kısmına personel.mdb'nin yolunu yazalım. RecordSource kısmına Select * From [Personel ADI] yazalım.Daha sonra Project menüsünün Component DBGrid formumuza yerleştirelim ve DataSource özelliğini Data1 yapalım. Formu çalıştıralım. Görüldüğü gibi Data1 kontrolünün RecordSource kısmına yazmış olduğumuz kodun işlediğini görmüş olduk.

VisualBasic'te Rapor HazırlamakVisualBasic ile birlikte VisualBasic projeleri dahilinde veya başka bir program ile hazırlanan veri tabanı

dosyalarından rapor hazırlamak amcıyla kullanılan Crystal Reports adında bir rapor üreticisi verilmektedir. Rapor üreticisi için VisualBasic bilgisayara kurulurken ayrıca bir Başlat menüsünde bir komut hazırlandığından VisualBasic çalışmıyor iken bile Crystal Reports uygulamasını başlatabilirsiniz. Visual Basic çalışır durumda iken Add-Ins menüsündeki Report Designer komutu ile rapor üreteci başlatılabilir. Rapor üreteci başladıktan sonra Crystal Report uygulaması ekrana bir pencere içinde gelir. Crystal Reports ile kolay bir şekilde profosyonel kalitede raporlar hazırlayıp Visual Basic projeleri içinde kullanabilirsiniz. Crystal Reports ile hazırlanan rapor dosyalarına RPT uzantısı verilmektedir. Yeni bir rapor hazırlamak için File menüsünden New komutu verilir. File menüsünden New komutu verirseniz ekrana Create New Report diyalog kutusu gelir. Create New Report diyalog kutusunda rapor hazırlama yardımcısı (Expert) seçilmektedir. Hazırlamak istediğiniz rapor Create New Report diyalog kutusunda birer düğme ile temsil edilen rapor hazırlama Expert' lerinden hangisine yakınsa onu seçmeniz gerekir. Standart bir rapor hazırlamak istiyorsanız Standart düğmesinde, çapraz sorgu hazırlamak istiyorsanız Cross-Tab düğmesini ve mektup etiketleri hazırlamak istiyorsanız Mail Label düğmesini seçmeniz gerekir. Custom düğmesine tıklama yaparsanız Create New Report diyalog kutusunun alt kısmına 5 düğme daha eklenir. Şimdi Standart Expert'ten yararlanarak basit bir rapor düzenliyelim.standart butonuna basınız. Karşımıza 1. adımı temsil eden dialog kutusu geldi. Rapor hazırlama sihirbazının ilk adımını temsil eden bu diyalog kutusunda hazırlanmak istenen rapora kaynaklık edecek veri tabanı dosyası seçilmektedir. Bu diyalog kutusunda rapora kaynaklık edecek veri tabanı dosyası seçilip Done veya Add düğmesine basılırsa rapor hazırlama Expert'in 2. adımını temsil eden diyalog kutusu ekrana gelir.

Rapor hazırlama Expert'in 2. adımını temsil eden diyalog kutusunda seçilen veri tabanı dosyasındaki tablolar birer liste kutusu ile temsil edilmektedir. Rapor hazırlama işleminin bir önceki adımına geçmek için Back düğmesine tıklama yapabilirsiniz. Rapor Hazırlamanın 1.adımında kullanmadığınız tabloları Delete tuşuyla silebilirsiniz. Eğer birden frazla veri tabanından bilgi derleyecekseniz tekrar Data File butonuna basarak veri tabanı dosyası seçimi yapılan Choose Database File diyalog kutusunu tekrar ekrana getirebilirsiniz. Ekranda rapor hazırlama Expert'in 2. adımını temsil eden diyalog kutusu varken Next butonuna tıklama yapıp rapora dahil edilecek alanların seçildiği sekmeye geçebilirsiniz. Diyalog kutusunda gördüğünüz gibi tablodaki alanlar Database Fields liste kutusunda listelenmektedir. Raporda yer almasını istediğiniz alanları Add düğmesine tıklayarak raporunuza dahil edebilirsiniz.Allbutonu ile bütün alanları raporda göstermiş olursunuz. Remove alanları göstermekten vazgeçeriz. Rapora dahil edilen alanların adları aynı zamanda sütun başlığı olarak kullanılmaktadır. Eğer alan adlarından farklı sütun başlıkları kullanmak istiyorsanız. Report Fields liste kutusunda alan seçimi yaptıktan sonra Column Heading metin kutusuna başlık metnini yazabilirsiniz. Next tuşuna basarak 4. adıma geçelim.4. adımda Sort sekmesinde raporda yer alacak bilgilerin nasıl sıralanacağı ve nasıl bir gruplama yapılacağı konusunda seçim yapılmaktadır. Hazırladığım Raporda Personellerin Adına göre siralanmasını istediğim için Add düğmesi ile Group Fields liste kutusuna kopyaladım.

Sort sekmeninde kayıtların nasıl sıralanacağı ve gruplanacağı konusunda seçim yapıldıktan sonra Total sekmenine (5. adım) geçilir. Total sekmeninde sayısal bilgi içeren alanların içeriğinin toplanması konusunda seçim yapılmaktadır. Rapora dahil edilecek bilgileri herhangi bir alana göre toplamak istemediğim için bu adımı direk geçtim.6. adım olan Select sekmeninde raporda yer almasını istediğiniz kayıtları filtre edebilirsiniz. Kayıt filtre etme işlemin hangi alana göre yapmak istiyorsanız o alanı Add düğmesi ile Report Fields liste kutusundan Select Fields liste kutusuna kopyalamanız gerekir. Ben örnek olarak Personel ADI'nı filtreledim. Daha sonra aşağıdaki any Value. değerini equal to yaptım ve açılan metin kutusuna Bahadır* yazdım.Daha sonra 7. adıma geçtim. Style sekmeninde rapor biçiminden başka bir rapora verilmek istenen başlık Title metin kutusuna yazılabilir. Bu işlemden sonra Preview Report düğmesine tıklanarak rapor hazırlanır. Cyrstal Reports uygulamasından çıkmadan önce hazırlanan raporun kaydedilmesi gerekir. Bunun için File menüsündeki Save komutundan yararlanılır. Save komutunu verirseniz File Save As diyalog kutusu gelir. Ben hazırlamış olduğum raporu personel.rpt olarak kaydettim. Sizde oluşturduğunuz raporu kaydediniz.

Report Kontrolü

27

Page 28: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Cyrstal Reports programı ile yukarıda anlattığım şekilde hazırlanan rapor dosyalarından yararlanılarak ekrana ve yazıcıya raporlar almak mümkündür. Ancak bu yeterli değildir. Crystal Reports ile hazırlanan RPT uzantılı rapor dosyalarının VisualBasic projeleri dahilinde kullanılabilmesi gerekmektedir. Bunun için üzerinde çalışılan projeye Crystal Reports kontrolünü temsil eden özel kontrol dosyasının eklenmesi gerekir. VisualBasic'in Project menüsünde Components komutu ile ekrana gelen Components diyalog kutusunda Crystal Report kontrolü üzerinde çalışılan projeye dahil edilince Toolbox penceresine rapor kontrolünü temsil eden düğme eklenir. (Cyrstal Report Control ...) ToolBox penceresinde Crystal Reports kontrolünü temsil eden düğme seçili duruma getirildikten sonra üzerinde çalışılan projenin aktif formuna rapor nesnesi eklenebilir. Formun üzerinde Crystal Reports nesnesini çalışma anında görünmediği için tasarım anında sabit boyutlara sahip olur. Forma eklenen ilk Crystal Reports nesnesine Crystal Report1 adı verilmektedir. Rapor nesnesinin adı nesneye ait Name değişkeninde tutulmaktadır. Tasarım anında rapor nesnesine istenilen ad verilebilir. Forma eklenen Report nesnesine kaynaklık edecekm RPT uzantılı rapor dosyasının adı Report nesnesine ait ReportFileName adlı değişkene aktarılır. Yanındaki üç noktaya tıklarsak; Property Pages penceresi açılır. Buradan Raporumuzun yolunu tanımlıyoruz. (Önceden hazırladığım personel.rpt'nin yolunu tanımladım). Bu pencerede eğer raporu ekranda görmek istiyorsak To Window, yazıcıdan çıkarmak isterseniz To Printer, Raporun içeriğini bir dosyaya yazmak istiyorsak To File radyo butonunu seçmemiz gerekir.

Tasarım anında ToolBox'tan yararlanarak üzerinde çalışılan projenin aktif formuna dahil edilen Report nesnesini çalışma anında formun üzerinde görünmez. Bu nedenle Report nesnesi için önceden tanımlı olan herhangi bir yordam veya olay yoktur. Dolayısıyla Report nesnesinden yararlanmak için bazı ek işlemlerin yapılması gerekir. Report nesnesi ile rapor almaya başlamak için Report nesnesine ait Action değişkeninden yararlanılır. Action değişkenine 1 değeri aktarılacak olunursa rapor alınmaya başlanılır. Şimdi bunu deneyelim. Formumuza bir buton ekleyelim ve Click olayına aşağıdaki kodu yazalım.

CrystalReport1.Action = 1

Formumuzu çalıştıralım. Çalışma anında ekran görüntüsünde raporun görülmediği gözükmektedir. Raporlama butonuna bastığımızda hazırlamış olduğumuz raporu ekranda görürüz. Raporun kağıt üzerinde tam görüntüsü ekrana getirilir. Bu ekran görüntüsünde Rapor penceresinin herhangi bir başlığı yoktur. Rapor penceresine başlık vermek istiyorsanız Report nesnesine ait WindowTitle özelliğinden yararlanmalısınız. Bu değişkenin içeriği tasarım anında Properties penceresinde ve çalışma anında program kodu yazılarak değiştirilebilir. CrystalReport1'i seçip Properties özelliğinde WindowTitle'ye Personel Listesi 2001 yazdım. Sizde raporunuza uygun isim yazınız. Raporunuza Page Header ( Cyrstal Reports tasarım halinde ) fare ile tıklayarak rapora başlık verebilirsiniz.

Cyrstal Repots'ta Raporun başlığı için Font ve Punto seçimi için Format menüsündeki Font komutundan, resim eklemek için Insert menüsündeki Graphics komutundan yararlanabilirsiniz. Insert menüsündeki komutlar ile rapora kutular, resim dosyaları, metin kutuları vb. dahil edilebilir. Rapora sayfa numarası eklemek için Insert menüsünden Special Field-Page Number Field ve raporun her sayfasına günün tarihinin yazılmasını sağlamak için Insert menüsündeki Special Field-Print Date Field komutlarından yararlanılır. Cyrstal Repots'ta Details kısmına veri tabanı dosyasından okunacak bilgiler için alanlara (Fields) yer verilir.

Visual Basic ile ses dosyalarınızı çalmak

Visual Basic'i kullanarak Windows ses dosyalarını (WAV) çalabilmeniz için, önceki sayfalarda üstünde oldukça durduğumuz Api fonksiyonlarına ihtiyacınız var. İlk olarak bu fonksiyonu kullanarak ufak bir program yaptık.Bize gerekli olanlar: 1) Dosya seçiminde kullanacağımız bir sürücü listesi, 2) Dizin listesi ve dosya listesi, 3) Bir de seçilen dosyayı görebilmemiz için gereken bir etiket.Formunuzun üstüne bunları gösterildiği biçimde yerleştirin ve hemen kodlarımızı yazmaya başlayın...

Ses dosyalarını çalabilmek için öncelikle bir ses kartına ya da sesleri PC hoparlöründen dinleyebilmek için bir sürücüye ihtiyacınız var. İşte ses dosyalarını çalabilmeniz için gereken API fonksiyonu ve parametreleri. Bunları iyice inceledikten sonra programımızı yazmaya başlayabilirsiniz. Declare Function sndPlaySound Lib "MMSYSTEM.DLL" (ByVal ses$, ByVal<ozellik%) As Integer

Parametreler

28

Page 29: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

ses$ Çalınacak ses dosyasını belirtir. Eğer ses dosyası belirtilmezse o anda çalan dosya durdurulur.

özellik%Bu değişken yerine ses dosyasının nasıl çalınacağını belirten aşağıdaki sabitlerden biri kullanılmalıdır.

SND_SYNCSistem olaylarını durdurur. Program kontrolü ses dosyası çalındıktan sonra geri döner.

SND_ASYNCSes arka planda çalar. Program kontrolü ses dosyasının hemen başında geri döner.

SND_NODEFAULTEğer belirttiğiniz ses dosyası bulunamadıysa hata mesajı verilmeden programa geri dönülür.

SND_LOOPÇalmak istediğiniz ses dosyası sndPlaySound fonksiyonuna boş bir değer verene kadar tekrar eder. Eğer

bu özelliği kullanıyorsanız aynı zamanda ses dosyasını geri planda çalmaya yarayan SND_ASYNC fonksiyonunu kullanmalısınız.

SND_NOSTOPEğer herhangi bir ses o anda çalınıyorsa istediğiniz dosya çalınmaz ve bu fonksiyonu atadığınız değer

anında 0 (False) olur. Bu özellik aynı zamanda o anda bir sesin çalınıp çalınmadığını anlamanıza da yardımcı olur.Not: sndPlaySound fonksiyonu eğer belirttiğiniz dosya sorunsuz olarak çalınırsa 1 değerini döndürür.

Gelelim programımızın kodlarına. Aşağıdaki birinci paragraf programın diğer modüllerinden ayrı bir yere yazılmalıdır. (WAVCAL.BAS gibi.)

Declare Function sndPlaySound Lib "MMSYSTEM.DLL" (ByVal ses$, ByVal ozellik%) As IntegerGlobal Const SND_SYNC = &H0Global Const SND_ASYN = &H1Global Const SND_NODEFAULT = &H2Global Const SND_LOOP = &H8Global Const SND_NOSTOP = &H10

Sub Form_Load ()ChDir "c:\windows" label1.Caption = ""file1.Pattern = "*.wav" ' Sadece WAV uzantılı dosyalarımız listelensinEnd Sub

Sub Drive1_Change ()dir1.Path = drive1.Drive ' Sürücü değiştiğinde dizin listesini yenileEnd Sub

Sub Dir1_Change ()file1.Path = dir1.Path ' dizin değiştiğinde dosya listesini yenileEnd Sub

Sub File1_Click ()ses$ = dir1.Path + "\" + file1.FileName If Mid$(ses$, 4, 1) = "\" Then ' Eğer ana dizindeysek araya \ karakterini sokmases$ = dir1.Path + file1.FileNameEnd If

Burada Genel Dialog kutusunu kullanmamamızın bir dez avantajını görüyorsunuz. Her ne kadar bu kodu yazmadan programımız çalışsa da liste kutumuz ana dizini gördüğünde ses dosyamızın yerini bulmakta bir sorun yaşanacaktır. Yani yukarıdaki kod parçası her seferinde bu sorunu gidermek için kullanılabilir. label1.Caption = " Ses: " + ses$ozellik% = SND_ASYNC And SND_NODEFAULT

29

Page 30: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

X% = sndPlaySound(ses$, ozellik%)End Sub 

Visual Basic ile Kes - Kopyala -Yapıştır!Windows altında çalışan hemen hemen tüm metin editörleri panoyu

kullanır. Panoya veri yapıştırmayı, panodan veri almayı geçen aylarda verdiğimiz örneklerle iyice açıkladık. Peki metin editörleri metinin hangi parçasının seçildiğini nasıl anlıyor. Metnin belirli bir kısmını nasıl kesip alıyor? İstenilen metni bütün bir yazı içinde nasıl buluyor? Bu dediklerimizi yapmak için Visual

Basic ile hazırlanmış tüm metin editörleri hemen hemen aynı teknikleri uygular.

İşte bunlardan bir kaçı:Metnin, kullanıcı tarafından seçilen kısmının anlaşılıp panoya kopyalanması için (Kopyala)

ClipBoard.SetText screen.ActiveControl.SelTextMetnin, kullanıcı tarafından seçilen kısmının anlaşılıp panoya kopyalanması ve seçilen yerin silinmesi için (Kes)

ClipBoard.SetText screen.ActiveControl.SelText ' Seçilen metni ilk önce kopyalascreen.ActiveControl.SelText = "" ' Sonra işaretlenen yeri sil.

Panodan yapıştırılan kısmın kullanıcı tarafından seçilen kısmın üzerine yazılması için(Yapıştır) screen.ActiveControl.SelText = ClipBoard.GetText()

Metnin belirtilen kısmını anlamak ve metnin herhangi bir kısmını otomatik olarak seçtirmek için SelText komutunu, metnin hangi kısımdan seçilmeye başlanacağını tayin etmek için SelStart komutunu, Seçilecek metnin uzunluğunu ayarlamak için ise SelLength komutunu kullanıyoruz. Hatırlayacağınız gibi Microsoft Word kullanılırken CTRL+A tuş kombinasyonu tüm metni otomatik olarak seçebiliyordu. Sadece ufacık bir kod parçasıyla bunu gerçekleştirebiliriz.

text1.SelStart = 0 ' SelStart komutu metnin işaretlenen kısmının nereden'başlayacağını belirtir. Biz işaretlemeye metnin 'başından başlamak istiyoruz...

 text1.SelLength = Len(text1.Text) 'Metnin işaretlenen kısmı metnin uzunluğu kadar olacak

Peki metin editörleri uzun bir yazının içinde istediğimiz kelimeyi nasıl arayıp buluyorlar?

Bunu anlamak için aşağıdaki kodu bir inceleyin.

Dim ara, nerede ' Kullanacağımız değişkenleri atayalım' Kullanıcıdan aranacak metni iste

ara = InputBox("Aranacak metni girin:", "Metin Teknikleri Örneği", , 1000, 1000)nerede = InStr(text1.Text, ara) ' Metni yazı içinde araIf nerede Then ' Bulunursa...text1.SelStart = nerede - 1 ' Bulunan metnin başını işaretletext1.SelLength = Len(ara) ' Bulunan metnin uzunluğu kadar yazıyı işaretleElse ' Metin bulunamazsa...MsgBox "Metin bulunamadı!", 64End If

Bütün bunları bildikten sonra oturup kendi metin editörünüzü kolayca yazabilirsiniz...

KeyPreview?

Visual Basic ile program yaparken sık sık başvurduğunuz Properties kutucuğundaki bir özellik hiç dikkatinizi çektimi? KeyPreview... Bu özellik sadece formları biçimlendirirken karşınıza çıkar. Ne işe yaradığına gelince, klavyeden girdiğiniz tuş vuruşlarının Visual Basic'ten önce programınız tarafından algılanmasını sağlar. Bunu yapabilmek için ise ilk önce bu özelliğin değerini True yapmalı sonra da formunuzun anlayacağı tuş vuruşlarını programınıza tanıtmalısınız. Örneğimizi uygulamak için öncelikle boş form üzerine de bir text kutusu yaratın ve formun General - Declarations kısmına aşağıdaki sabitleri yazın.

Option ExplicitConst KEY_F1 = &H70

30

Page 31: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Const KEY_F2 = &H71Const KEY_ESCAPE = &H1B

Şimdi de bu yukarıda belirttiğiniz tuşlara basıldığında neler olacağını tayin edelim. Yukarıda belirtmediğiniz tuşlara bastığınızda (Aşağıda bunları kullanmış olsanız bile) Formunuz bunu daha önceden olduğu gibi sıradan tuş vuruşları olarak algılayacaktır.

Sub Form_KeyDown (KeyCode As Integer, Shift As Integer) Select Case KeyCode Case KEY_F1: Text1.text = Date$ ' F1 tuşuna basıldığında metin kutusundaki metin ' silinsin ve yerine tarih atansın. Case KEY_F2: Text1.Text = Time$ 'F2 tuşu ise metin kutumuza zamanı yazsın Case KEY_ESCAPE: Unload Me ' ESC tuşumuz ise aktif formu bellekten atsın. End SelectEnd Sub

Programlarınızda kullanabileceğiniz diğer tuş kodlarını Visual Basic ile gelen ve tüm diğer sabitlerin bulunduğu CONSTANT.TXT dosyasından bulabilirsiniz. Ayrıca yukarıda belirttiğimiz tuşları diğer tuş kombinasyonlarıyla da kullanabilirsiniz (Örnek CTRL+ALT+F5 gibi.)

Liste kutusuna yatay kaydırma çubuğu eklemek!Aralarından seçim yapabileceğimiz verileri listelemek için Liste kutularını kullanırız. Ama eminim

aranızda bu kontrolün bir özelliğinden çok yakınanlarınız vardır. Bildiğiniz gibi bu kontrol yatay kaydırma çubuklarını kabul etmez. Ama artık şu meşhur Api fonksiyonlarından birini kullanarak bunun üstesinden gelebiliriz. SendMessage(hWnd%, LB_SETHORIZONTALEXTENT, wParam%, lParam&)hWnd% - Liste kutusunun kontrolünü alırwParam% - Liste kutusunun kaç piksele kadar kaydırılabileceğini tayin eder.lParam% - KullanılmazNot: Bu Api fonksiyonu sadece büyük harflerle yazılan sabitle kullanılır.

Bu fonksiyonu daha iyi açıklayabilmek için üzerinde bir liste kutusu bir de komut butonu olan bir form yaratın, sonra da aşağıdaki kodları ilgili yerlere girin. 'Formun General - Declarations bölümüne yazılacak ve her sabit tek satırda olacak

Declare Function SendMessage& Lib "user" (ByVal hWnd%, ByVal wMsg%, ByVal wParam%, ByVal lParam&)Declare Function GetFocus Lib "User" () As IntegerSub Command1_Click ()Const LB_SETHORIZONTALEXTENT = &H400 + 21 'Sabitler...Const NUL = &O0ScaleMode = 3List1.SetFocusListHwnd% = GetFocus()' İlk karşımıza gelecek değişkenListString1$ = "PCWORLD "' Bu değişkeni görebilmek için ise liste kutusunu yana doğru biraz kaydırmalısınız.ListString2$ = "Türkiye'de Bir numara !" ExtraPixels% = TextWidth(ListString2$)BoxWidth% = TextWidth(ListString1$) + 50 ' Liste kutumuzun boyutlarını tekrar belirleyelimList1.Move List1.Left, List1.Top, BoxWidth% ' Yatak kaydırma çubuğumuzu ekleyelim ve sınırlarını çizelimX& = SendMessage(ListHwnd%, LB_SETHORIZONTALEXTENT, BoxWidth% + ExtraPixels%, NUL) ' Örneğimizi liste kutusuna ekleyelim....List1.AddItem ListString1$ + ListString2$End Sub

31

Page 32: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Bu kadar kolay!

VB 4.0 Sistem Programcıları İçin Enterprise Sürümü

Enterprise sürümü nedir?Enterprise sürümü Microsoft’un VisualBasic 1.0’dan itibaren sürdürdüğü bir gelenektir. VisualBasic 1.0

ile başlayan bu sürümün amacı sistem programcılarının, client/server uygulamaları yaratan grupların ve Network ortamları için program yazan programcıların ihtiyaçlarını karşılamaktır. Bunu karşılamak içinde bu dediklerimizi gerçekleştirebilecek program geliştirme araçlarına ve harici komutlara ihtiyaç vardır.

Ana amaçları bunlar olan bu sürümün yapabildikleri bunlarla kalmıyor tabii. Bu yeni sürümle birlikte Remote Automation (Uzaktan kontrol) adı verilen yeni bir sistem ile OLE Otomasyonunu kullanan paylaşılabilir ve yeniden kullanılabilir bileşenler yaratabilir ve bunları programlarınıza yapıştırabilirsiniz. Bunların yanında programcıların sıklıkla başvuracakları yardımcı programlar ve kataloglar bu yeni pakete eklenmiş.

Enterprise sürümünün ilk olarak ilgimizi çeken özelliklerinden biri de birlikte getirdiği kaynak kitaplar ve referanslar. Bu kitaplarda Client/Server uygulamaları yaratmak, OLE Otomasyonu, DDE ve SQL kullanımı ve bunun gibi bir çok konuya yönelik ayrıntılı bilgiler ve örnekler bulabilirsiniz. Microsoft’un çok üstünde durduğu yeniliklerden biri de RDO (Remote Data Objects) ve RDC (Remote Data Control)’dur. Bu iki özellik uygulamalarınızın, ODBC veri kaynaklarına herhangi bir lokal veritabanı sorgulayıcı (Microsoft Query gibi.) kullanmadan ulaşabilmelerini sağlar. Bunun anlamı; ağ birimlerindeki client/server veritabanı motorlarına ulaşırken sağlanacak gözle görünür artış ve esnekliktir. RDO ve RDC, ODBC verilerine ulaşabildiği gibi aynı zamanda karmaşık tabanlar kullanan Microsoft SQL Server ve Oracle gibi veritabanı ortamlarının avantajlarından yararlanabilecek biçimde tasarlanmıştır...   Enterprise paketi ile birlikte büyük programcı grupların programlarını çabucak geliştirmekte kullanacakları akıllı aygıtlarda verilmiştir. Visual Source Safe bunlardan biridir...

Visual SourceSafe Nedir?Visual Basic’in Enterprise sürümü, geliştirilmiş bir kaynak kod kontrol sistemi; Visual SourceSafe ile

birlikte gelir. Bu sistem, program geliştiren büyük gruplar için tasarlanmış kullanımı kolay bir alt programdır. Program, üzerinde çalışılan uygulamaya yapılan her bir değişikliğin kaydını tutar, böylece kullanılan dosyalar, (kod modülleri gibi) tekrar kullanılabilir, yapılan değişiklikler ve hatalar kolaylıkla geri alınabilir. Program dosyalara yapılan her bir değişikliğin kaydını tuttuğundan, programcılar isterlerse üzerinde uğraştıkları herhangi bir dosyanın ne gibi değişikliklere uğradığını görebilir, hatta dosyayı eski haline getirebilirler. Visual SourceSafe her büyüklükte projeyi ve çok kullanıcılı sistemleri rahatlıkla kaldırabilecek yetenektedir.

Visual Basic 4.0’ı tanıtırken değindiğimiz yeniliklerden biri de Object Browser’dı. Object Browser’ı kullanarak kod parçalarını ve kontrol özelliklerini programınızın ilgili modülüne kolayca yapıştırabilirsiniz…

Object Browser Nedir?Object Browser, yarattığınız uygulamanın herhangi bir modülünde veya uygulamanızda yararlandığınız

herhangi bir kütüphanede, kullanabileceğiniz sınıfları, özellikleri ve methodları gösterir. Object Browser’ı kullanarak, bunların haricinde, faydalandığınız kütüphanelerdeki methodları ve özellikleri sadece Paste seçeneğini kullanarak hiç zahmetsiz programlarınıza yapıştırabilirsiniz...

Object Browser, formunuzu oluşturan kontrolleri tanıyabildiği gibi Toolbox’a eklediğiniz herhangi bir WINDOWS nesnesini de tanıyabilir. (Medya aygıtı, Paintbrush resmi v.b.)

Remote AutomationOLE Otomasyonu kullanan ağ birimleri kurmak, ortak bilgileri ve programları kullanmak için ideal bir

yoldur. Enterprise paketini, OLE kullanan bir ağ birimine kurduğunuzda VB bunu görecek ve ağ biriminindeki her bir programcıya programı kullanması için izin verecektir. Remote Automation kullanılarak, ağ ortamlarında

32

Page 33: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

fazla zaman harcamadan, OLE kullanan Client/Server uygulamaları programlanabilir. Enterprise Sürümünde özellikle bu uygulamaları yaratabilmeniz için gereken komutlar ve bunlar hakkında ayrıntılı açıklamalar vardır. Component Manager (Bileşen Yöneticisi) Nedir?

Enterprise sürümünde, özellikle Ağ programcılarının hayatlarını kurtaracak yan programlara ve komutlara yer verilmiştir. Bileşen yöneticisi bunlardan biridir. Microsoft Component Manager'ı kullanarak:

1. Ağ ortamlarının her bir kısmındaki OLE hizmetçilerinin yerlerini tayin edebilir.

2. Birbiriyle ilişkili OLE Nesnelerini gruplayabilir ve katalog haline getirebilir.

3. Visual Basic Projelerinizde kullanmak üzere OLE hizmetçilerini harekete geçirebilir

4. Ağ ortamlarındaki OLE hizmetçileri hakkında ayrıntılı bilgilere sahip olabilirsiniz.

Visual Basic 4.0 ile gelen yenilikler

Veri ızgaraları, veri listeleri...Veritabanı dosyalarınızı görüntüleyebilmek için eskiden genellikle ızgara kontrolü kullanılırdı. Visual

Basic 4.0 ile ise yeni kontroller olan DBGRID, DBLIST ve DBCOMBO’yu kullanabilirsiniz Bu kontroller özellikle verilerin görüntülenmesi ve direk veri alışverişi için tasarlanmıştır. Aslında VB3.0 ile gelen OLE kontrolüde de iyi bir veri sorgulayıcıdır ama yine de yeni kontrollerin kolaylığını ve verileri listelemedeki üstünlüğünü yakalayamıyor.

OLE OtomasyonuVisual Basic4.0'ın OLE kontrolünü kullanarak WINDOWS altında çalışan diğer programların

işlevselliğini "ödünç" alabilirsiniz. Eğer kullanmak istediğiniz nesne bir OLE nesnesi ise VB ile bu nesnenin methodlarını ve özelliklerini tıpkı bir VB kontrolü gibi kullananbilirsiniz. Her bir OLE nesnesi bir apartman dairesi gibidir, nesneleri ve onların programlarınıza kattığı fonksiyonları kullanarak apartmanı oluşturursunuz. Örneğin, OLE'yi kullanarak Microsoft Excel'i bir hesaplama ortamı, Microsoft Word'u ise dökümanları yaratmakta kullanan bir uygulama yaratmak o kadar da zor değil. VB4.0 ile artık herhangi bir WINDOWS nesnesini (Örneğin bu nesne bir Microsoft Excel hesap tablosu olsun) Toolbox'a sürükleyip sonradan ona kolayca ulaşabilirsiniz. ToolBox'dan nesneyi alın... bunu formunuza yapıştırıp bir programla bağlantı kurduğunuzda;

1. İster bir daha kullanılmak üzere, kurduğunuz "bağlantıyı" bir dosyaya kaydeder 2. İster bağlantı halinde olmayan nesnenizi tamamiyle bir dosya haline getirir. 3. İster bağlantı içindeki verileri diğer uygulamayla eş zamanlı olarak değiştiren ve kaydeden bir ortam

yaratırsınız.

Tekrar-kullanılabilir nesnelerVB4.0 ile herbiri kendi özelliklerine ve methodlarına sahip olan "tekrar-kullanılabilir" nesneler yani

"sınıflar" yaratabilir ve bunları Visual Basic4.0'ın yeni özelliklerinden biri olan "sınıf modüllerine" katabilirsiniz. (Tıpkı kütüphaneler gibi...)

32Bit veriyolu desteği ve Conditional Compilation Şartlı derleme uygulamalarınızın değişik WINDOWS platformlarına uyum sağlıyabilmesi için

tasarlanmıştır. WINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından, örneğin

16Bitlik bir işletim sisteminde yazdığınız programınız 32Bitlik ortama geçtiğinde bu farklılıklardan dolayı çalışmayabilir. Hatırlayacağınız gibi VB4.0'ı tanıtırken "Şartlı derlemeye" değinmiştik. Şimdi sıra bunu uygulamaya geldi. Geçin bilgisayarınızın başına ve aşağıdaki birkaç satırlık kaynak kodu yazın. Programı çalıştırdığınızda, size kaç bitlik bir işletim sistemi kullanıldığını söyleyecektir.

Private Sub Form_Load()#If Win16 Then MsgBox "Kullandığınız İşletim sistemi 16 Bit", , "Şartlı derleme örneği." 'İşletim sistemi 16Bit. Komutlar...#ElseIf Win32 Then MsgBox "Kullandığınız İşletim sistemi 32 Bit", , "Şartlı derleme örneği." 'İşletim sistemi 32Bit. Diğer komutlar...#Else

33

Page 34: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

'İşletim sistemi iki platforma da uymuyor. Komutlar...#End IfEndEnd Sub

Şartlı derlemeyi sadece nesnelerde ve olaylarında değil sabitlerin ve fonksiyonların tanımlanmasında da kullanabilirsiniz. Aşağıdaki örnekte olduğu gibi:

General - Declarations#If Win32 ThenGlobal Const...Declare Function...Declare Sub (...#ElseGlobal Const ...Declare Function...#End If

Windows95 ile gelen yeni kontrollerVisual Basic4.0 (32Bit) içinde Windows95 ile gelen yeni kontrolleri de barındırır. (Maalesef sadece

32Bitlik sürüm için geçerli) Örneğin programlarınızın içinde yeni kontroller olan liste, ağaç görüntülerini, bir durum çubuğunu, alet kutularını, bölmeli dialog kutularını ve Slider kotrolünü kullanabilirsiniz. Hatırlayacağınız gibi WINDOWS95'in Write'ı olan WordPad RTF (Rich Text Format) kullanıyordu. Yeni Visual Basic de bu kontrolü barındırıyor. RichTextBox'u formunuza yapıştırdıktan sonra üzerinde çalıştığınız dosyayı kaydedin... Dosya bu formatta kaydedilecektir. Böylece, artık bir text kutusu üzerinde birden fazla font büyüklüğü, renk ve özellik kulannabileceksiniz.

Bir Form üzerinde birden çok görüntü kullanabilmekÖyle zamanlar olur ki projenize bir form daha eklemek ya da başka bir form’u

çağırmak istemezsiniz. Ya da, aranızda VB ile çağırılan formların yavaş yüklendiğini düşünenler olabilir. O zaman biz de buna bir çözüm bulalım. Sadece resim kutularını kullanarak form üzerinde değişik görüntüler yaratabilir form üzerindeki kontrollerin yerlerini sadece resim kutularının yerlerini değiştirerek tayin edebilirsiniz. Öncelikle aşağıdaki 1.resimde görülen formu oluşturun. Görülen kontrolleri resimde görüldüğü gibi iki ayrı resim kutusu üzerinde (sınırları içine) yerleştirin.

Kontrolleri yerleştirdikten sonra formu sağ tarafından daraltarak ikinci resim kutusunun ve üstündeki kontrollerin görülmemesini sağlayın. Programı çalıştırın ve opsiyon kutularını kullanarak formun görünen kısmındaki değişimi görün. İşte programınızın kodları. Oldukça kısa...

 Private Sub Form_Load()Option1.Value = 1 ‘Opsiyon kutucuğu - 1’in değerini "doğru" yap.End SubPrivate Sub Option1_Click()Picture1.Visible = True ‘1.resim kutusunu görülür yap.Picture2.Visible = False ‘2.’ni kaybet.Picture1.Move 150, 150 ‘1.kutucuk seçilirse 1. Resmi görülür hale getir.End SubPrivate Sub Option2_Click()Picture2.Visible = True ‘2.resim kutusunu görülür yap.Picture1.Visible = FalsePicture2.Move 150, 150 ‘2.kutucuk seçilirse 2. Resmi görülür hale getir.End Sub

Izgara Etiketleri

34

Page 35: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Excel kullananlar bilirler; bir hesap tablosunun yan ve alt kaydırma çubuklarını ne kadar kaydırırsanız kaydırın hesap tablosunun sonu bir türlü gelmez. Bununla birlikte çubuğunu her kaydırdığınızda yeni harfler ve sayılar gelir. Visual Basic ile gelen ızgara kontrolünü kullandığınızda ise yandaki ve üstteki hücrelerin boş kaldığını görürsünüz. Peki Excel’deki gibi uçsuz bucaksız hesap tablolarını nasıl yaratacaksınız? Bunu yapmanın yolu tabii ki yine kodlardan geçiyor...

Private Sub Form_Load()Dim i As Integer Grid1.Rows = 50 Grid1.Cols = 50 Grid1.Col = 0: Grid1.Row = 0 Grid1.Picture = Picture1.Picture 'Izgara kontrolünün en az 1 sütun veya 1 satırdan oluştuğundan emin ol. If Grid1.FixedCols < 1 Or Grid1.FixedRows < 1 Then Stop End If  'Kontrolün üstüne harfleri yerleştirmeye başla. For i = 0 To Grid1.Cols - 2 Grid1.Col = i + 1 Grid1.Row = 0 Grid1.Text = Chr$(i Mod 26 + Asc("A")) 'Eğer sütun sayısı 26’yı geçiyorsa çift karakter kullan. If i + Asc("A") > Asc("Z") Then Grid1.Text = Chr$(i \ 26 - 1 + Asc("A")) + Grid1.Text End If Grid1.FixedAlignment(Grid1.Col) = 2 'Merkeze getir. Next 'numaraları alt-sol köşeye yerleştir. For i = 1 To Grid1.Rows - 1 Grid1.Col = 0 Grid1.Row = i Grid1.Text = Format$(i) Next Grid1.FixedAlignment(0) = 2 ' Merkeze getir.End Sub

Püf Noktası: Resimde gördüğünüz gibi yerleşik satırların ve sütunların ortasında ufak bir resim var. Peki o resmi oraya nasıl yerleştirdik? Bildiğiniz gibi ızgara kontrolünün Properties kutucuğuna baktığınızda böyle bir özellik görülmüyor. Eklediğimiz şu satır:

Grid1.Picture = Picture1.Picturebu işi başarmıştır. Tabii ki bu satırı eklemeden bir resim kutusu yaratmalı ve istediğiniz resmi bu kutuya önceden eklemelisiniz.

Pop-Up menüler...Bildiğiniz gibi Pop-up menüler, WINDOWS 3.1 ile gelen ve bazı

programlarda sağ fare tuşuna basıldığında programla ilgili birtakım olayları gerçekleştirebilmenize yarayan menülerdir. Bu menüler WINDOWS 95 kullananların ise artık eli ayağı durumundalar. Visual Basic ile bu menüleri yaratmak çok kolay.Menü editörünü açın ve şekildeki gibi özellikler taşıyan ve ismi "Pano" olan bir menü yaratın. Menünüzü yarattıktan sonra editörden çıkmadan sadece "pano" isimli kısmı "görünmez" yapın. Editörden çıktığınızda yarattığınız menünün görülmediğini farkedeceksiniz. Form üzerindeki diğer kontrollleri de yarattıktan sonra programınızı çalıştırın ve text kutusunun üstüne gidip "Sağ" fare tuşuna tıklayın. Karşınıza menü editörüyle yarattığınız menü bir pop-up menü olarak çıkacaktır. Programınız

35

Page 36: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

çalışırken menülerin ayarlarıyla oynayabildiğinizden pop-up menüyü, normal bir menü haline ikinci seçeneği seçerek dönüştürebilirsiniz.

Private Sub Form_Load()pano.Visible = FalseOption1.Value = TrueEnd Sub

Private Sub Option1_Click()pano.Visible = FalseEnd SubPrivate Sub Option2_Click()pano.Visible = TrueEnd Sub Private Sub tarih_Click()Text1.Text = Text1.Text & NowEnd Sub Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)If pano.Visible = True Then GoTo atlaIf Button = 2 ThenPopupMenu panoEnd Ifatla:End Sub Son işlemi geri almak

Sevgili Windows’unuz programlarınızda kullanabilmeniz için gerekli olan herşeyi önünüze sunmuştur. Örneğin geçen ay verdiğimiz tekniklerden sonra bir text editörü yapmaya karar verdiniz. Ama her editörde olan bir özelliği siz kullananmıyorsunuz; "Geri Alma İşlemi". Ya da editörünüz yaptığınız her hareketten önce text kutusundaki yazılarınızı bir köşede saklıyor.

Dediğimiz gibi WINDOWS, size sunduğu bir API fonksiyonuyla sizi bu zahmetten kurtarıyor. Şekildeki gibi bir form yarattıktan sonra aşağıdaki kısacık kodu girin ve sonuca bir bakın. Programı çalıştırdığınızda her zaman bir önce yaptığınız işlemin kaydedildiğini ve butona basıldığında text kutucuğu üzerine geri geldiği göreceksiniz.

GERIAL.BAS adlı formunuzdan ayrı bir modül yaratıp ilk 4 satırı bunun içine kaydedin. Declare Function SendMessage Lib "User" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByValwParam As Integer, lParam As Any) As LongGlobal Const WM_USER = &H400Global Const EM_UNDO = WM_USER + 23‘Şimdi formumuza geçebiliriz...Private Sub Command1_Click()'Text kutusundaki metin değişmeden önce her seferinde WINDOWS tarafından otomatik ‘olaraksaklanır. UndoResult = SendMessage(Text1.hWnd, EM_UNDO, 0, 0) ‘API fonksiyonunu çağır.'Eğer UndoResult = -1 ise bir hata oluşmuş demektir.End Sub

Visual Basic ile Veritabanına ilk Adımlar

36

Page 37: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Bu örneğimiz Visual Basic ile veritabanlarının kullanımı hakkında size az çok bilgi verir umarım. Örneğimizi uygulamak için Visual Basic ile örnek olarak gelen BIBLIO.MDB adlı veritabanına ihtiyacınız var. Hazırsanız veritabanı programınızı oluşturacak adımları uygulamaya başlayabiliriz.

Adım - 1 Öncelikle alet kutucuğundan "veri" kontrolünü seçerek formunuzun üzerinde istediğiniz büyüklüğe getirin. Bu kontrolü veritabanı içinde hareket etmek için kullanacağız. Örnek için formunuzun son haline bakabilirsiniz.

Adım - 2 Data 1 kontrolünün Properties kutucuğunu aktif hale getirin ve buradan Connect seçeneğini Access olacak biçimde değiştirin.

Adım - 3 Yine Data 1 kontrolünün Properties kutucuğu aktifken, kontrolün DatabaseName seçeneğini kullanarak istediğiniz veritabanını seçin. Biz bu örneğimizde BIBLIO.MDB dosyasını kullanacağız, bu yüzden seçeneği bu dosyayı görecek biçimde ayarlayın.

Not: Eğer diğer programlarla ilişkilerden dolayı, bu kontrole, tasarım aşamasında istediğiniz veritabanını atayamıyorsanız DatabaseName özelliğini, programınızın çalışma aşamasında değiştirip program çalışırken istediğiniz veritabanı dosyasını seçebilirsiniz.

Adım - 4 Data 1 kontrolünüzün RecordSource seçeneğini, veri tabanının istediğiniz tablosuna erişim sağlamak için kullanın. Eğer daha önceden DatabaseName seçeneğine herhangi bir veritabanı dosyası atadıysanız. RecordSource seçeneğine tıkladığınızda karşınıza seçtiğiniz veritabanı dosyasında kullanabileceğiniz bölümler gelecektir. Biz bu örneğimizde "Titles" bölümünü kullanacağız.

Adım - 5 Formunuzun üzerine, veritabanı dosyasında seçtiğiniz alanları görüntüleyebilmek için istediğiniz sayıda metin kutusu yerleştirin. Biz örneğimizde 3 farklı alan kullanacağımızdan formumuza 3 adet metin kutusu yerleştirdik. Veritabanımızı görüntülemek için kullanacağınız kontroller metin kutularıyla sınırlı değil. Resim kutularını, ızgara kontrolünü, etiket kontrolünü ve bunun gibi birçok kontrolü bu iş için kullanabilirsiniz.

Not: Yerleştirdiğiniz metin kutularını kullanarak veritabanı dosyasında kalıcı değişiklikler yapabilirsiniz. Adım - 6 Text1 kontrolünün Özellikler kutusunu aktif hale getirerek DataSource seçeneğini "Data1"i

gösterecek biçimde değiştirin. Adım - 7 Metin kutularının yanlarında seçtiğiniz alanlara uygun etiketler yerleştirin. Adım - 8 "Text1" metin kutusunun görüntüleyeceği veritabanı alanını DataField seçeneğini kullanarak

değiştirin. Bu işlemi her bir metin kutusu için gerçekleştirin ve her birinin farklı alanları göstermesini sağlayın.

Adım - 9 Son olarak programa bir çıkış tuşu ekleyin ve programı çalıştırın. Ok tuşlarını kullanarak veritabanı içinde gezinebilir, metin kutularının alanlarını değiştirerek, diğer alanlardaki verileri görüntüleyebilirsiniz. Meraklı VB kullanıcıları tabii ki bununla yetinmek istemeyecek ve diğer komutları ve özellikleri

öğrenmek isteyecekler. Merak etmeyin ileride bu konuya dair daha büyük uygulamalar yaratır, güzel püf noktalarına değiniriz.

Visual Basic ve Bug'larVisual Basic 3.0 ile gelen kurulum programını kullanıyorsanız. Programınızı Windows’unuzun

bulunduğu dizine kurmaya kalkarsanız, Visual Basic "Setup Files Have Been Modified or Corrupted" hata mesajını verdikten sonra program kapanır ve Windows’a geri dönülür. Fakat programı değişik bir dizine kurmak istediğinizde bir problem çıkmadığını görürsünüz. Ne yapmalı?

Bu problemi çözmek için AUTOEXEC.BAT dosyanızda Windows’unuzun yerini belirleyen PATH tanımını sürücü ismi vermeden kullanın. "\WINDOWS", "\WIN31" gibi...

Eğer Visual Basic 3.0 kullanıyorsanız ve üzerinde çalıştığınız projeyi File * Make EXE File komutunu seçerek EXE haline getirdiyseniz programda hiç değişiklik yapmadan bir daha derlediğinizde programın boyunda gereksiz bir uzama olduğunu görürsünüz. Program ona değişiklik yapmadığınız ve derlediğiniz her seferinde daha da uzar!

Çok ilginçtir ki bu sayede meydana gelen EXE dosyalar WINDOWS altında hiç sorun çıkarmadan çalışabiliyor... Ne yapmalı?

37

Page 38: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Bunu önlemek için programı derlemeden önce üzerinde ufak bir değişiklik yapın. Örneğin programda kullandığınız formlardan birini bir milimetre yana kaydırın. Böylece VB 3.0 aynı proje için eski EXE’yi silip yepyeni bir EXE yaratır.

VB 1.0, 2.0 ya da 3.0 kullanıyorsanız "Illegal function call" or "Division by zero" gibi "genel" hata mesajları ile sık sık karşılaşıyorsanız suçu pek te kendinizde aramayın. Çünkü Visual Basic’in karışık işlemlerden sık sık kafası karışır! Örneğin aşağıdaki işlem matematik işlemcisi olan bir bilgisayarda "Illegal Function Call" hatasının ekrana gelmesine neden olur test = 1 + (1 + 1 * (1 * (1 + 1 ^ 1)))

Aşağıdaki işlem ise, yine matematik işlemcili bir bilgisayarda "Division by zero" (Bir sayının sıfıra bölünmesi) hatasını veriyor. test = 1 + (1 - 1 * (1 + 1 / 1 ^ 1))

Visual Basic 4.0 ise böyle bir program hatası barındırmıyor. Yani programlama dilinizin aklını istediğiniz kadar karıştırabilirsiniz.

38

Page 39: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Ne Yapmalı?Bu problemi çözmek için işlemin karışık parçalarını daha basit parçalara ayırıp ayrı ayrı

hesaplatılmasını sağlayabilirsiniz. Eğer VB 1.0, 3.0 veya 4.0 kullanıyorsanız (Yani herhangi bir sürümünü) seçim kutusu kontrolündeki bir

programlama hatasını yakalamış olabilirsiniz. Bir form üzerine iki yada daha fazla seçenek kutusu koyduğunuzda ve programı çalıştırdığınızda bu kutulardan mutlaka biri seçili durumda olmalıdır. Zaten kutucuğun mantığı da budur, kullanıcının mutlaka bir seçeneği seçmesini sağlamak... Kontrol bu şekilde kullanıldığında sorunsuz olarak çalışıyor fakat kutucukları frame’lerle (gruplama kontrolü) ayırdığınızda bir sorun çıkıyor. Ayrı gruplara ayrılmış olan seçim kutularından örneğin ikinci grupta bir seçeneğin mutlaka işaretli olması gerekirken böyle olmuyor.

Ne yapmalı?Bu sorunu çözmek çok basit, formun yüklenmesi esnasında 4. seçenek kutusunu aktif yapmak için şöyle

bir satır kullanabilirsiniz:

Sub Form[sayı].Load()Option4.Value = TrueEnd Sub

Tüm Visual Basic’lerde kötü bir huy var... Bu kötü huy MDI formlarla çalışırken ortaya çıkıyor. Bir Form içine iki tane MDIChild açtınız diyelim. Windows’un kendi özelliği sayesinde bu iki form arasında CTRL+TAB tuşlarını kullanarak geçiş yapabilirsiniz. Problem iki MDIChild form da normal boyutta olduğunda ortaya çıkmıyor, fakat MDIChild’lardan birini ana formla aynı boyuta getirince yani maximize edince CTRL+TAB işe yaramıyor. İki MDIChild’da aktif olmuyor.

Ne Yapmalı?Bu programlama hatasını gidermek oldukça zor. Programınızda CTRL+TAB tuş kombinasyonunu ele

geçirip Windows’un otomatik olarak yaptığını siz programınıza yaptırmalısınız. En kolay çözüm formlardan hiçbiri aktif olmadığında formun aktif olması için üzerine bir kere tıklamak...

Eğer Visual Basic 3.0 kullanıyorsanız VB’nin yazıcı ile olan problemlerinden birini bilmenizde fayda var. Programınız çalışırken "Varsayılan Yazıcı"nızı değiştirirseniz Printer.Fonts özelliğinin güncellenmediğini görürsünüz.

Ne yapmalı?Bu problem Visual Basic 4.0’da giderilmiş ama yine de VB 3.0 kullananlara yardımcı olalım.

Programınızın içerisinde şu satırları kullanırsanız probleminizin giderildiğini görürsünüz:

‘Yazıcıdaki Dökümanı Sonlandır...Printer.EndDoc‘Boş bir sayfa bas.Printer.Print ""

Bu çözümün tek dezavantajı yazıcıdan boş bir kağıt çıkarmasıdır. Ama yine de Printer.Font özelliğinin güncellenmesini ve programın yeni yazıcıyı tanımasını sağlıyor...

Eğer Visual Basic 3.0 veya daha geri sürümlerini kullanıyorsanız ızgara (grid) kontrolünüzde ufak bir sorun var demektir, çünkü Visual Basic bazen gereksiz yere ızgara kontrolünün kaydırma çubuklarını ortaya çıkarıyor. Kontrolün "ScrollBars" özelliğini 3 (Both) yaptıysanız, son sütunla ızgara penceresi arasında sütun genişliğinin yarısı kadar veya daha az yer varsa bu hata ortaya çıkıyor.

Ne Yapmalı?Bu problemi gidermek için ilgili formun yüklenme koduna aşağıdaki satırları ekleyin. Kaydırma çubuğu

yok edilip geri getirildiğinde sorun çözülüyor...

Sub Form_Load ()'Kaydırma Çubuğu Ayarlarını Kaydetkaydet% = Grid1.ScrollBars Grid1.ScrollBars = 0 'Kaydırma çubuklarını kaldırGrid1.ScrollBars = kaydet% 'Çubukları geri getir End Sub

39

Page 40: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Visual Basic 4.0’da bu programlama hatası giderilmiş. Visual Basic 3.0 kullanıyorsanız sürücü kontrolünde bulunan bir hatayı bilmenizde sonsuz fayda var.

Sürücü kontrolü, dosya listesi kontrolü ve ilgili diğer kontrolleri birarada kullandığınızda problem ortaya çıkıyor. Formun üzerinde bir sürücü bir de dizin kontrolü olduğunu varsayalım. Drive1 kontrolünün refresh özelliğine dir1.path = drive1.drive kodunu eklemenize rağmen a: sürücüsüne ikinci bir kere geçtiğinizde sürücünün içeriği tazelenmeyecek ve sürücüde disket olmasa bile hata meydana gelmeyecektir.

Ne Yapmalı? Bu problemi gidermek için drive1 kontrolünün refresh özelliğine drive1.refresh satırını eklemelisiniz.

İşinizi garantiye almak istiyorsanız aynı zamanda refresh isimli bir komut butonu oluşturarak bunun içerisine aşağıdaki kodları da girebilirsiniz.

drive1.refresh dir1.refresh file1.refresh

Windows’tan hızlı çıkış.WINDOWS, programcıların işini kolaylaştırmak için elinden geleni yapar. Örneğin bazı programlar

WINDOWS’u yeniden başlatmak Windows’tan çıkmak bilgisayarı boot etmek gibi bazı özelliklere sahiptir. Bunu nasıl mı sağlıyorlar? Tabii ki şu meşhur API fonksiyonlarını çağırarak... Örneğimizi uygulamak için öncelikle yeni bir modül yaratıp aşağıdaki satırı bu modüle girin.

Declare Function ExitWindows Lib "user" (ByVal kod As Long, ByVal rezerve As Integer) As IntegerWINDOWS oturumunu kapatmak için o anda aktif olacak bir yere (Form1_Load gibi...) aşağıdaki satırı girin. Deger = ExitWindows(0,0) ‘İşlem başarılamadıysa “Deger” “1” den farklı olur.Windows’u kapatıp tekrar başlatmak için ise şu satırı kullanın: Deger = ExitWindows(&H42,0) ‘İşlem başarılamadıysa “Deger” “1” den farklı olur.

Yarattığınız modülleri kaydetmeyi unutmayın çünkü programı çalıştırdığınızda VB size projenizi kaydedip kaydetmemek istediğinizi sormayacak ve direkt Windows’tan çıkacaktır. Program Windows’un bir API’sini çağırdığından diğer çalışmalarınızda kaydetmediğiniz dökümanlarınız varsa Windows’tan çıkılmadan bu hususlara dikkat edilecektir. Buna bağlı olarak API’yi kullandığınızda programınızın da sonlanmasına dikkat etmelisiniz, (Mesela sonuna END koyun.) çünkü Windows kapatılamazsa programa geri dönülür. Program Yöneticisine program grubu yarattırmak

Visual Basic ile gelen kurulum programı yarrattığınız uygulamayı sabit diske kopyaladıktan sonra onun için Program Yöneticisinde bir grup yaratabilir. Kurulum programı VB ile yazıldığına göre biz de bunu basit bir DDE (Dynamic Data Exchange / Dinamik Veri Alışverişi) bağlantısı kurarak kolayca başarabiliriz. Örneğimiz için boş bir form üzerinde bir komut butonu bir de bağlantıya aracı olacak "metin kutusu" yerleştirin ve oluşturduğunuz komut butonuna aşağıdaki kodları girin. Metin kutusunun ise bağlantıyı taşımaktan başka hiç bir işlevi yok.

Sub Command1_Click()Text1.LinkTopic = "ProgMan|Progman" 'Bağlantı kurulacak programText1.LinkMode = 2 'Kullanıcı bağlantısı yaratText1.LinkExecute "[CreateGroup(PC WORLD Türkiye)]"'Windows Program Yöneticisinde yeni bir grup yaratText1.LinkExecute "[AddItem(c:\vb\vb.exe, Visual Basic)]" 'Burada belirttiğimiz dizini kendinize göre değiştirin.Text1.LinkExecute "[AddItem(c:\vb\vb.hlp, Visual Basic Yardımı)]"'Gruba iki yeni öğe ekleText1.LinkExecute "[ShowGroup(PC WORLD Türkiye, 7)]"'Grubu simge haline getir ve Visual Basic’e geri dönOn Error Resume Next 'Hata oluşursa işleme devam et. Sebep?'Windows 3.0 ile VB bu aşamada uyumsuzluk çıkarır!Text1.LinkMode = 0 ' bağlantıyı kesEnd ‘Son...End Sub

40

Page 41: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Programı çalıştırdığınızda Program Yöneticinizde “PC WORLD Türkiye” adında yeni bir grup oluşacak ve bu grubun içinde iki simge belirecektir. DDE kullanarak programlara bağlanmak onlara komut vermek ve bu sayede veri alışverişi yapmak çok kolaydır. DDE kullanarak Excel hücrelerinden veri kopyalama işlemini bile sadece kopyalanacak hücreleri tayin ederek kolayca gerçekleştirebilirsiniz. Bu konu oldukça geniş olduğundan ileriki sayılarımızda mutlaka değineceğiz. Bir ICO dosyasını fare imleci olarak kullanmak

Bildiğiniz gibi her WINDOWS uygulaması fare imlecini programın durumuna göre değiştiriyor. Ama Windows’un kullandığı fare imleçlerinden sıkılmış olabilirsiniz. Sadece kendi uygulamanız için geçici bir çözüm yaratabilirsiniz, çünkü VB farenin imlecini programınız sınırları içinde değiştirmenize izin verir. Aşağıdaki kodları inceleyin ve ne kadar basit olduğunu görün.

Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ‘İmleç metin kutusunun üzerine geldiğinde...Text1.MousePointer = 99 ‘İmleci kullanıcı kararına bırak.Text1.MouseIcon = LoadPicture("c:\point01.ico") ‘imleci bir simge haline getir.End Sub Bir Türlü Sıraya Girmiyor!

Yeni bir proje açtınız ve formunuzu yaratmaya, üzerine iki komut düğmesi koyarak başladınız diyelim. Ama bir süre sonra bu iki düğmenin arasına başka bir düğme koymak istediniz ve de koydunuz. Programınızı çalıştırdınız ve Tab tuşunu kullanarak form üzerindeki kontroller arasında geçiş yapıyorsunuz. İşte bu noktada sizi çok rahatsız edecek bir durumla karşılaşacaksınız. Çünkü Visual Basic Tab tuşu ile geçiş sırasını, kontrollerin yaratılış sırasına göre tayin eder. Bu rahatsız edici durumu, hemen hemen tüm kontroller için Properties kutucuğunda bulunan “TabIndex” özelliğini kullanarak giderebilir ve kontrollerin Tab sırasını istediğiniz gibi ayarlayabilirsiniz. Örneğin, bu üç tuşu Tab sırasına koymak için önce birinci yarattığınız düğmenin üzerine gidin ve onu aktif yaptıktan sonra Properties kutucuğundan TabIndex değerini “0” yapın. İkinci düğmeye gelin ve TabIndex değerini “1” yapın. Programı çalıştırdığınızda düğmelerin Tab sırasına girdiğini göreceksiniz.

Püf Noktası: Form üzerinde herhangi bir kontrolün Tab tuşu ile aktif olmamasını “TabStop” özelliğini “False” yaparak sağlayabilirsiniz.

Peki, belli bir durumun gerçekleşmesi sonucunda Form üzerinde başka bir kontrolün aktif olmasını nasıl sağlayabiliriz? Bu işi yapmak için ise SetFocus komutunu kullanırız. Belli bir koşul gerçekleştiğinde, örneğin bir opsiyon kutusu seçildiğinde herhangi bir metin kutusunu aktif yapmak için

Sub Option1_ClickForm1.Text1.SetFocusEnd Sub

gibi bir satır kullanabilirsiniz. Fakat ne yazık ki bu komutu Formun yüklenmesi sırasında (Form_Load) kullanamazsınız. Menüye Çok Kullanılan Dosyaları Eklemek

İşte Visual Basic programlarınıza profesyonellik katacak bir püf noktası daha. Word, Excel gibi popüler programlar Dosya menülerinde “En son kullanılan” dosyalar için bir alan tutarlar. Böylece kullanıcı bu dosyayı bir daha açmak istediğinde dosyanın yerini genel diyalog kutusunda aramak zorunda kalmaz, menüden bu dosyayı seçerek açılmasını sağlayabilir. Siz de buna benzer bir şey yapabilirsiniz. Öncelikle yanda görülen 1. Formu ve üzerindeki menüyü yaratmakla başlayın.

Private Sub eklenen_dosya_Click()Label1.Caption = eklenen_dosya.CaptionEnd SubPrivate Sub Form_Load()Label1.Caption = "" ‘Son açılan dosyayı temsil eden etiketi temizleeklenen_dosya.Visible = False ‘Menü seçeneğini gizle

41

Page 42: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

‘(Program yeni başladı ve hiç dosya açılmadı)CommonDialog1.filename = "*.*"End SubPrivate Sub Ac_Click() ‘Dosya * Aç komutu çalıştırıldığındaCommonDialog1.DefaultExt = "*.*" ‘Tüm dosyalarCommonDialog1.Action = 1 ‘Dosya Aç eklenen_dosya.Caption = CommonDialog1.filename ‘Genel diyalog kutusunda seçilen dosyayı

‘Son menü seçeneğine ekleeklenen_dosya.Visible = True ‘Son menü seçeneğini görünür hale getir.Label1.Caption = CommonDialog1.filenameEnd Sub

Yukarıdaki kodları da yazdıktan sonra programınızı çalıştırın ve Dosya menüsünden Aç komutunu seçin. Herhangi bir dosya seçtikten sonra bunun, Dosya

menüsünün en alt satırında eski ismi “eklenen_dosya” olan yere yerleştiğini göreceksiniz. İşte bu kadar basit...

   Visual Basic ve Renk

Visual Basic, Windows’un tüm renk öğelerine kolayca erişebilir. Windows’unuzun kaç renk kullandığını, grafik kartınızın bellek miktarını öğrenmeyi ve bunun gibi bazı özelliklere geçen sayfalarda değinmiştik. Şimdi sıra Visual Basic ile programlarımızda nasıl renk ekleyeceğinize geldi. VB formunuz üzerindeki herhangi bir nesnenin rengini değiştirmek için iki yol sunuyor bunlardan birincisi RGB komutu. Formlarınızı yaratırken kullandığınız renk paletinden bir renk seçtiğinizde o rengin Özellikler kutucuğunda değişik kodlara dönüştüğünü görürsünüz. Visual Basic, siz rengi seçtiğiniz anda onu sistemin anlayabileceği 16’lık sayı düzenine çevirir.

Visual Basic’in renk kutusundan seçtiğiniz renkler 16’lık sayı düzenine yandaki gibi çevrilir. KK, YY, MM iki haneli ve 16’lık düzende sayılardır.

Visual Basic’i kullanarak her bir renk’ten 1’den 255’e kadar bir ton alabilir, bunları karıştırabilir ve böylece 16.581.375 adet değişik renk elde edebilirsiniz. İşte size RGB komutu kullanılarak form üzerine basit bir palet yaratan ufak bir program. RGB değerini değiştirerek çok değişik görüntüler elde edebilirsiniz. Örnekte ayrıca bir formun ortasının nasıl bulunacağını da görebilirsiniz.

Private Sub Form_Click()ScaleMode = 1 ' Ölçü sistemini piksele çevirCX = ScaleWidth / 2 ' Formun dikey ortasını bulCY = ScaleHeight / 2 ' Formun yatay ortasını bulDrawWidth = 3 ' Çizim genişliğini ayarlar = 100For I = 50 To 0 Step -1F = I / 50F1 = 1 - F: F2 = 1 + F ' Hesaplamalar...r = r + 10: b = b + 10If b > 50 Then g = g + 5ForeColor = RGB(r, g, b) ' Önalan rengini belirleLine (CX * F1, CY * F1)-(CX * F2, CY * F2), , BFNext IEnd Sub

Programınızı yazdıktan sonra formunuzun üzerine bir kere tıklayın. Güzel bir renk paletinin oluştuğunu göreceksiniz.

Visual Basic’in size sunduğu diğer bir renk komutu ise QBColor komutudur. Bu komutu kullanarak QBASIC’ten kalan sınırlı 15 tane temel rengi kullanabilirsiniz. Aktif formun arkaplan rengini maviye boyamak için şunun gibi bir komut kullanmalısınız: Form1.ForeColor = QBColor(1) Bütün Özellikleri Bir Komutta Atamak

VB’nin her yeni sürümü ile programcıların işini daha da kolaylaştıracak komutlar ve özellikler geliyor. İşte With (Birlikte) komutu bunlara en güzel örnek. Şimdi aşağıdaki satırları inceleyin ve bazı komutların ne kadar gereksiz olarak kullanıldığını görün:

42

Page 43: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Private Sub Form_Load()Form1.Height = 4000Form1.Caption = "With Örneği"Form1.BackColor = QBColor(6)End Sub

Burada dikkat ettiğiniz gibi “Form1” nesnesi her satırda tekrarlanmış. VB 4.0 ile bu soruna bir çözüm getirilerek With komutu yaratılmıştır. Aşağıdaki örnek size bu komutun nasıl kullanıldığı hakkında fikir verecektir.

Private Sub Form_Load()With Form1 'Form1'i kullanarak... .Height = 4000 'Yüksekliği 4000, .Caption = "With Örneği" 'Form başlığını "With Örneği", .BackColor = QBColor(6) 'Arkaplan rengini yeşil yap.End With ‘Komutu bitirEnd Sub

Bu komutu kullanırken With ve End With satırları arasına yine With ve End With satırlarını girebilirsiniz fakat bu iki komut arasına komplike komutlar ve döngüler eklememelisiniz. Bu hem programınızı yavaşlatır hem de ciddi hatalara sebep olabilir. Resmi Kaydırmak

Bir form oluşturun ve 1. resimde olduğu gibi kontrolleri üzerine yerleştirin. Dikkat etmeniz gereken konu, içinde resim bulunan resim kutusunun arkasında bir resim kutusu daha olduğudur. Yani formun üzerine büyükçe bir resim kutusu çizdikten sonra bunun içine ikinci bir resim kutusu çizip buna sabit diskinizdeki bir resmi koymalısınız. (Resmi programın çalıştırma aşamasında da yükletebilirsiniz). İşte kodlar...

Sub Form_Load() Const PIXEL = 3 Const NONE = 0 Form1.ScaleMode = PIXEL: Picture1.ScaleMode = PIXEL ' İkinci resim kutusu yüklenen resmin büyüklüğünü alıyor. Picture2.AutoSize = True ' Çerçevelerden kurtulalım... Picture1.BorderStyle = NONE Picture2.BorderStyle = NONE' İki resim kutusunu da resmi göstermek için hazırla Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, ScaleHeight - HScroll1.Height Picture2.Move 0, 0 ' Yatay kaydırma çubuğunu ayarla HScroll1.Top = Picture1.Height : HScroll1.Left = 0 HScroll1.Width = Picture1.Width ' Dikey kaydırma çubuğunu ayarla VScroll1.Top = 0 : VScroll1.Left = Picture1.Width VScroll1.Height = Picture1.Height ' Kaydırma çubuklarını resmin büyüklüğüne göre ayarla HScroll1.Max = Picture2.Width - Picture1.Width VScroll1.Max = Picture2.Height - Picture1.Height

43

Page 44: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

' Eğer içinde resim olan kutucuk büyük kutucuğun ' boyunu geçmiyorsa kaydırma çubuğuna gerek yok VScroll1.Visible = (Picture1.Height < Picture2.Height) HScroll1.Visible = (Picture1.Width < Picture2.Width)End SubSub Form_Resize() ' Form’un büyüklüğü değiştiğinde resmin de ' büyüklüğünü forma göre ayarla Picture1.Height = Form1.Height Picture1.Width = Form1.Width ' Kaydırma çubuklarını ve resmi tekrar ayarla Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, ScaleHeight - HScroll1.Height Picture2.Move 0, 0 : HScroll1.Top = Picture1.Height HScroll1.Left = 0 : HScroll1.Width = Picture1.Width VScroll1.Top = 0 : VScroll1.Left = Picture1.Width VScroll1.Height = Picture1.Height HScroll1.Max = Picture2.Width - Picture1.Width VScroll1.Max = Picture2.Height - Picture1.Height ' Kaydırma çubuklarına gerek var mı? VScroll1.Visible = (Picture1.Height < Picture2.Height) HScroll1.Visible = (Picture1.Width < Picture2.Width)End SubSub HScroll1_Change()' ikinci resim eksi değer almaktadır çünkü kaydırma' çubuğunu sağa kaydırdığınızda resim sola kaymalıdır

Picture2.Left = -HScroll1.ValueEnd Sub Sub VScroll1_Change() Picture2.Top = -VScroll1.ValueEnd Sub 

Tuşun "Default" Olmasıİşte programlarınızda dikkat etmeniz gereken bir konu: Bir form yarattınız, içinde birçok metin kutusu

var ve kullanıcının metin kutularından bir tanesinde Enter tuşuna bastığında formun bellekten atılmasını (veya başka bir formun yüklenmesini) ve yazdıklarınızın geçerli olmasını istiyorsunuz. Bunu en güzel örneği "Aç" ve "Kaydet" diyalog kutularında vardır. Kutu içinde hangi kontrol aktif olursa olsun (İptal hariç) Enter tuşuna basıldığında program "Tamam" tuşuna basılmış gibi davranır, bu akıllıca tasarlanmış bir özelliktir. Bu özelliği formun üzerinde sadece bir tuş taşıyabilir. Bir tuşu "Default" olarak atamak için formun yüklenmesi esnasında Command1.Default = Truesatırını kullanmalısınız. Bu özelliği formun tasarlanması aşamasında da "Properties" kutucuğundan atayabilirsiniz. VB 4.0 ve RTF metin kutusu kontrolünün kullanımı

Eski Visual Basic’ler de bulunan metin kutusunun aksine VB 4.0 yetenekli bir kontrol olan Rich Text Box ile birlikte gelmiştir. Rich Text Box Windows’un salt metin formatını tanımasının yanında içinde renk, yazıtipi, büyüklük, kalınlık yada incelik bulunduran "Zengin Metin Formatı"nı da tanıyabilir. Bu format Windows altında çalışan hemen hemen tüm metin editörleri tarafından tanınabilmektedir. Format, bu zengin özelliklerinin aksine kaydedildiğinde "ikili" dosya biçimine girmez. İşte size VB 4.0’ın bu kontrolünü kullanan örnek bir program. Ama bu sefer kontrol kutusundan "Metin kutusu" değil "Zengin metin kutusu" kontrolünü seçin. Programınız RTF formatındaki dosyaları açabilir ve sizin yazdığınız RTF formatındaki dosyaları kaydedebilir. Kodların kısalığını görünce hayrete düşeceksiniz.

Private Sub Command1_Click() 'kalın RichTextBox1.SelBold = TrueEnd SubPrivate Sub Command2_Click() 'italik

44

Page 45: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

RichTextBox1.SelItalic = TrueEnd SubPrivate Sub Command3_Click() 'renk CommonDialog1.Action = 3 RichTextBox1.SelColor = CommonDialog1.ColorEnd Sub Private Sub Command4_Click() 'kaydet CommonDialog1.ShowSave RichTextBox1.SaveFile (CommonDialog1.filename)End Sub Private Sub Command5_Click() ' aç CommonDialog1.Filter = "Rich Text Format Dosyaları|*.rtf" CommonDialog1.ShowOpen RichTextBox1.LoadFile CommonDialog1.filename, rtfRTF

End Sub Private Sub Command6_Click() 'çıkışEnd

End Sub Excel ile DDE bağlantısı

Geçen hafta hatırlayacağınız gibi DDE bağlantılarına değinmiş ve Program Yöneticisine ile DDE kurarak ona program grubu yarattırmıştık. Bu ay bağlantımızı Excel ile kuracağız. Yapacağımız şey Excel’de bulunan "Kitap1"den bir dizi hücrenin okunması ve bu hücrelerin sırayla VB ile yaptığımız bir "alıcıdaki" ızgara kontrolüne yerleştirilmesi. İşlemi gerçekleştirmek için önce Excel’i açın ve şekilde görüldüğü gibi 5 satır ve 5 sütunu istediğiniz bilgilerle donatın. Sonra Exceli kapatmadan VB’ye geçin ve programı yazın. Yalnız ingilizce Excel kullananlar "Excel|Kitap1" ifadesi yerine "Excel|Sheet11" ifadesini kullanmalıdırlar. Programı yazdıktan sonra bağlantı için "Verileri Al" tuşuna basın. Private Sub Command1_Click()Dim CurRow As String Static Row ' Hesap tablosu satır numarası Static Col ' Hesap tablosu sütun numarası ' Açık olan tüm bağlantıları kapat Text1.LinkMode = 0 ' Bağlantı kurulacak uygulama ve bölümü Text1.LinkTopic = "Excel|Kitap1" Text1.LinkItem = "R1C1" ' Bağlantı öğesini belirle Text1.LinkMode = 1 ' Bağlantı tipini otomatik yapFor Row = 1 To 5 ' Satır ve sutunu değiştirmek ' için döngü For Col = 1 To 5 'Okunacak hücreyi belirle CurRow = "R" & Row & "C" & Col Grid1.Row = Row 'satır ve sütunu belirle Grid1.Col = Col Text1.LinkItem = CurRow Grid1.Text = Text1.Text Next ColNext Row

End Sub

Alt menüler yaratmakZaman zaman öyle uygulamalara rastlarsınız ki menü seçenekleri bile bir

çok alt seçenek barındırır. Örneğin Microsoft Excel’de böyle menülere rastlarsınız. Bunu VB ile yapmak çok kolaydır.

45

Page 46: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Her zamanki gibi, menüleri yaratmak için kullandığınız Menü Editörü bu tip menüleri de kolayca yapabilir. Bunun için, nasıl menü başlığının altındaki seçenekleri öteleyerek yaratıyorsanız seçeneklerin alt seçeneklerini de öyle ötelemelisiniz.

Örneğin 1. resimdeki menüyü yaratmak için menü editöründe 2.resimdeki gibi bir görünüm elde etmelisiniz.

Alt menülerin de daha alt menülerini aynı tekniği kullanarak elde edebilirsiniz, ama bir çok alt menü kullanıcıyı sıkacak ve programı kullanılamaz bir hale getirecektir.

Alt yordam ve fonksiyon satırlarını ayırabilirsinizAPI’leri tanımlayan fonksiyonlar ve bunun gibi kod satırlarının oldukça uzun olduğu dikkatinizi çekmiştir, öyleki fonksiyon yanımını

yazmaya başladığınızda pencereyi ne kadar büyütürseniz büyütün fonksiyonun başını göremezsiniz. Bazılarınız bundan rahatsız olabilir. Bunu çözmek için fonksiyon veya altyordam tanımını uygun bir yerinden bir alt çizgi (_) ile ayırabilirsiniz. İşte size bunu nasıl yapacağınıza dair bir örnek: Declare Function windir Lib "kernel" Alias "getwindowsdirectory" _(ByVal lpbuffer As String, ByVal nsize As Integer) As IntegerBu iki satırı yazdığınızda bu satırlar VB tarafından bir satır olarak algılanacaktır. Hiç bilmediğiniz Visual Basic 4.0 Kısayolları

Uzun süredir Visual Basic kullanıyorsanız kod yazmanızı hızlandıracak kısayolları biliyorsunuzdur. Bir çok kısayol’u zaten VB menülerinden çıkartabilirsiniz. Ama ne VB menülerinden ne de VB ile ilgili kaynaklardan bulamayacağınız aşağıdaki kısayolları biliyor muydunuz?

Kısayol Açıklama

CTRL+F2 Nesnenin liste kutusuna git (Kod Penceresinde)F3 Sonrakini bulShift+F3 Öncekini bulCTRL+DOWN Bir sonraki altyordam / fonksiyonCTRL+UP Bir önceki altyordam / fonksiyonSHIFT+F2 Altyordam / fonksiyon'a gitCTRL+SHIFT+F2 Önceki konuma geri dönCTRL+HOME Modülün başlangıcına gitCTRL+END Modülün sonuna gitCTRL+RIGHT Bir sonraki kelimeCTRL+LEFT Bir önceki kelimeCTRL+N Yeni satır ekleCTRL+Y Bulunduğun satırı silCTRL+DEL İmleçten sonraki tüm karakterleri temizleCTRL+BACKSPACE İmleçten önceki tüm karakterleri temizleSHIFT+TAB TAB ile ötelenen metni geri getirCTRL+Z Bir önceki işlemi geri al (Ne olursa olsun)  Yeni Kontroller: TreeView

Zaman zaman Visual Basic 4.0 ile gelen yeni kontrollere değiniyoruz. İşte bu yeni kontrollerden birisi: Treeview. Windows 95’in Gezgininde sol klasör penceresi bu kontrolle oluşturulmuş. Kontrolün kullanımı gayet basit, nasıl kullanıldığını merak ediyorsanız hemen boş bir formun üzerine bir Treeviev kontrolü yaratın ve aşağıdaki kodları yazmaya başlayın. Kontrolün kullanımı hakkındaki tüm açıklamalar kodların arasında verilmiştir.

46

Page 47: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Private Sub Form_Load()Dim nodX As Node' Bir metni ana başlık olarak atamak için aşağıdaki gibi bir komut kullanmalısınız. Set nodX = TreeView1.Nodes.Add(, , , "Müzik")'Aşağıdakinin amacı 1. Başlığa bir alt başlık eklemektir.' Eklediğiniz altbaşlıklar eklenme sıralarına göre görüntülenir. Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Jazz") Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Pop") Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Klasik")

Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Rock")' Pop alt başlığı altına 2.altbaşlık daha ekliyoruz. Set nodX = TreeView1.Nodes.Add(3, tvwChild, , "Techno") Set nodX = TreeView1.Nodes.Add(3, tvwChild, , "Rave")' 2. Anabaşlığı ekliyoruz. Set nodX = TreeView1.Nodes.Add(, , , "Resim")' Tüm ağacı göstermek için kontrolü tazele.nodX.EnsureVisibleEnd Sub' Ağacın dallarından birine tıklandığında...Private Sub TreeView1_NodeClick(ByVal Node As Node)mesaj$ = "Tıkladığınız Liste Seçeneği: " + Node.Texttip = 64baslik$ = "Treeview Örneği"' Hangi dala tıklandığını söyle.MsgBox mesaj$, tip, baslik$End Sub 

Visual Basic, 6.0 sürümüyle çağ atlıyor, çünkü VB’nin yeni görünümü eski sürümlerinde oldukça uzak. Programcıların, hayal güçünü ve teknolojinin getirdiği yenilikleri olabildiğine kullanmalarını sağlıyor, Internet için program geliştirmeye ve HTML sayfalarında kullanılan Java benzeri Microsoft’un yeni ActiveX kontrollerini kulanmaya izin veriyor. VB6.0 sadece Windows 95,98 ve Windows NT (Intel, MIPS, PowerPC, Alpha RISC) platformlarında çalışabiliyor. Programın 16 Bit program derleme, şartlı derleme gibi opsiyonları yok.  İşte VB6’ın getirdiği en önemli değişiklik ve yenilikler

Derlenme işlemci tipine, hızına ve program büyüklüğüne göre optimize ediliyor. Tekrar tasarlanmış form derleyici 3 Boyutlu grafik desteği Visual C++’daki gibi sınıf, form ve kontrol "büyücüleri" (wizard) Otomatik kod tamamlama Birden çok veritabanı desteği Animasyonlu GIF’leri destekleyen kontroller Resim kontrolü JPEG formatını destekliyor Birden çok kaynak dosyasını destekliyor. Fonksiyon adresleme Visual C++ ‘ın 4.x sürümündeki sürükle ve bırak destekli düzenlemeyi destekliyor. Windows tabanlı ActiveX kontrollerini yaratmak için yeni derleyici OCX kontrollerini yaratma imkanı ! Ağ üzerinde OLE Yeni kullanıcı arabirimi ve ActiveX desteği Birden çok projeyi kontrol edebilen proje penceresi 16 Bit uygulama yaratılamıyor... Visual C++ Developer Studio tabanlı yeni arabirim Visual Basic formlarını otomatik olarak HTML sayfasına çevirebilme imkanı Internet üzerinde bulunabilen TCP/IP kontrollerini tanıyabiliyor

47

Page 48: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Kullanıcı arabiriminde projenin hiyerarşisini görüntüleyen bir pencere var Yığın olarak güncellenen geliştirilmiş RDO (Remote Data Objects) Yazım hatası yaptığınızda o komutu nasıl kullanacağınıza dair ipuçları veriliyor. Yeni komutlar (Debug.Assert, AddressOf...) ve veri tipleri (Decimal Variant...) Derleyici artık bir çok derleme opsiyonu sunuyor. Çok hızlı ve küçük EXE’ler oluşturuluyor!

Gördüğünüz gibi VB’nin yapısı ve kullanıcı arabirimi tamamen değişmiş. Programlarınızı bile bir çok yeni araç barındıran yeni bir MDI pencere içerisinde yaratıyorsunuz. Bekliyoruz...

VB ile AnimasyonWindows 95’te dosya kopyalama işlemini gerçekleştirdiğinizde dosyanın

kopyalandığını gösteren küçük bir animasyonla karşılaşırsınız. Bu animasyon aslında bir dizi resmin sırayla gösterilmesinden başka bir şey değildir. VB ile de böyle animasyonlar yapmak çok kolaydır.

Bu örneğimizi uygulamak için önceden seçeceğiniz ve ard arda gösterildiğinde bir hareket oluşturacak 3 resim bulun. Bu üç resmi sırayla oluşturacağınız 3 görüntü kutusuna (image) yerleştirin. Formun üzerine bunlardan başka bir resim kutusu, timer kontrolü ve bir tuş ekledikten sonra aşağıdaki kodları yazmaya başlayın. Burada dikkat etmeniz gereken çok önemli bir şey var, o da Formun başlık çubuğundaki resmi de değiştireceğimizden Image kutularına yerleştireceğiniz resimleri simge (ICO) olmasıdır.

General - Declarations bölümüne yazılacakDim y As IntegerGeneral bölümüne yazılacakPrivate Sub degistir() y = y + 1: If y = 4 Then y = 1 Form1.Icon = Image1(y).Picture‘Resim kutusundaki resmi değiştir. Picture1.Picture = Image1(y).PictureEnd SubPrivate Sub Command1_Click()EndEnd SubPrivate Sub Timer1_Timer()‘Timer’ın kontrolünün her bir vuruşunda... degistir alt yordamını cagir.degistirEnd Sub

Timer kontrolünün Interval özelliğini 500 gibi bir sayıyla değiştirmeyi unutmayıp programı çalıştırdığınızda resim kutusuna sırayla üç görüntü kutusundaki simgelerin geldiğini göreceksiniz. İşin ilginç tarafı başlık çubuğundaki simgenin de resim kutusuyla eş zamanlı olarak değişmesidir. Metin kutusu tüyoları

Eğer VB ile uzun zamandır ilgileniyorsanız metin kutusunun kullanımı ile bir probleminiz kalmamıştır. Peki bu kontrol için birkaç püf noktasına ne dersiniz?

Şifreli metin kutularıBir metin kutusunu pekala kullanıcı şifresi almak için kullanabilirsiniz. Bunun için metin kutusunun

properties özelliklerinden PasswordChar üzerine giderek buraya kullanıcının tuşladığı her karaktere karşılık ekrana çıkacak karakteri girmelisiniz. Örneğin gerçek metni yıldız karakteriyle gizlemek istiyorsanız buraya "*" karakteri koymalısınız. Metin kutusunun bu özelliğini değiştirdiğinizde diğer özelliklerinin aynı kaldığını görürsünüz. Metin kutusunda yazılı olan şifreyi ise her zamanki gibi "Text" özelliği ile öğrenebilirsiniz. Kullanıcının gireceği karakter sayısını belirlemek için ise aşağıdaki püf noktamızı uygulayabilirsiniz.

Uzunluk kontrollü metin kutularıBir metin kutusuna girecek maksimum karakter sayısını belirlemek için "MaxLenght" özelliğini

kullanmalısınız. Metin kutusu sadece bu özelliğe vereceğiniz sayı kadar karakter kabul edecektir.

48

Page 49: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Karakterleri Gözardı etmekMetin kutusunun kabul edeceği karakterleri maskelemek için KeyAscii özelliğini kullanmalısınız.

Aşağıdaki örneğimiz Text1 metin kutusunun sadece tuşlanan rakamları kabul etmesi için tasarlanmıştır. Klavyeden rakam dışında herhangi bir karakter tuşlanınca bip sesi verilir ve karakter değeri "0"a çevrilir. Private Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii < Asc("0") Or KeyAscii > Asc("9") ThenKeyAscii = 0BeepEnd IfEnd Sub

Salt okunur metin kutusuBir metin kutusundaki metnin kullanıcı tarafından değiştirilmesini istemiyorsanız. Tek yapacağınız

metnin properties kutucuğuna gidip Locked özelliğine True değerini vermektir. Bunu yaptığınızda metin kutusundaki metin sabit kalacak, kullanıcı tarafından kopyalanabilecek fakat değiştirilemeyecektir.

Metin kutusunda tırnak karakteri kullanmakAlfa numerik değişkenler Visual Basic’te iki tırnak içine alındığından otomatik olarak bir problem

karşınıza çıkıyor. Değişken içerisinde tırnak karakteri geçiyorsa bunu kullanamıyorsunuz. Bunu önlemek için aşağıdaki gibi bir kod satırı kullanabilirsiniz: Text1.Text = "PC World Online ""Internet Kullanıcıları İçin En İyi Yerli Kaynak"" " Bu kod satırı Text1 metin kutucuğunda şu görüntüyü yaratacaktır: PC World Online "Internet Kullanıcıları İçin En İyi Yerli Kaynak"

VB ile fonksiyon kullanımıVB ile altyordam (SUB) kullanımını API fonksiyonlarını işlerken sıkça değinmişizdir. VB’de fonksiyon

kullanımı da bundan pek değişik sayılmaz, daha önce QBasic ile haşır neşir olanlar ise bunu kullanmayı zaten biliyorlar.

Biz örneğimizde iki sayının hipotenüsünü alan basit bir fonksiyon hazırladık. Fonksiyonu yaratmak için General kısmına gidin ve aşağıdaki üç satırı yazıp Enter’a basın. General - Declarations bölümünün hemen altında fonksiyonunuz belirecektir. Function Hipotenus(A, B)Hipotenus = Sqr(A ^ 2 + B ^ 2)End Function

Yukarıdaki gibi bir form hazırladıktan sonra artık fonksiyonunuzu deneyebilirsiniz. Her "hipotenüsü al" tuşuna basıldığında metin kutularındaki sayılar değerlendirilecek ve etiket kutusuna yazılacaktır. Private Sub Command1_Click()Label1.Caption = Hipotenus(CInt(Text1.Text), CInt(Text2.Text))End Sub 

Uygulama Listesini Çağırmak

Windows 3.1’de masaüstüne çift tıkladığınızda, Windows 95’de ise CTRL+ALT+DEL tuşlarına bastığınızda karşınıza açık olan uygulamaların bir listesi gelir. Bu listeyi kullanarak istediğiniz uygulamayı sonlandırabilir veya aktif hale getirebilirsiniz. Bu örneğimizde de yukarıdakine benzer bir uygulama yazacağız. Boş formun üzerine şekildeki gibi iki komut butonu bir de Combo Box yerleştirin ve aşağıdaki kodları yazın. 'General Declarations Bölümüne yazılacakDefInt A-Z

Declare Function GetWindow Lib "user" (ByVal hWnd, ByVal wCmd) As IntegerDeclare Function GetWindowText Lib "user" (ByVal hWnd, ByVal lpSting$, ByVal nMaxCount) As IntegerDeclare Function GetWindowTextLength Lib "user" (ByVal hWnd) As Integer 'GetWindows API’sinin "sabitleri"Const GW_CHILD = 5Const GW_HWNDFIRST = 0Const GW_HWNDLAST = 1Const GW_HWNDNEXT = 2Const GW_HWNDPREV = 3

49

Page 50: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Const GW_OWNER = 4Sub GorevListesi ()CurrWnd = GetWindow(Form1.hWnd, GW_HWNDFIRST)While CurrWnd <> 0Length = GetWindowTextLength(CurrWnd)ListItem$ = Space$(Length + 1)Length = GetWindowText(CurrWnd, ListItem$, Length + 1)If Length > 0 ThenCombo1.AddItem ListItem$End IfCurrWnd = GetWindow(CurrWnd, GW_HWNDNEXT)X = DoEvents()WendEnd SubForm penceresine yazılacak...Sub Command1_Click ()f$ = Combo1.Text'Eğer problem çıkarsa gözardı et.On Local Error Resume NextAppActivate f$End SubSub Command2_Click ()f$ = Combo1.TextOn Local Error Resume NextAppActivate f$'Uygulamaya ALT+F4 yollayarak kapat.SendKeys "%{F4}"End SubSub Form_Load ()Call GorevListesi'Herhangi bir uygulama açık değilse programdan çıkIf Combo1.ListCount > 0 ThenCombo1.Text = Combo1.List(0)ElseMsgBox "Hiç Bir Uygulama Açık Değil", 16Unload Form1End IfEnd Sub

Programı çalıştırdığınızda General - Declarations bölümünde tanımladığımız üç API fonksiyonu kullanılarak aktif uygulamalar çağırılır ve Combo kutusuna eklenir. Bu kutudan herhangi bir uygulamayı çağırarak penceresini aktif yapabilir veya uygulamayı kapatabilirsiniz.

Not: Uygulamayı kapatma seçeneği ALT+F4 tuşlarını kabul etmeyen uygulamalar için geçerli değildir.

Çok Seçenekli Liste KutularıListe kutuları Visual Basic 3.0’dan itibaren bir den çok

seçeneği kabul eder duruma gelmişlerdir. Liste kutusu kontrolünün nasıl kullanılacağını önceki aylarda göstermiştik. Aşağıdaki örneğimiz birden fazla seçeneği kabul eden liste kutularının nasıl kullanıldığını göstermektedir. Sub Command1_Click ()Dim I'2.Liste kutusunu temizle

List2.Clear 'Eğer seçili bir nesne varsa bunu 2.liste kutusuna gönderFor I = 0 To List1.ListCount - 1If List1.Selected(I) ThenList2.AddItem List1.List(I)End If

50

Page 51: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Next IEnd Sub Sub Command2_Click ()msg$ = ""msg$ = msg$ + "Seçili Öğeler"For I = 0 To List2.ListCount - 1If List2.Selected(I) Thenmsg$ = msg$ + Chr$(13) + List2.List(I)End IfNext IMsgBox msg$, 64, "Seçililer"End Sub Sub Form_Load ()Dim I'1. Liste Kutusunu ekranda görünen yazı tipleriyle doldur.For I = 0 To Screen.FontCount - 1List1.AddItem Screen.Fonts(I)Next IEnd Sub

Program çalıştırıldığında ekran yazıtipleri 1. Liste kutusunda belirecektir, "Gönder" tuşuna basıldığında 1. Liste kutusunda seçtiğiniz yazı tipleri 2.liste kutusuna kopyalanacak, "Liste" tuşuna basıldığında ise 2.liste kutusunda seçili olan öğeler mesaj kutusu kullanılarak görüntülenecektir. Örneğimiz çok seçenekli liste

kutularına tam erişim sağlamaktadır, siz de kodları programlarınızda kullanabilirsiniz. Not: Programınızı çalıştırmadan önce liste kutularının "Multiselect" özelliğini Properties kutucuğundan "2"(Extended) yapın. Programlarınız için Registry ayarlarıÇoğunuz Windows 95’in kayıt bilgileri (Registry) hakkında az çok bir şeyler biliyorsunuzdur. Registry programların kendisi hakkındaki bilgileri sakladığı uygun bir alandır.

Windows 3.1’de program bilgileri INI dosyalarında saklanırdı. Windows 95’de de 16 bitlik programlar halen INI dosyalarını kullanmalarına rağmen 32 Bitlik programlar artık registry’yi kullanıyor. Eğer 32 Bit’lik programlar hazırlıyorsanız siz de mutlaka registry bilgilerinin nasıl düzenlendiğini bilmelisiniz. Visual Basic registry’ye bilgi yazmak için kendi içerisinde bulunan bir API fonksiyonunu kullanır. Bu fonksiyon

bir komut değildir fakat VB bu fonksiyonu tanımak için dışarıdan bir DLL kullanmamaktadır. SaveSetting, GetSetting, DeleteSetting komutlarının genel kullanımı şöyledir:[KOMUT] "[PROGRAM ADI]", "[ANAHTAR]", "[ÖZELLİK]", "[DEĞER]komutların yerine getireceği işlev değiştikçe yukarıdaki satırın bazı parametreleri kullanılmayabilir. İşte size registry’ye bilgi yazan, okuyan ve silen bir programcık, yaptığı ise basit: pencere büyüklüğünü ve pencerenin ekrandaki yerini registry’ye yazıp siz

istediğinizde görüntülüyor. Private Sub Command1_Click()'Ayarları kaydetSaveSetting "Deneme", "Ayarlar", "Top", Form1.TopSaveSetting "Deneme", "Ayarlar", "Left", Form1.LeftSaveSetting "Deneme", "Ayarlar", "Width", Form1.WidthSaveSetting "Deneme", "Ayarlar", "Height", Form1.HeightEnd Sub Private Sub Command2_Click()GetSetting "Deneme", "Ayarlar", "Left"GetSetting "Deneme", "Ayarlar", "Top"GetSetting "Deneme", "Ayarlar", "Width"GetSetting "Deneme", "Ayarlar", "Height"

51

Page 52: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

 mesaj$ = "Sol: " & Left & Chr$(13) & "Üst: " & Top & Chr$(13) & "Uzunluk: " & Width & Chr$(13) & "Yükseklik: " & HeightMsgBox mesaj$, 64, "Mevcut Registry Ayarları"End Sub Private Sub Command4_Click()'Oluşturduğumuz registry ayarlarını silmek...'Deneme isimli programın tüm ayarlarını silmek içinDeleteSetting "Deneme" 'Sadece "Ayarlar" anahtarını silmek için'DeleteSetting "Deneme", "Ayarlar"'Kullanabilirsiniz...End Sub Visual Basic’de Windows 95 kısayollarının kullanımıVB’yi kullanarak Windows 95’in özelliklerinden biri olan Kısayol yaratma işlemini kolayca yapabilirsiniz. Tek ihtiyacınız Visual Basic’in kurulum kit’inde bulunan STKIT432.DLL isimli dosya. Formunuzdan bağımsız bir modüle aşağıdaki satırı girdikten sonra siz de kendi kısayollarınızı yaratabilirsiniz. Declare Function fCreateShellLink Lib "STKIT432.DLL" (ByVal lpstrFolderName as String ByVal lpstrLinkName as String ByVal lpstrLinkPath as String ByVal lpstrLinkArgs as String ) As Long İlk parametre kısayolun nerede oluşturulacağını belirler, ikinci parametre kısayolun isminin ne olacağını, üçüncü parametre ise kısayolu oluşturulacak dosyanın klasörü ve adını taşır. Dördüncü parametrenin ne işe yaradığını henüz bulamadık. Örneğin DIZIN klasöründe bulunan PCWORLD.EXE isimli bir dosyaya masaüstünde "PC World En Büyük" isimli bir kısayol oluşturmak istiyoruz, aşğıdaki kod satırını kullanırız: iLong = fCreateShellLink("..\..\Desktop", "PC World En Büyük", "C:\DIZIN\PCWORLD.EXE","") Değişkenleri karşılaştırmak için LikeSiz hala........değişkenleri karşılaştırmak için IF komutunu mu kullanıyorsunuz. Eğer öyle ise size daha hızlı bir yol öneriyoruz: Like. Kafanız karışmasın aslında komutun yaptığı işlem IF ile hayli farklı ama yine de bir karşılaştırma komutu. Komutun yaptığı iş VB’de pek de kullanılmayan "numune"leri değişkenlere karşılaştırmak aşağıdaki kodlara bakarsanız ne demek istediğimi anlayacaksınız: Deger = "aBBBa" Like "a*a" ' Doğru döndürür.Deger = "F" Like "[A-Z]" ' Doğru döndürür.Deger = "F" Like "[!A-Z]" ' Yanlış döndürürDeger = "a2a" Like "a#a" ' Doğru döndürür.Deger = "aM5b" Like "a[L-P]#[!c-e]" ' Doğru döndürür.Deger = "BAT123khg" Like "B?T*" ' Doğru döndürür.Deger = "CAT123khg" Like "B?T*" '  Güzel Püf NoktalarıVisual Basic 4.0 kullanıyorsanız Unload komutuyla bir formu bellekten atamayacağınızı bilin. Formu bellekten atmanın tek yolu Set [FORMA ADI] = Nothing komutunu kullanmaktır. Bir BMP’yi kolayca simge olarak kaydedebilirsiniz. Sadece "ImageList" kontrolünde "ListImage" özelliğinin "ExtractIcon" methodunu kullanmanız yeterlidir. VB yardımından bu konuda daha çok bilgi bulabilirsiniz. Visual Basic 4.0’ın form tasarımı sırasında kontrolleri sadece bir piksel oynatabilir, büyültebilir veya küçültebilirsiniz. Kontolün pozisyonunu değiştirmek için Ctrl+OK tuşlarını, büyüklüğünü değiştirmek içinse Shift+OK tuşlarını kullanabilirsiniz. Eğer "Align to Grid" seçeneği açıksa bu tuşlar kullanıldığında kontroller ızgaraya göre yerleştirilecektir. (Bizce bu özelliği kaldırın) Tasarım aşamasında VB pencereleri arasında CTRL+TAB tuşlarıyla dolaşabileceğinizi biliyor muydunuz? Bir programı çalıştırdığınızda projenizde yanlış bir kod varsa fakat çalıştırılmıyorsa programınızda herhangi bir hata meydana gelmeyecektir. Bu Visual Basic’in "Compile on Demand" özelliğinden gelmektedir ve iyi bir özellik DEĞİLDİR. RUN menüsünden Start with Full Compile seçeneğini seçerseniz projenizdeki tüm kodlar kontrol edilecektir. Programınızı yazarken herhangi bir "breakpoint" belirlemeden sadece yazdığınız kodu derleyebilirsiniz. Tek yapmanız gereken Run menüsündeki "Step to" tuşuna basmaktır. Uygulama çalışacak ve kursörün bulunduğu yer "break point" olarak atanacaktır, yani program bu aşamada bitecektir.

52

Page 53: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Metin kutusu sadece büyük karakterleri kabul etsinAşağıdaki kodlar, kullanıcı metin kutusuna metin karakter girerken eş zamanlı olarak girilen karakterleri büyük harfe çevirir. Sub Text1_KeyPress (KeyAscii As Integer)KeyAscii = Asc(UCase(Chr(KeyAscii)))End SubAutoTab ÖzelliğiVisual Basic’de ezelden beri mevcut olan fakat pek rağbet görmeyen Masket Edit kontrolünü seven bir kişi iseniz işte size güzel bir püf noktası. Eğer MS Office yazılımını bilgisayarınıza kurduysanız programın kurulum aşamasında CD anahtarını isterken bir kutucuktan öbür kutucuğa otomatik olarak atladığını görmüşsünüzdür. Bunu yapmak normal metin kutularında iki satır koda bağlıyken Masked Edit kontrolü kullanıldığında otomatik olarak yapılabilir. Bunu gerçekleştiren özellik AutoTab özelliğidir. Bu özellik "True" yapıldığında ve metin kutusuna girilecek maksimum karakter sayısı dolduğunda bir sonraki kontrol otomatikman aktif olacaktır. Olayları gerçekleştirmek için olayın gerçekleşmesini beklemeyinForm1.Click olayının içerisine uzunca bir kod yazdınız diyelim. Bu kodlar sadece o form’a tıklandığında çalıştırılır. Programı çalıştırdınız bir de gördünüz ki bu kodlara başka bir altyordamda ihtiyacınız var. Ne yaparsınız. Kodları kopyalayıp ilgili yere yapıştırmak tercih etmemeniz gereken bir yoldur. Bunun yerine kodları aşağıdaki gibi kullanabilirsiniz. If a=1 Then Form1.clickForm1.Click VB ile çevre değişkenlerini okumakDOS komut satırından SET komutunu girdiğinizde normal şartlarda en fazla 255 karakter olan çevre değişkenini okuyabilirsiniz. Visual Basic ile de çevre değişkeninin herhangi satırındaki veriye rahatlıkla ulaşabilirsiniz. Bunun için Environ fonksiyonunu kullanmanız yeterlidir. Dim EnvString, Indx, Msg, PathLen ' Değişkenleri tanımlaIndx = 1 ' Satır = 1 DoEnvString = Environ(Indx) ' Değişkeni okuIf Left(EnvString, 5) = "PATH=" Then ' PATH bölümünü araPathLen = Len(Environ("PATH")) ' uzunluğunu bulMsg = "PATH satırı = " & Indx & " uzunluğu = " & PathLenExit DoElseIndx = Indx + 1 ' PATH bölümü bulunamadıEnd If ' bir sonraki satıra geçIf PathLen > 0 ThenMsgBox Msg 'PATH değişkeni bulunursa uzunluğunu ve

'satırı görüntüleElseMsgBox "PATH tanımları bulunamadı."End If Dosya zaman, tarih ve uzunluk bilgileriVisual Basic ile FileDateTime fonksiyonunu kullanarak, dosyanın oluşturulduğu veya üzerinde son değişiklik yapıldığı tarihi ve saati bulabilirsiniz. Aşağıdaki örnek bu fonksiyonun kullanımını göstermektedir. Dikkat edilmesi gereken tarih ve saat bilgilerinin Windows'un ayarlandığı biçimde geri dönmesidir. Bu yüzden bu fonksiyon kullanıldıktan sonra geri dönen değişkeni tekrar formatlamak gerekebilir. Bir sonraki örnek ise dosyanın uzunluğunu kolayca bulmanızı sağlayacaktır. ' TEST isimli dosyanın en son 12 Şubat 1993 tarihinde,' saat 4:35:47'de değiştiğini varsayalım Bilgi = FileDateTime("TEST") ' Türkiye şartlarına göre dönen değişken 12/2/93 4:35:47 PM' şeklinde olacaktır.' Not: Dosyanın açılmasına gerek yoktur. Open "TEST" For Input As #1 ' TEST dosyasını aç

53

Page 54: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Uzunluk = LOF(1) ' Dosyanın uzunluğunu alMsgbox Uzunluk ' Dosya uzunluğunu gösterClose #1 ' Dosyayı kapat Visual Basic ve Add-In’lerElinizin altında küçük bir hazine var... Visual Basic 4.0 her türlü veritabanı dosyasının (Access, Paradox v.s.) formlarını oluşturabilen "Data Form Designer" adında becerikli bir Plug-In ile birlikte geliyor. öncelikle bu plug-in’i kullanabilmek için bazı işlemler yapmanız gerekiyor. Menüden Add-Ins * Add-in Manager komutlarını çalıştırın. Buradan "Data Form Designer"ı seçili durumu getirerek diyalog kutusunu kapatın.

Bu aşamadan sonra Add-ins menüsünde "Data Form Designer" eklentisini göreceksiniz. Bu add-in’i çalıştırdıktan sonra karşınıza çıkacak olan form seçtiğiniz veritabanı dosyasından minik bir veritabanı programı yapmanıza izin verecek. Bu eklentinin ne kadar becerikli olduğunu görünce oldukça şaşıracaksınız, arama ve sorgulama dışında hemen hemen tüm işlemleri yapabiliyor.   İnceleme: Visual Basic 5.0Birkaç hafta önce Microsoft’un düzenlediği bir kursa katılma şansı yakaladım. Şans diyorum çünkü kurs, Mart ayının sonlarında çıkması ve büyük yankılar uyandırması beklenen Visual Basic 5.0’ın yeni özelliklerini öğretme amaçlıydı. 3 gün süren kursta, daha önce test ettiğim ve çok etkilendiğim VB 5.0 Control Creation Edition’dan arabirim dışında bambaşka bir VB’ile karşılaştım. Bu yazıda Visual Basic 5.0 ile ilgili tüm yenilikleri bulamayacaksınız, fakat yeni VB’nin özelliklerini görürken, Microsoft’un Internet stratejilerinde ne kadar ciddi olduğunun bir kez daha farkına varacaksınız, bir programlama dilinden öteye gidilen Visual Basic 5.0’da kullanıcının işinin bir yandan ne kadar kolay bir düzeye

indirildiğini görürken aynı zamanda kompile olayların nasıl üstesinden gelindiğine de şahit olacaksınız. Arabirimdeki değişikliklerVisual Basic 5.0’ı ilk çalıştırdığınızda tasarımın oldukça değiştiğini fark ediyorsunuz. Microsoft, 97 adı altında çıkardığı tüm programlarda kullandığı

çarpıcı tasarımı yeni VB’de de kullanmış. Değişiklik

sadece menü pencereleri ve farklı butonlarla sınırlı değil, artık formları tasarlarken bir Container’ın dışına çıkamıyorsunuz, tüm işlemleri bir MDI form içerisinde gerçekleştiriyorsunuz. Sayfaya ilk baktığınızda "Form Layout Window" ve "Form Editor" adlı iki yeni pencereye rastlıyorsunuz. İçerisinde küçük bir pencere resmi bulunan "Form Layout Window" sayesinde artık formların ekranın neresinde görünmesini istiyorsanız kolayca oraya taşıyabiliyorsunuz. Aynı zamanda Format menüsünde de bir kopyasını bulabileceğiniz Form Editor ise birden fazla kontolü aynı anda biçimlendirmek, formun düzenini sağlamak için kullanılıyor. Visual Basic’in önceki sürümlerinde kullandığınız birçok kontrolü Properties kutucuğu yoluyla değiştirme imkanı Form Editörü sayesinde çok daha esnek bir hale getirilmiş. VB’nin her sürümünde az çok değişikliğe uğrayan Properties kutusu VB5.0 ile bambaşka bir görünüm kazanmamış ama işlevselliği arttırılmış, yeni kutunun en güzel özelliği listeden seçilen kontrol özelliklerinin kısa açıklamalarını kutun hemen altında bir pencerede görebilmeniz. Properties kutusu ayrıca isim ve kategorilere göre ayrılmış, kullanıcı kendi isteğine göre kontrol özeliklerini harf sırasına veya kategorilere göre listeleyebiliyor.

54

Page 55: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Kod penceresine ilk bakıldığında her zamanki gibi sol tarafta kontrol sağ tarafta özellik kutularını görüyorsunuz, "bir kaç satır kod yazalım bakalım" dediğinizde ise bütün işler değişiyor, çünkü VB yazdığınız ilk kontrol isminde veya komut’ta size bir sürpriz hazırlamış oluyor. Belki de yeni VB’nin en can alıcı özelliklerinden biri olan kod yardımı gerçekten süper tasarlanmış, kullanıcı bir kontrol ismi girdiğinde VB kontrol ile ilgili kullanabileceğiniz tüm özellikleri bir araya getiriyor ve bir liste hazırlıyor, programcıya sadece ok tuşlarıyla uygun özelliği bulup ENTER ile kodların arasına eklemek kalıyor. Pencereye bir komut girildiğinde ise VB hemen ilgili komut için bir yardım baloncuğu çıkarıyor.

Kod yardımı sadece kontroller ve komutlar için değil tüm sınıflar, değerler gibi VB’nin tüm bileşenleri için geçerli. VB 4.0 ile gelen altyordamların çizgi ile ayrılma özelliği VB5’de default olarak geliyor. Yapısal DeğişikliklerMicrosoft’un Visual Basic takımı programı oldukça değişik bir yapıya sokmuş, VB5’i diğerlerinden farklı kılan tek mantık aslında ActiveX kontrolleri ve bu kontrollerin Internet ve Intranet ortamlarında kullanılabilmesini iken, Microsoft’un bu yolda yaptığı değişiklikler programın sadece arabiriminin değil felsefesini de biraz değiştirmiş gibi görünüyor. Programlar artık bir proje gibi değil de bir "GRUP" gibi görünüyor, kod

aşamasında yazdığınız tüm ActiveX kontrolleri, dökümanları, sınıflar ve formlar VB5’de bir grup gibi görünüyor. VB5 tüm bir projeyi kaydetmek istediğinizde projenin soyadını VBG olarak atıyor. Grup mantığı içerisinde kontrolleri ve diğer bileşenleri başka projelerde veya tek başına kullanabilseniz bile gruplar, örneğin bir ActiveX kontrolü bulunamadığında hata veriyor ve çalışmıyor. Programlarınızın tüm hiyerarşisini her zamanki gibi Project penceresinde görebiliyor ve değiştirebiliyorsunuz, her ActiveX dökümanı, sınıf, form ve ileride değineceğimiz "Property Page" yaratıldığı anda burada beliriyor. Kontrol özelliklerini "Expose Etmek"Bir Visual Basic kontrolünü seçtiğinizde ve properties kutusuna baktığınızda onun

kullanabileceğiniz tüm özelliklerini görürsünüz. Kendi tasarladığınız kontroller için de değişen bir şey yok. Kontrol, tasarım aşamasındayken tüm özellikleri properties kutucuğunda beliriyor, fakat kontrolü form üzerine yerleştirdiğinizde işler değişiyor çünkü kontrolün sadece renk boyu gibi temel özelliklerini listede görebiliyorsunuz. Microsoft’un amacı son kullanıcının bir kontrolün tüm özelliklerini değil sadece programcının tayin ettiği özellikleri özellikleri görebilmesini sağlamak. Bu da Visual Basic 5’deki bazı komutlar ve sihirbazlarla sağlanmış. Menülerden bulacağınız "ActiveX Control Wizard" ile kontrolde programınız tarafından kullanacağınız özellikleri seçebilir yani kontrol özelliklerinin bazılarını expose edebilirsiniz. Bir kontrolü expose ettiğinizde aşağıdaki gibi kodlar ortaya çıkacaktır. Get Color ve Let Color kontrol özelliklerinin form içinden hem okunmasını hem de değiştirilmesini sağlamak amacıyla kullanılmıştır. Option Explicit Public Property Get Color() As Long Color = BackColorEnd Property Public Property Let Color(NewValue As Long) BackColor = NewValueEnd Property Private Sub UserControl_Initialize() 

End SubProperty PageYukarıda belirttiğimiz gibi sadece programcının kullanılmasını istediği özellikler properties kutucuğunda görünecek ve program çalışırken değiştirilebilecektir. Expose edilen her bir özellik aynı zamanda Property Page denilen ve Properties kutucuğuna çok benzeyen bir kutucuğa yerleştirilebilir. Nedir Property Page? Microsoft, programcıların tasarladıkları uygulamaya tam olarak hakim olmalarını istemi ve onlara bir çok seçenek vermiş. Property Page, programcının en çok kullandığı özellikleri bir araya getirmesini sağlamak amacını taşıyan bir araç. Expose

55

Page 56: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

ettiğiniz veya kontrol ile standart olarak gelen tüm özellikleri kodlar aracılığıyla yada VB sihirbazlarıyla Propert Page’lere eklemek mümkün. Program içerisinde bir kontrol en fazla 1 property page’e sahip olabilirken projede istediğiniz kadar property page kullanabilirsiniz. Visual Basic’de yeni bir fonksiyon: enumerateBir değişkene atanabilen tüm değerleri teker teker saymak anlamına gelen "enumerate" olayı MS Visual C++ gibi güçlü programlama dillerinde çok önceleri kullanılmaya başlansa da Visual Basic’e hiç bir zaman dahil edilmemişti. VB5 ile birlikte ENUM fonksiyonunu API’lerden çağrılmasına izin verilmiş. Aşağıdaki küçük program fonksiyonun yapabileceklerinin en güzel kanıtı. Form üzerinde bir liste kutusu bir de komut butonu yarattıktan sonra aşağpıdaki kodları girin. Program, Windows içinde açık olan tüm pencereleri, açıklamalarını ve kodlarını liste kutusuna yazacaktır. Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, _ByVal lParam As Long) As Long Function enumerate(ByVal xhwnd As Long, ByVal lret As Long) As BooleanIf lret = 0 Thenenumerate = FalseElseForm1.List1.AddItem CStr(xhwnd)enumerate = TrueEnd IfEnd Function  Private Sub Command1_Click()Dim x As Integerx = EnumWindows(AddressOf enumerate, 5) Select Case x Case 0 MsgBox "Hata oluştu" Case Else MsgBox "Tüm uygulamalardaki pencere sayısı " & List1.ListCount End Select

End Sub İlk ActiveX uygulamasıVB5 içerisinde tasarladığınız kontrolleri Internet ortamına aktarabileceğinizi söylemiştik. Internet ile haşır neşir olduysanız mutlaka bilgisayarınıza ActiveX kontrolünü yüklemek isteyen bir site ile karşılaşmışsınızdır. Explorer kontrolü açmak istediğinde "Installing Components..." yazısını durum çubuğuna yerleştirir. Eğer merak ediyorsanız siz de bir ActiveX kontrolü yaratabilir ve Internet Explorer web tarayıcınız aracılığıyla yarattığınız kontrolü izleyebilirsiniz. (Netscape ne ActiveX kontrollerini ne de VBScript’i henüz desteklemiyor)

Öncelikle VB açıldığında yeni bir ActiveX kontrolü yaratın ve bunun içerisine rastgele işler yapan bir buton v.s. yerleştirin. Bundan sonra yeni bir form yaratın ve arkada kalan ActiveX kontrolünü "silmeden tamamen KAPATIN", kontrol çobuğunda silik olan bir buton, renklenecek ve kullanılabilir hale gelecektir. Bu butona basarak formunuzun üstüne gidin ve sağ tuşa basılı olarak formun üzerine bir kare çizin. Şu anda kendi yarattığınız ve Microsoft’un liste kutusu, klasör kutusu gibi ve aynı kategoriye giren bir ActiveX kontrolünü formunuzun üstüne yerleştirdiniz. VB5 ayrıca kontrolleri derleyerek OCX haline getirmenizi ve sonradan formlarınızın içinde bunları tekrar kullanabilmenize izin vermektedir. Bu işlemlerden sonra VB projenizi DENEME.VBG olarak kaydedin ve "Application Setup Wizard"ı çalıştırın. Bu program size ne tip bir uygulama yapmak istediğinizi sorduğunda ona ActiveX uygulaması olarak cevap verin ve DENEME.VBG’yi seçerek işleme başlayın. Tüm işlemler bittiğinde programı derlendiğiniz dizinde bir CAB uzantılı bir de HTM uzantılı ili dosya ile karşılaşacaksınız. HTM dosyasının içeriğine baktığınızda VB tarafından otomatik olarak yazılmış olan aşağıdakine benzer kodlarla karşılaşacaksınız. CLASSID ifadesi hazırlayacağınız her ActiveX kontrolü için, hatta kontrolü her derlediğinizde farklı olacaktır, CODEBASE ise her zaman tasarladığınız projenin adını taşıyacaktır. CLASSID ile kontrolün içerisindeki numaranın tutmaması durumunda ise Internet Explorer bunu anlayacak ve kontrolü görüntülemeyecektir.

56

Page 57: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Nihayet HTM sayfasını Explorer ile görüntülediğinizde kontrolün aynı Visual Basic formunda çalıştığı gibi çalıştığına şahit olacaksınız. En sonunda Internet üzerinde de çalışabilen bir uygulama geliştirdiniz. Dosyalar Geri Dönüşüm Kutusu'naVB4'ün 32-bit'lik sürümünü kullanıyorsanız, dosyaları programınız içinden Windows'un çöp kutusuna gönderebilirsiniz. VB'de KILL komutuyla sildiğiniz hiç bir dosya normal olarak çöp kutusuna gitmeyecek ve kullanıcı dosyasını geri getirmek istediğinde çöp kutusunda bulamayacaktır. Eğer becerikli bir kullanıcı arabirimi istiyorsanız bu özelliği göz ardı etmemelisiniz. Aşağıdaki örnek sadece dosyayı çöp kutusuna göndermeyi değil, VB 4.0 ile gelen ParamArray ifadesinin kullanımını da gösteren güzel kodlardan oluşmaktadır.

Option Explicit Private Type SHFILEOPSTRUCT hWnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAborted As Boolean hNameMaps As Long sProgress As String End Type

Private Const FO_DELETE = &H3 Private Const FOF_ALLOWUNDO = &H40 Private Declare Function SHFileOperation Lib "shell32.dll" Alias _ "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Public Function ShellDelete(ParamArray vntFileName() _ As Variant) As Long

Dim I As Integer Dim sFileNames As String Dim SHFileOp As SHFILEOPSTRUCT

For I = LBound(vntFileName) To UBound(vntFileName) sFileNames = sFileNames & vntFileName(I) & vbNullChar Next sFileNames = sFileNames & vbNullChar

With SHFileOp .wFunc = FO_DELETE .pFrom = sFileNames .fFlags = FOF_ALLOWUNDO End With

ShellDelete = SHFileOperation(SHFileOp)

End Function

Örnekte ParamArray ifadesi kullanılarak fonksiyona birden fazla parametre tanıma özelliği kazandırılmıştır Tek bir dosya silmek için X = ShellDelete("DELETE.ME") komutunu kullanabileceğiniz gibi, X = ShellDelete("DELETE.ME", "LOVE_LTR.DOC", "COVERUP.TXT") komutunu kullanarak adı geçen üç dosyayı da silebilirsiniz.  Komutlara Resim EklemekVB 3'de bazı API fonksiyonlarını kullanarak her menü komutunun kenarına bir resim yerleştirebiliyorduk. VB4'te ise bu işlem çok daha kolay bir hale getirilmiş. Program ile birlikte bilgisayarınıza kurulan fakat siz onu

57

Page 58: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

bulmadıkça gizlenen ImageList kontrolü sayesinde bir kaç satır kodla bu işi gerçekleştirebiliyorsunuz. Programı çalıştırdığınız anda ImageList içindeki küçük simgeler menü seçeneklerine yerleştirilecek ve program sonlanana kadar orada kalacaktır.

Private Sub Form_Load() Dim i% Dim hMenu, hSubMenu, menuID, x hMenu = GetMenu(hwnd) hSubMenu = GetSubMenu(hMenu, 0) For i = 1 To 4 menuID = GetMenuItemID(hSubMenu, i - 1) x = SetMenuItemBitmaps(hMenu, menuID, &H4, img.ListImages(i).Picture, img.ListImages(i).Picture) Next menuID = GetMenuItemID(hSubMenu, 5) x = SetMenuItemBitmaps(hMenu, menuID, 0, img.ListImages(5).Picture, 0&) End Sub Dosya KopyalamakVB'de dosyaları bir yerden bir yere kopyalamak için FileCopy isimli bir komut olduğunu biliyor muydunuz? FileCopy "C:\COMMAND.COM", "C:\COMMAND.XXX" gibi bir komut verdiğinizde ana dizinde bulunan COMMAND.COM isimli dosyanın yine aynı dizinde COMMAND.XXX isimli bir kopyası oluşacaktır Programlarınız Hızlansın!Eğer bir çok formdan oluşan bir projeniz varsa verdiğimiz püf noktasından yararlanarak projenizdeki formların daha hızlı yükletilmesini sağlayabilirsiniz. Yapmanız gereken Tool * Options menülerini geçerek karşınıza gelecek olan diyalog kutusunda Advanced sekmesine atlamak Project Load bölümünden Background Project Load seçeneğini açmak. Bunu yaptığınızda VB siz bir formla uğraşırken diğer bir formu arkaplanda belleğe yükleyecek ve zaten çok değerli olan bellek alanınızı işgal edecektir... Olsun hız daha önemli :) Resmi Simge Haline GetirmekVisual Basic 4.0'da ExtractIcon metodunu kullanarak herhangi bir resmi simge haline getirebilirsiniz. Bunu yapmak için Imagelist kontrolünün ListImage özelliğini kullanmalısınız. Deneyin çok basit olduğunu göreceksiniz. VB5.0'da Sürükle ve Bırak!VB'nin herhangi bir versiyonunda sürükleme ve bırakma işlemini gerçekleştirebilirsiniz. Peki ya OLE nesnelerini sürüklemek? Word'den Excel'e yazıları sürükleyip bırakabiliyorsunuz, ya da bir metni başka bir alana sadece fare ile seçip yerleştirebiliyorsunuz. VB'de bunu yapabilirsiniz. VB5'den önceki sürümlerde bu pek mümkün görülmüyor; VB5 ise birlikte getirdiği özelliklerden biriyle bunu gerçekleştirmenize izin veriyor. Denemek için şunu yapabilirsiniz; form üzerine yan yana iki metin kutusu yerleştirin. Her iki metin kutusunun da OLEDragMode özelliğini 1-Automatic, OLEDropMode özelliğini 2-Automatic yapın. Formu çalıştırdığınızda artık metin kutularından bir tanesindeki metni seçip sürükleyerek öbür metin kutusuna yerleştirebilirsiniz. MS Word'ü ya da OLE destekleyen diğer programlarınızı da açıp bu özelliği deneyebilirsiniz, metin kutusundaki metni sadece sürükleyip bırakarak diğer dokümanlara kopyalayabildiğinizi göreceksiniz. Registry'de TemizlikSisteminize yüklediğiniz her bir OCX kendini REGISTRY'ye kaydeder. Siz sonradan ilgili OCX'i silseniz bile REGISTRY'de onun imzası kalır ve zamanla bu bölüm bir çöplük haline gelir. Aynı şey yüklediğiniz ve kurulum programını kullanmadan sisteminizden sildiğiniz (!) programlar için de geçerlidir. Microsoft'un geliştirdiği RegClean isimli bir programı kullanarak sisteminizde imzası bulunan fakat kendisi bulunmayan tüm OCX'leri temizleyebilirsiniz. VB4 CD'nizin TOOLS\PSS dizininde bulabileceğiniz REGCLEAN.EXE dosyasını çalıştırdığınızda REGISTRY'deki hataları bulur ve düzeltmek için sizden onay bekler. Programın yaptığı değişiklikleri geri getirmek için ise sadece UNDO????.REG dosyalarını çalıştırmanız yeterlidir. Hem Yazıcı Seçin Hem YazdırınDergiyi arayan bazı okuyucular Form.Print metodunu ya da Printer nesnesini kullanarak form veya metin içeriklerini yazıcıdan çıkarabildiklerini fakat kullanıcıya yazıcı seçme veya dosyaya yazdırma imkanı vermek istediklerini söylediler. Sorunun çözümü çok basit tek yapmanız gereken yazdırma komutu vermeden önce COMMDLG.DLL dosyasında gizli olan Genel Diyalog Kutusunun Yazıcılar için olan bölümünü kullanmak.

58

Page 59: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Aşağıdakine benzer bir form oluşturur ve menü seçeneklerinden "Yazdır"a verdiğimiz kodları eklerseniz önce yazıcı seçimi ve özelliklerini gösteren diyalog kutusu ekrana gelecek sonra seçime göre metin kutusundaki yazılar uygun yazıcıya bastırılacaktır.

Private Sub yazdir_Click() CommonDialog1.Action = 5 Printer.Print Text1.Text End Sub Matematik FonksiyonlarıBu güne kadar örneklerimizde Val(), Str() gibi fonksiyonları sıkça kullandık. Bu fonksiyonlar her ne kadar metinler ile sayılar arasında geçiş yapma özelliğine sahip olsalar da VB'de "matematik fonksiyonları" kategorisinde yer alırlar. Eğer VB'deki diğer matematik fonksiyonlarını da öğrenmek istiyorsanız aşağıdaki listemize bakabilirsiniz. Fonksiyon İşleviAbs(n) n'nin mutlak değerini verirAtn(n) n'nin radyan cinsinden arktanjantını verirCos(n) n açısının kosinüsünü verir.Exp(n) n kuvvete yükseltilen e sabitini verirRnd(n) 0 ile n arasında rasgele bir ondalıklı sayı üretirSgn(n) n 0'dan küçükse -1, n 0'sa 0, n 0'dan büyükse 1 değerini verirSin(n) n açısının sinüsünü verirSqr(n) n sayısının karekökünü verirStr(n) numerik bir değişkeni alfanumerik bir değişkene çevirirTan(n) n açısının tanjantını verirVal(n) Alfanumerik bir değişkenin numerik bir karşılığını verir Visual Basic'te Bir Sürpriz!VB ile hep program mı yapacaksınız, biraz da programcıların muzipliklerini görelim. VB 4.0 kullananlar birazdan anlatacağım işlemleri uyguladıklarında, araç kutusundaki her bir nesnenin açıklamasını VB geliştirme ekibinin bir üyesi olarak görecekler. Öncelikle yeni bir proje açın ve Form1 üzerinde bir metin kutusu oluşturun. Metin kutusunun Text özelliğini, yani içindeki metni Properties kutucuğunu kullanarak Thunder olarak değiştirin. Form üzerindeki kontroleri kilitlemek için kullandığınız tuşa bir kez basarak kontrolleri kilitleyin. Bundan sonra VB araç kutusunun üzerine gidin ve fareyi her bir buton üzerinde bir miktar bekletin. İşte VB program geliştirme ekibi! FORMU ORTALAMAK640*480 çözünürlükteki ekranlar için tasarladığınız uygulamanızın daha yüksek çözünürlüklerde ekranda rasgele bir yerde belirmesinden şikayetçiyseniz, işte size sadece 2 satırdan oluşan bir kod. Kodları her formun Load olayına ekleyebilir ya da ana modülde bir altyordam haline getirip yüklediğiniz tüm formlardan çağırabilirsiniz. Ortalanma işlemi her büyüklükteki form için başarılı olacaktır. Private Sub Form_Load() Left = (Screen.Width - Width) \ 2 Top = (Screen.Height - Height) \ 2 End Sub PROGRAMINI GECİKTİREN NE?UZUN süredir üzerinde çalıştığınız projenizin yavaş çalıştığını mı farkettiniz? O zaman birinci formdan başlayarak neyin programınızı yavaşlattığınızı bulmanızı tavsiye ederiz. Bu işlemi yapmak çok basit: Programınızı her zamanki gibi F5 tuşu ile değil de bu sefer F8 tuşu ile başlatın. Visual Basic her bir satırdan sonra durarak bir sonraki satırı çalıştırmak için sizden F8 tuşuna basmanızı isteyecektir. Böylece VB'nin her bir satırı çalıştırmak için sizden aldığı zamanı öğrenebileceksiniz. Step Into denilen bu işlemi, tekrarlanan kodları optimize ederek ve gerekli yerlerde ' debug' penceresini kullanarak verimli bir biçimde değerlendirirseniz programınızın hızlandığını göreceksiniz. HAFTANIN KAÇINCI GÜNÜNDEYİZ?DATE$ değişkenini değişik formatlardan okutarak bulunduğunuz günü kolayca öğrenebilirsiniz. Bir de WeekDay fonksiyonu var ki yeri bambaşka... Bu fonksiyonu o günkü tarihi hiç değiştirmeden sadece bir tarih atayarak o tarihin haftanın kaçıncı gününe geldiğini öğrenmek için kullanabilirsiniz.

59

Page 60: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Tarih = #2/12/69# Gun = WeekDay(Tarih) MsgBox Gun Hemen belirtelim, Visual Basic haftanın ilk günü olarak Pazar gününü kabul etmektedir. Ekrana gelecek ' 3' gibi bir sonuç verdiğiniz tarihin ' Salı' gününe denk geldiğini gösterirDOS PENCERESİ KAPANSINWINDOWS 95 altında bir DOS uygulaması çalıştırdığınızda eğer o programa ait bir PIF dosyası ya da kısayol yoksa, program penceresi çalıştırıldıktan sonra kapatılmaz ve ekranda kalır. Bu durumu önlemek için Windows'un bir API'sini kullanabilir, program sonlandıktan sonra DOS penceresini ortadan yok edebilirsiniz. Windows 95 ile birlikte gelen USER32.DLL ve KERNEL32.DLL adlı iki dosyayı kullanarak tanımladığımız üç fonksiyon sadece iki adet parametre ile işi bitiriyor.

Declare Function FindWindow& Lib ' user32' Alias ' FindWindowA' _ (ByVal lpClassName As String, ByVal lpWindowName As String) Declare Function SendMessage Lib ' user32' Alias ' SendMessageA' (ByVal hwnd As Long, _ ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Declare Sub Sleep Lib ' kernel32' (ByVal dwMilliseconds As Long) Public Const WM_CLOSE = &H10 Private m_sEXEName As String Private m_sDosCaption As String Public Sub RunDosApp() Dim vReturnValue As Variant Dim lRet As Long Dim i As Integer vReturnValue = Shell(m_sEXEName, 1) ' Dosyayı çalıştır AppActivate vReturnValue ' EXE penceresini aktif hale getir. Do Sleep (10000) lRet = FindWindow(vbNullString, m_sDosCaption) If (lRet <> 0) Then vReturnValue = SendMessage(lRet, WM_CLOSE, &O0, &O0) Exit Do End If

Loop End Sub DOSYA YERİNDE Mİ?PROGRAMINIZ çalışması için gerekli bir dosya silindiğinde bunu anlayabiliyor mu? Bir dosyanın verdiğiniz konumda bulunup bulunmadığını Visual Basic'teki Dir fonksiyonunu kullanarak bulabilirsiniz. Nasıl mı? Sadece istediğiniz dosya ismini bu fonksiyona atamanız ve dönen sonucu değerlendirmeniz yeterli olacaktır. Dönen değer boş bir değişken ise (' ' ) dosya belirttiğiniz yerde bulunmuyor demektir. Private Sub Form_Load() Dosya = Dir(' C:\AUTOEXEC.BAT' ) If Dosya = ' ' Then MsgBox ' Dosya Bulunmuyor!' Else MsgBox ' Dosya Bulundu!' End If End Sub Dir fonksiyonunu merak edenler için biraz daha açalım: Genel kullanımı degisken=Dir[(YolAdı[, ekler])] olan bu fonksiyon sabit diskinizin istediğiniz bölümündeki herhangi bir bir dosya hakkında bilgiler almanıza yardımcı olur. ' Ekler' parametresi sayesinde gösterdiğiniz dosyanın dizin olup olmadığını ve hangi takılara sahip oldugunu (gizli, sistem gibi...) öğrenebilirsiniz. Eğer gösterdiğiniz dosya bulunamazsa fonksiyon hiç bir hata vermeyip sadece boş bir alfanumerik değişken döndürecektir. DİSKTEKİ BOŞ ALANI BULMAKSİZE herhangi bir diskte kalan boş alanın nasıl bulunacağını veremeyeceğiz; çünkü bu durumda Visual Basic'in her bir sürümü için ayrı kodlar vermemiz gerekir. Aslında herhangi bir komutu bulunmayan boş disk alanı bulma

60

Page 61: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

işlemini VB uygulamalarınızın kurulumunu gerçekleştirmek için kullandığınız dosyalardan biri olan SETUPKIT.DLL (VB4'te STKIT416.DLL) dosyasını kullanarak gerçekleştirebilirsiniz. Declare Function DiskSpaceFree Lib ' SETUPKIT.DLL' () As Long satırını formlardan bağımsız bir modüle yazdıktan sonra aşağıdaki üç satırı kullanarak sadece VB 3.0'da geçerli olacak programcığınızı tamamlayabilirsiniz. Dim bos_alan& ' DiskSpaceFree() fonksiyonunun döndürdüğü değeri taşır. ChDrive ' c:' ' Boş alanı bulmadan önce sürücümüzü seçelim. free_space& = DiskSpaceFree() VB'nizin sürümü ne olursa oldun SETUPKIT dizinindeki projeyi açarak hangi DLL dosyasından yararlanacağınızı ve ne gibi kodlar yazmanız gerektiğini öğrenebilirsiniz. ÇOKLUORTAM DOSYALARINI ÇALIŞTIRMAKDAHA önceki aylarda AVI dosyalarını oynatmak, WAV dosyalarını çalmak başlıkları altında verdiğimiz püf noktaları size çok uzun gelebilir. Çokluortam dosyalarını kendilerine ait API'lerle çağırmak daha hızlı ve daha sağlıklı olsa da size hiç bir seçeneği ayarlama olanağı vermeyen bir DLL dosyasını çağırarak da sistemse tanımlı tüm çokluortam dosyalarını minimum zahmetle çalıştırabilirsiniz. ' Aşağıdaki satır formlardan bağımsız bir modüle konulacak Declare Function mciExecute Lib ' MMSystem' (ByVal FileName as String) As Integer ' Fonksiyonu aşağıdaki gibi kullanabilirsiniz. ' Tırnak içindeki play komutu sabit kalmalıdır. Sub Form1_Click () ' x değeri dosyanın başarılı olarak çalışıp çalışmadığını döndürür. x = mciExecute(' Play c:\windows\ding.wav' ) x = mciExecute(' Play test.avi' ) End Sub VB Hangi Modda?UZUN süredir Visual Basic'te program hazırlıyor ve Immediate penceresini değişkenlerin aldığı değerleri öğrenmek için verimli olarak kullanıyorsanız bir püf noktasını bilmenizde fayda var: Yazacağınız tek satırlık bir fonksiyonla Visual Basic 5'in çalışma modunda mı yoksa bekleme modunda mı olduğunu bulabilir ve bunu programınıza anlatabilirsiniz. InRunMode() fonksiyonunun kullanılması aşağıdaki gibidir: Function InRunMode(VBinst As VBIDE.VBE) As Boolean InRunMode = (VBinst.CommandBars(' Run' ).Controls(' End' ).Enabled = True) End Function METİN KUTUSU AKTİFSE...WINDOWS aktif olduğunda içerdiği metnin tümü seçilen metin kutuları gibi hayatımızı kolaylaştıracak bir çok güzel özellik bulundurur. Siz de bu özellikleri programlarınıza koyduğunuzda programınızın kullanılmasını daha kolay bir hale getirirsiniz. Bir metin kutusunun içeriğinin TAB tuşuyla veya başka bir şekilde aktif olmasıyla seçilmesini, aşağıdaki kodları metin kutusunun Got_Focus özelliğine ekleyerek sağlayabilirsiniz. Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) Eğer projenizde bir çok metin kutusu bulunuyorsa yukarıdaki iki satırı her metin kutusuna yazmanız zor olacaktır. Bunun için General - Declarations kısmına projenin her tarafından çağırılabilecek aşağıdaki altyordamı yazıp bu altyordamı herhangi bir metin kutusunun Got_Focus özelliğinden SelAllText yazarak çağırmanız daha uygun olacaktır. Public Sub SelAllText() Screen, ActiveControl.SelStart = 0 Screen.ActiveControl.SelLength = Len(Screen,ActiveControl.Text) EndSub DİZİN SEÇTİRMEKWINDOWS'UN aç, kaydet, farklı kaydet diyalog kutularını kullanarak kullanıcının bir dosyası seçmesini veya kaydetmesini sağlayabilirsiniz. İş klasör seçmeye gelince genel diyalog kutuları yeterli olmayacaktır. Siz de klasör seçtirmek için VB ile gelen dirlistbox'ı kullanacaksınız. Aslında bu kontrolü kullanmanıza pek gerek yok. VB'e nasıl bir genel diyalog kutusu istediğinizi söylerseniz o sizin için o biçimde bir aç diyalog kutusu çıkaracaktır. Aşağıdaki fonksiyonu çağırdığınızda Win32'nin yeni özelliği olan dizin seçme kutusu ortaya çıkacaktır. Option Explicit Private Type BrowseInfo hWndOwner As Long pIDLRoot As Long pszDisplayName As Long

61

Page 62: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

lpszTitle As Long ulFlags As Long lpfnCallback As Long lParam As Long iImage As Long End Type Private Const BIF_RETURNONLYFSDIRS = 1 Private Const MAX_PATH = 260 Private Declare Sub CoTaskMemFree Lib ' ole32.dll' (ByVal hMem As Long) Private Declare Function lstrcat Lib ' kernel32' Alias ' lstrcatA' _ (ByVal lpString1 As String, ByVal lpString2 As String) As Long Private Declare Function SHBrowseForFolder Lib ' shell32' _ (lpbi As BrowseInfo) As Long Private Declare Function SHGetPathFromIDList Lib ' shell32' _ (ByVal pidList As Long, ByVal lpBuffer As String) As Long Public Function BrowseForFolder(hWndOwner As Long, sPrompt _ As String) As String Dim iNull As Integer Dim lpIDList As Long Dim lResult As Long Dim sPath As String Dim udtBI As BrowseInfo With udtBI .hWndOwner = hWndOwner .lpszTitle = lstrcat(sPrompt, ' ' ) .ulFlags = BIF_RETURNONLYFSDIRS End With lpIDList = SHBrowseForFolder(udtBI) If lpIDList Then sPath = String$(MAX_PATH, 0) lResult = SHGetPathFromIDList(lpIDList, sPath) Call CoTaskMemFree(lpIDList) iNull = InStr(sPath, vbNullChar) If iNull Then sPath = Left$(sPath, iNull - 1) End If End If BrowseForFolder = sPath End Function BUTON YARDIMLARIVB kullanıcıları her zaman dışarıdan temin ettikleri ' tooltip' kontrollerini kullanarak butonların üzerine gidildiğinde bir süre sonra ortaya çıkan yardım kutucuklarını programlarına koymayı uygun bulmuşlardır. Aslında sadece bir etiket kontrolünü kullanarak tooltip oluşturmak mümkündür.Öncelikle form üzerinde bir buton, bir de etiket kontrolü oluşturun. Etiket kontrolünü sarıya boyayarak içine uygun açıklamayı yazın ve istediğinizbüyüklüğe getirin. Etiketi formun sınırları dışına taşıyın. (Formu büyütüp etiket kontrolünü uç noktalardan birine getirin ve kontrolü daraltın.) Bunları yaptıktan sonra komut butonunun ' MouseMove' bölümüne giderek aşağıdakine benzer bir satır yazın: Label1.Move 100,150 MouseMove olayı ile birlikte ' timer' nesnesini kullanarak daha geç çıkan tooltip'ler oluşturabilirsiniz, hem de hiç bir kontrol kullanmadan. DUVAR KAĞIDINI DEĞİŞTİRMEKAŞAĞIDAKİ küçük programı yazarak Windows'unuzun duvar kağıdının değişmesini ve tıpkı ' Uygula' tuşuna basılmış gibi anında görüntülenmesini sağlayabilirsiniz. WIN.INI dosyasına yazılmış değişikliklerin anında uygulanması için benzer kodları siz de programlarınızda kullanabilirsiniz. Öncelikle aşağıdaki sabitleri programdan ayrı bir modüle yazın: Const SPI_SETDESKWALLPAPER = 20 Const SPIF_UPDATEINIFILE = 1 ' WIN.INI sabitlarini güncelle Const SPIF_SENDWININICHANGE = 2 ' Win.ini dosyasını değiştir ve bunu tüm programlara bildir.

62

Page 63: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Altyordamı çağırmak için aşağıdaki satırları kullanın: Call WriteIniFile(' C:\WINDOWS\WIN.INI' , ' DeskTop' , ' TileWallPaper' , sValue, iEcode) Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, ByVal sBMPFileName, SPIF_UPDATEINIFILE) AVI FİLMLERİ OYNATMAKDERGİYE gelen Visual Basic mektuplarından birçoğunda WAV ve MIDI dosyalarını çalabildiğinizi belirtiyor, AVI ve FLI görüntü dosyalarını çalıştırmayı soruyorsunuz. FLI dosyaları Autodesk'in hareketli görüntü formatı olup Internet üzerinde bulunabilecek bazı VBX ve OCX dosyaları sayesinde görüntülenebilirler. AVI dosyalarını görüntülemek için ise Windows'un bir parçası olan medya aygıtını kullanabilirsiniz.

Declare Function mciSendString Lib ' mmsystem' (ByVal strCommand As String, ByVal strReturn As String, ByVal iReturnLength As Integer, ByVal hCallback As Integer) Yukarıdaki satırı General - Declarations bölümüne yazdıktan sonra satırı herhangi bir altyordamdan aşağıdaki gibi çağırabilir, nReturn değişkenini okuyarak AVI dosyasının oynatılıp oynatılmadığını anlayabilirsiniz. Dim nReturn as Long nReturn = mciSendString(' Open deneme.avi type AVIVideo Alias Video' , ' ' ,0,0) nReturn = mciSendString(' Play Video FullScreen' ,' ' ,0,0) nReturn = mciSendString(' Close Video' ,' ' ,0,0)

İÇERİĞİ BMP OLARAK KAYDETMEKResim içeren herhangi bir form veya kontoldeki resmi nasıl BMP olarak kaydedeceğinizi gösteriyoruz. Örnek programımız öncelikle form üzerinde renkli daireler çiziyor daha sonra da form içeriğini C: sürücüsünde TEST.BMP olarak kaydediyor. Tüm bu işlemleri gerçekleştirmek için form üzerine bir kez tıklamanız yeterli. Private Sub Form_Click()Dim CX, CY, Limit, Msg, Radius ' Değişkenleri tanımlaScaleMode = 3 ' Ölçeği piksel olarak tanımlaAutoRedraw = -1 ' AutoRedraw özelliğini aç.

Width = Height ' Yüksekliği genişliğe eşitleCX = ScaleWidth / 2 ' X posizyonunu ayarlaCY = ScaleHeight / 2Limit = CXFor Radius = 0 To LimitCircle (CX, CY), Radius, RGB(Rnd * 255, Rnd * 255, Rnd * 255)DoEventsNext RadiusMsg = ' Form üzerindeki görüntüyü kaydetmek için Tamam'a tıklayın.' MsgBox MsgSavePicture Image, ' c:\TEST.BMP' ' Görüntüyü kaydetEnd Sub OPTION BASE NEDİR?BASIC'İN hemen hemen tüm versiyonlarında bulunan bu komut VB'den de mahrum edilmemiş. Ne işe yaradığını hemen anlatalım, hoşunuza gidebilir. Kullanılması zorunlu olmamasına rağmen bu komut değişkenleriz alt sınırını belirler. Komut formlardan bağımsız bir modülde değişken tanımı yapan tüm satırların üstünde kullanılmalıdır, yani boş bir modülün ilk satırı olmalıdır. Bilindiği gibi numerik değişkenlere hiç bir müdahale yapılmadığında değeri 0'dır. Projenizdeki tüm değişkenlerin başlangıç noktasını 1 yapmak için Option Base 1 komutunu kullanabilirsiniz

ARKA PLANA DEGRADE ATMAKHEMEN hemen tüm büyük programların kurulum arka planlarında maviden siyaha geçiş vardır. VB'nin uygulamalar için oluşturduğu kurulumlarda da bunu görmek mümkündür. Peki nasıl oluyor da oluyor, form üzerine degrade nasıl atılıyor? Aşağıdaki küçük alt yordamı kullanarak bunu siz de kolayca gerçekleştirebilirsiniz. Sub Gradient(TheObject As Object, Redval&, Greenval&,_Blueval&, TopToBottom As Boolean)Dim Step%, Reps%, FillTop%, FillLeft%, FillRight%, FillBottom%, HColor$

Step = (TheObject.Height / 63)If TopToBottom = True Then FillTop = 0 Else FillTop = TheObject.Height - StepFillLeft = 0FillRight = TheObject.Width

63

Page 64: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

FillBottom = FillTop + StepFor Reps = 1 To 63TheObject.Line (FillLeft, FillTop)-(FillRight, FillBottom),_RGB(Redval, Greenval, Blueval), BFRedval = Redval - 4Greenval = Greenval - 4Blueval = Blueval - 4If Redval <= 0 Then Redval = 0If Greenval <= 0 Then Greenval = 0If Blueval <= 0 Then Blueval = 0If TopToBottom = True Then FillTop = FillBottom Else FillTop = FillTop - StepFillBottom = FillTop + StepNextEnd SubÖrneğin mavi renkte, yukarıdan aşağıya bir degrade için Gradient Me, 0, 0, 255, 1 komutunu kullanabilirsiniz. 1 değeri yerine 0 yazdığınızda ise degradenin sırasını değişecektir. KOMUT SATIRI PARAMETRELERİWindows'umun masaüstünde bazı programların kısayolları bulunuyor. Bu kısayollar üzerinde bir dosya sürükleyip bıraktığımda program açılıyor ve ardından dosya yükleniyor. VB ile yaptığım programlara ise bir türlü bu özelliği veremiyorum. Programımın yanına dosya ismini verdiğimde o dosyanın yüklenmesini nasıl sağlayabilirim? KOMUT satırından verilen parametre her zaman sabit bir değişken olan ' Command' a atanır, dolayısıyla parametreyi öğrenmek için bu komutu kontrol etmek yeterlidir. Aşağıda, yüklendiği zaman komut satırından verilen parametreyi bildiren bir program bulacaksınız. Programın çalışmasını izlemek için öncelikle File * Make EXE File komutlarıyla derlemelisiniz. Daha sonra parametre vererek ve vermeyerek programın ne tepkiler verdiğini gözlemleyebilirsiniz. Private Sub Form_Load()If Command = ' ' Then' Komut satırında parametre yoksa... Msg = ' Komut satırından hiç bir parametre girilmemiş.' Else' Parametreyi mesaja yerleştir. Msg = ' Komut satırından verilen paramtre: ' ' & Command & ' ' ' End IfMsgBox Msg, 64, ' Komut satırı parametresi' ' Mesajı görüntüleEndEnd Sub PROGRAMIM BİRDEN FAZLA ÇALIŞMASINAYNI anda bir çok dosya açma yeteneğine sahip, MDI formlardan oluşan bir uygulamanın birden fazla kopyasının yüklenmesi mantıksız bir durum olurdu. Düşünsenize, program ile ilişkilendirilmiş bir dosyaya tıklandığında dosya ayrı bir MDI form içinde açılacağına o uygulamanın ayrı bir kopyası yükleniyor... Eğer siz de uygulamanızın sadece bir kopyasının yüklenmesini istiyorsanız aşağıdaki kodları kullanabilirsiniz. Private Sub Form_Load()If App.PrevInstance ThenKaydet$ = App.TitleApp.Title = ' ... İkinci Kopya.' Form1.Caption = ' ... İkinci Kopya.' AppActivate Kaydet$SendKeys ' % R' , TrueEndEnd IfEnd Sub METİN KUTUSUNA KOLAY GEÇİŞBAZI programlarda metin kutularının karşısında bir etiket kutusu ve bu etiket kutusunun içinde altı çizili bir karakter görürsünüz. ALT tuşuyla bu karakteri kullandığınızda otomatikman o metin kutusu aktif olur ve istediğiniz değerleri yazabilirsiniz. Bunu kendi programlarınızda uygulamanız çok kolaydır... Önce bir etiket kutusu oluşturun ve açıklamayı yazarak bir karakterin önüne & işaretini getirin. Daha sonra bu etiket kutusunun karşısına bir metin kutusu getirin ve rasgele 3-5 kontrol daha oluşturup programı ateşleyin.

64

Page 65: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

ALT tuşuyla birlikte önüne & karakteri getirdiğiniz harfe her bastığınızda ilgili metin kutusu aktif hale gelecektir. Olayın mantığı şöyle: etiketlerin aktif olma gibi bir özelliği yok, dolayısıyla siz onu aktif yapmak istediğinizde TabIndex'i bir büyük olan kontrol devreye giriyor ve aktif oluyor. Bu yüzden dikkat etmeniz gereken bir husus var, bir etiket oluşturduktan sonra başka hiç bir kontrol oluşturmadan ilgili metin kutusunu oluşturun, buna dikkat etmezseniz Properties kutucuğundaki TabIndex değerleriyle boğuşmak durumunda kalabilirsiniz. AKTİF KONTROLÜ ÖĞRENMEKKONTROL isimlerini görevlerine göre adlandırma gibi iyi bir alışkanlığınız varsa bu püf noktamız oldukça hoşunuza gidecek. Örneğin araştırma için kullandığınız bir metin kutusuna ' txtbul' gibi bir isim verdiyseniz bir kaç gün sonra projenizi tekrar açtığınızda muhtemelen kontrolün ismini unutacaksınız. İsmini tekrar hatırlamak için Properties kutucuğunu bile açmanıza gerek yok. Tek yapmanız gereken uygulamayı çalıştırmak ve kontrolün üzerine bir kez tıklayarak onu aktif hale getirmek. Break tuşuna basıp Debug penceresine ?Screen.ActiveControl.Name satırını girdiğinizde VB bir sonraki satıra kontrolün ismini yazacaktırBİR STATUS BAR SORUNU...Elimde Visual Basic'in 4.0 sürümü var. Düne kadar bu programlama dilini Windows 3.1 altında kullanıyordum fakat artık Windows 95'e geçtim. Windows 95 altında VB 4'ü kurduğumda toolbar'a ' Windows 95 Common Controls' diye bir öğe eklendi. Bu kontrollerden en çok ilgimi çeken ' Status Bar' oldu. Ne kadar denediysem bu kontrolü özelleştiremedim ne yapmalıyım? "STATUS Bar" kontrolü projenin çalıştırılma aşamasında en az özelleştirilebilir kontroller arasında gelir. Bu

yüzden projeyi çalıştırmadan önce Properties kutusundaki ' Custom' seçeneğini ya da kontrol üzerine sağ tıklandığında ortaya çıkan Properties seçeneğini seçerek bu kontrolü değiştirebilirsiniz. Resimde görüldüğü gibi kontrolün yapısal özelliklerinin değişimi ' Panels' sekmesinden yapılmaktadır. KONTROLLERİ AYIRMAKGÜNLÜK hayatınızda sık sık karşınıza çıkan, belki de pek dikkat etmediğiniz bir ' arabirim püf noktası' verelim. Windows 95 altında çalışırken Windows Gezgini'ni açtınız diyelim. Karşınıza ince bir çizgiyle ayrılmış iki ayrı pencere gelir. Ortadaki çizgiyi sağa veya sola ötelediğinizde pencereler buna göre yeniden durum alarak ya genişler ya da

daralır. Aynı durum formun büyüklüğüyle oynandığında da karşınıza çıkar ve formun yeni büyüklüğüne göre kontroller yeni yerlerini alır. Yukarıda anlattığımız iki işlemi programlarınızda uygulamak pek de zor değildir. Örnek resimde gördüğünüz kontrolleri form üzerinde oluşturduktan sonra liste kutusunun ismini ' listsol' metin kutusunun ismini textsag olarak belirleyin. Form üzerinde bu iki kontrol dışında bir de resim kutusu oluşturarak ismini ' ayirac' olarak atayın. Programı çalıştırıp ortadaki ayıracı sağa sola kaydırın, formu küçültüp büyültün, tıpkı Windows Gezgini gibi şekil alacaktır. ' Aşağıdaki kodlar boş bir BAS modülünün içinde' General-Declarations bölümüne yazılacak. Option ExplicitPrivate Const SPLT_WDTH As Integer = 5Private currSplitPosX As LongDim CTRL_OFFSET As IntegerDim SPLT_COLOUR As Long ' Aşağıdaki kodlar formun ilgili' yerlerine yerleştirilecek. Private Sub Form_Load()CTRL_OFFSET = 5SPLT_COLOUR = &H808080currSplitPosX = &H7FFFFFFFlistsol.AddItem ' Listedeki 1. öğe' listsol.AddItem ' Listedeki 2. öğe' textsag.Text = ' Örnek bir metin' End SubPrivate Sub Form_Resize()

65

Page 66: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Dim x1 As IntegerDim x2 As IntegerDim height1 As IntegerDim width1 As IntegerDim width2 As IntegerOn Error Resume Nextheight1 = ScaleHeight - (CTRL_OFFSET * 2)width1 = listsol.Widthx1 = CTRL_OFFSETx2 = x1 + width1 + SPLT_WDTH - 1width2 = ScaleWidth - x2 - CTRL_OFFSETlistsol.Move x1 - 1, CTRL_OFFSET, width1, height1textsag.Move x2, CTRL_OFFSET, width2 + 1, height1ayirac.Move x1 + listsol.Width - 1,CTRL_OFFSET, SPLT_WDTH, height1End Sub Private Sub ayirac_MouseDown(Button AsInteger, Shift As Integer, x As Single, y As Single) If Button = vbLeftButton Thenayirac.BackColor = SPLT_COLOURcurrSplitPosX = CLng(x)Else If currSplitPosX <> &H7FFFFFFF Then ayirac_MouseUp

Button, Shift, x, y currSplitPosX = &H7FFFFFFFEnd IfEnd Sub Private Sub ayirac_MouseMove(Button AsInteger, Shift As Integer, x As Single, y As Single) If currSplitPosX& <> &H7FFFFFFF ThenIf CLng(x) <> currSplitPosX Thenayirac.Move ayirac.Left + x, CTRL_OFFSET, SPLT_WDTH, ScaleHeight - (CTRL_OFFSET * 2)currSplitPosX = CLng(x)End IfEnd IfEnd Sub Private Sub ayirac_MouseUp(Button As Integer,

Shift As Integer, x As Single, y As Single) If currSplitPosX <> &H7FFFFFFF ThenIf CLng(x) <> currSplitPosX Thenayirac.Move ayirac.Left + x, CTRL_OFFSET, SPLT_WDTH, ScaleHeight - (CTRL_OFFSET * 2) End IfcurrSplitPosX = &H7FFFFFFFayirac.BackColor = &H8000000FIf ayirac.Left > 60 And ayirac.Left < (ScaleWidth - 60) Thenlistsol.Width = ayirac.Left - listsol.LeftElseIf ayirac.Left < 60 Thenlistsol.Width = 60Else: listsol.Width = ScaleWidth - 60

66

Page 67: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

End IfForm_ResizeEnd IfEnd Sub CDBL FONKSİYONU VAL'A KARŞIVAL () fonksiyonunu hemen hepiniz biliyorsunuzdur. Metin formatında olan sayıları numerik bir değişkene çevirmek için bu fonksiyonu kullanırız. Peki bu fonksiyonun kardeşi olan CDbl'yi hiç duymuş muydunuz? CDbl fonksiyonunu kullanmak içerisinde hane barındıran metinleri numerik hale getirmek için en iyi yoldur. Aşağıda iki fonksiyonun kullanımlarını ve arasındaki farkları göreceksiniz. Kod: print Val(' 12345' )Sonuç: 12345 Kod: print Val(' 12,345' )Sonuç: 12 Kod: print CDbl(' 12,345' )Sonuç: 12345 Kod: print CDbl(' 12345' )Sonuç: 12345 Peki bu iki fonksiyonun farkı ne? Bir kaç satır fazla kodla yapılabilecek, sık sık rastlamayacağımız bu durum için niye iki ayrı fonksiyon üretilmiş? Cevabı çok basit: CDbl fonksiyonu değişik ülkelerde farklı metrik ve ondalık değerler kullanılabileceği düşünülerek tasarlanmış ve sayı içinde virgülün yerini değişse bile bunu tutarak sadık bir yardımcı durumuna gelmiş. ENTER TUŞU SES ÇIKARMASINBİR metin kutusuna bilgi girerken ENTER tuşuna bastığınızda sisteminizden bir Bip sesi duyarsınız. Bu sistemin bir özelliğidir ve normaldir. Bu sizi rahatsız ediyorsa ya da kullanıcının Enter tuşuna bastığında bir sonraki metin kutusuna yönlenmesini istiyorsanız form üzerinde bir metin kutusu oluşturarak programınıza aşağıdaki kodları yerleştirebilirsiniz. Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = Asc(vbCr) ThenKeyAscii = 0 ' Bir sonraki kontrole

' atlamak için 0 yerine 10 kullanın.End IfEnd Sub Komut Satırı Parametreleri Bölüm - 2Daha önce derginizin Visual Basic köşesinde bir püf noktasına değindiniz ve komut satırından verilen parametrenin COMMAND$ isimli özel bir değişkene atandığını söylediniz. Merak ettiğim şu: Komut satırı parametresini denemek için mutlaka programı derlememi mi gerekiyor? Bunun başka bir yolu yok mu? UYGULAMANIZIN programlama aşamasında da suni komut satırı parametreleri vererek bu özelliği deneyebilirsiniz. Visual Basic'in değişik sürümleri için sorularınızın değişik yanıtları bulunuyor. VB 3.0'da komut satırı parametresini belirlemek için, Options*Project seçeneklerini seçmeli, VB 4.0'da Tools*Options menülerini geçmeli, daha sonra Advanced sekmesine atlamalı, VB 5.0'da ise Project * Project Properties menülerini seçerek ' Make' sekmesine atlamalısınız. İşte bu kadar basit. "BİRLİKTE AÇ" KUTUSU NASIL ÇIKARTILIR?İşte size küçücük bir püf noktası, yaptığı iş ise çok basit: dosya ilişkilendirmeye yarayan "Birlikte Aç" kutusunu karşınıza getiriyor ve paramatre olarak verdiğiniz dosyayı istediğiniz bir programla açmanıza olanak tanıyor. Private Sub Command1_Click() ' Komut butonuna tıklandığındaDim x As Longx = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL dosyaadi.xxx")End Sub SİSTEM NE DURUMDA?Üzerinde çalıştığınız program bir takım Windows 95 API'leri veya ağ desteği kullanıyor fakat API'ler Windows 95 Güvenli Kip'teyken çalışmıyorsa programınızı bu yönde programlayabilir Windows 95'in hangi kipte çalıştığını anlamasını sağlayabilirsiniz. Örnek programımız Windows 95'in nasıl başlatıldığını yine bazı API'leri kullanarak anlayabiliyor. Aşağıdaki kodları formdan bağımsız bir modüle yerleştirdikten sonra diğer satırları form üzerinde bir komut butonu oluşturarak içerisine yerleştirin.

67

Page 68: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Option ExplicitPublic Declare Function GetSystemMetrics Lib"user32" (ByVal nIndex As Long) As LongPublic Const SM_CLEANBOOT = 67 Private Sub Command1_Click()Select Case GetSystemMetrics(SM_CLEANBOOT)Case 1: MsgBox "Sistem Güvenli Kipte çalışıyor."Case 2: MsgBox "Sistem Ağ destekli güvenli kipte çalışıyor"Case Else: MsgBox "Sistem normal olarak işliyor."End SelectEnd Sub BELGELER MENÜSÜ KULLANIMIProgramı oluşturmak için öncelikle resimde görüldüğü gibi üzerinde bir metin kutusu, iki opsiyon kutusu bir de komut butonu bulunan bir form oluşturun. Opsiyon kutularının ismini opsiyon(0) ve opsiyon(1) olarak (Tabii ki Control Array) tanımlayarak aşağıdaki kodları uygun alanlara girin. Private Sub Command1_Click()Dim r As LongDim shFlag As LongDim shData As StringshFlag = SHARD_PATH Select Case opsiyon(0).Value = TrueCase True:shData = (Text1)Case False:shData = vbNullStringEnd Select r = SHAddToRecentDocs(shFlag, shData)End Sub ' Aşağıdaki satırlar formdan' bağımsız bir BAS modülüne girecek.Public Const SHARD_PIDL = &H1&Public Const SHARD_PATH = &H2&Public Declare Function SHAddToRecentDocs Lib"shell32.dll" (ByVal dwFlags As Long, ByVal dwData As String) As LongProgramı çalıştırdıktan sonra opsiyon kutularını kullanarak ister metin kutusundaki dosyayı belgeler menüsüne ekler, isterseniz belgeler menüsünü tamamen boşaltırsınız.  CAPSLOCK VE NUMLOCK'U KODLA DEĞİŞTİRMEKVisual Basic 4.0 paketi tuş kilitlerini değiştirmek ve görüntülemek için "Keyboard State Control"'unu (KEYSTA32.OCX) birlikte getiriyor. Bu kontrolü kullanarak ve küçük bir kod satırı yazarak programınız çalışırken CAPSLOCK, NUMLOCK ve SCROLLLOCK kilitlerini açıp kapayabilirsiniz. Peki programınızı derleyip kurulum paketinin oluşturduğunuzda ne olacak? Şüphesiz ilgili kontrol de uygulamanız ile brilikte programı kurduğunuz sisteme kopyalanacak. Bizce bu kadar küçük bir işlemi gerçekleştiren bir kontrolü kullanarak uygulamanızı kalabalıklaştırmak anlamsız, aynı işlemi bir WIN32 API'sini kullanarak da gerçekleştirebilirsiniz. Örneğimizi uygulamak için üzerinde üç tane komut butonu bir de etiket kontrolü olan bir form oluşturun ve ilk aşamada boş bir BAS modülünün General - Declarations bölümüne aşağıdaki satırları girin. Public Const VK_CAPITAL = &H14Public Type KeyboardBytes kbByte(0 To 255) As ByteEnd Type Public kbArray As KeyboardBytesPublic Declare Function GetKeyState Lib "user32"

68

Page 69: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

(ByVal nVirtKey As Long) As LongPublic Declare Function GetKeyboardState Lib"user32" (kbArray As KeyboardBytes) As LongPublic Declare Function SetKeyboardState Lib"user32" (kbArray As KeyboardBytes) As Long 'Aşağıdaki kodlar oluşturduğnuz formun 'General - Declarations bölümüne girmelidir:Private Function CapsLock() As IntegerCapsLock = GetKeyState(VK_CAPITAL) And 1 = 1End Function Private Command1_Click()GetKeyboardState kbArray kbArray.kbByte(VK_CAPITAL) = IIf(kbArray.kbByte(VK_CAPITAL) = 1, 0, 1) SetKeyboardState kbArrayLabel1 = IIf(CapsLock() = 1, "Açık", "Kapalı")End Sub Private Sub Command2_Click()GetKeyboardState kbArraykbArray.kbByte(VK_CAPITAL) = 1SetKeyboardState kbArrayLabel1 = IIf(CapsLock() = 1, "Açık ", "Kapalı")End Sub Private Sub Command3_Click()GetKeyboardState kbArraykbArray.kbByte(VK_CAPITAL) = 0SetKeyboardState kbArrayLabel1 = IIf(CapsLock() = 1, "Açık ", "Kapalı")End Sub Sistem Klasörlerini ÖğrenmekProgramınızın kullanacağı geçici bir dosya oluşturmak istiyorsunuz. Ya da Windows'un bulunduğu klasörü programınıza bildirmek istiyorsunuz. Bu işlemleri gerçekleştirmek çok basit çünkü Windows 3 adet API kullanarak bu klasörleri bulmanıza izin veriyor. Örneğimizi uygulamak için resimde görüldüğü gibi üç adet etiket kontrolü bir adet de komut butonunu formunuz üzerine yerleştirin. 'Ayrı bir BAS modülüne girecek:Option ExplicitPublic Declare Function GetSystemDirectoryLib "kernel32" Alias "GetSystemDirectoryA" _(ByVal lpBuffer As String, ByVal nSize As Long) As Long Public Declare Function GetTempPath Lib "kernel32"Alias "GetTempPathA" _(ByVal nSize As Long, ByVal lpBuffer As String) As Long Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" _(ByVal lpBuffer As String, ByVal nSize As Long) As Long 'Formun General - Declarations bölümüne girecek:Private Function GetSystemDir() As StringDim r As LongDim nSize As LongDim tmp As String

69

Page 70: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

tmp = Space$(256)nSize = Len(tmp)r = GetSystemDirectory(tmp, nSize)GetSystemDir = TrimNull(tmp)End Function Public Function GetTempDir() As StringDim r As LongDim nSize As LongDim tmp As Stringtmp = Space$(256)nSize = Len(tmp)r = GetTempPath(nSize, tmp)GetTempDir = TrimNull(tmp)End Function Private Function GetWinDir() As StringDim r As LongDim nSize As LongDim tmp As String tmp = Space$(256)nSize = Len(tmp)r = GetWindowsDirectory(tmp, nSize)GetWinDir = TrimNull(tmp)End Function Private Function TrimNull(item As String)Dim pos As Integerpos = InStr(item, Chr$(0))If pos ThenTrimNull = Left$(item, pos - 1)Else: TrimNull = itemEnd IfEnd Function Private Sub Command1_Click()Label1 = GetWinDir()Label2 = GetTempDir()Label3 = GetSystemDir()End Sub "BU NEDİR" VE "KONTROLE DUYARLI" YARDIMLARI KULLANMAKVisual Basic ile gelen yardım derleyicisini kullanarak uygulamanızın yardım dosyasını oluşturdunuz. Yardım dosyanızın içerisinde ilgili ID tanımlamalarını da doğru olarak yaptıysanız, artık size verdiğimiz adımları uygulayarak programınıza yardım seçeneğini ekleyebilirsiniz. Programınızda yardım dosyasını olduğu gibi çağırabileceğiniz gibi Windows'un iki ayrı özelliğini de kullanabilirsiniz. Birinci özellik "Bu nedir?" yardımı. Formun sağ üst köşesinde kapatma tuşunun hemen yanında yer alan soru işaretine tıkladığınızda çıkan "Bu nedir?" kutusunu form üzerindeki kontrollerden birinin üzerine getirip tıkladığınızda kontrolün ne işe yaradığına dair bilgiler bir baloncuk içerisinde çıkacaktır. Bu özelliği uygulamanızda kullanabilmek için aşağıdaki adımları uygulayın: Tools * Options * Project bölümüne gelerek "Help File" kutusuna uygulamanız için oluşturduğunuz yardım dosyasını girin. Form'un Properties kutsunu açarak "MinButton" ve "MaxButton" tuşlarına "False" değerini verin. Aynı zamanda "Whats This Button" ve "Whats This Help" değerlerini de "True" yapın. Form üzerinde örnek bir metin kutusu kontrolü oluşturarak bu kontrolün "whats this help id"sine daha önce yardım dosyası oluştururken belirlediğiniz numarayı girin. İkinci yardım özelliği ise "kontrole duyarlı" yardım. Kullanıcı herhangi bir kontrol üzerindeyken F1'e bastığında yardım dosyasını ilgili bölümü gelsin istiyorsanız şu adımları uygulayın: Tools * Options * Project bölümüne gelerek "Help File" kutusuna uygulamanız için oluşturduğunuz yardım dosyasını girin. Örnek bir metin kutusu kontolü oluşturarak properties kutusundan bu kontrolün "Help

70

Page 71: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

Context ID'sini tanımlayın. Bu kadar basit…  EKRAN ÇÖZÜNÜRLÜĞÜNÜ BULMAKDergiler verdikleri CD'ler için özgün arabirimler tasarlıyorlar. Her bilgisayarda çalışması için 640 * 480 çözünürlükte tasarlanan bir CD arabirimi 800*600 gibi bir çözünürlükte çalıştırıldığında genellikle ekranın diğer taraflarını siyaha boyar. Peki program 800*600 çözünürlükte çalıştığını nasıl anlıyor, ekranın diğer kısımlarını doldurup kendini nasıl ortalıyor. Aşağıda SystemParametersInfo API'sini kullanarak komut butonuna basıldığında tüm ekrana yayılan ve ekran çözünürlüğünü gösteren bir program veriyoruz. 'Aşağıdaki kodlar formlardan bağımsızbir BAS modülüne girecek... Option ExplicitType RECTLeft As LongTop As LongRight As LongBottom As LongEnd Type Public Const SPI_GETWORKAREA& = 48Public Declare Function SystemParametersInfo Lib"user32" Alias "SystemParametersInfoA" (ByVal uActionAs Long, ByVal uParam As Long, lpvParam As Any,ByVal fuWinIni As Long) As Long 'Form1'e girecek…Private Sub Command1_Click()Dim rc As RECTDim r As LongDim msg As String r = SystemParametersInfo(SPI_GETWORKAREA, 0&, rc, 0&)msg = "Ekran Çözünürlüğü" & vbCrLfmsg = msg & "Genişlik - " & rc.Right & vbCrLfmsg = msg & "Yükseklik - " & rc.Bottom & vbCrLf & vbCrLfText1 = msgMe.Move rc.Left * Screen.TwipsPerPixelX, _rc.Top * Screen.TwipsPerPixelY, _rc.Right * Screen.TwipsPerPixelX, _rc.Bottom * Screen.TwipsPerPixelYEnd Sub DİSK BİLGİLERİNİ ÖĞRENMEKOkurlarımızdan sık sık programlarını kopyalanmaya karşı nasıl koruyacakları, disk bilgilerini nasıl alacakları yoluna sorular alıyoruz. Bundan uzun süre önce bu köşede verdiğimiz API'ler ile disk üzerinde ne kadar yer kaldığını, sistem kaynaklarının nasıl bulunacağını anlattık. Değinmediğimiz bir konu ise disk seri numarasının ve etiketinin bulunmasıydı. Aşağıdaki programcık dilediğiniz sürücünün seri numarasını ve etiketini komut butonuna basıldığında size veriyor. PathName$ = "… satırını değiştirerek istediğiniz sürücüyü seçebilirsiniz... ' Formdan ayrı bir BAS modülüne girecek:Option ExplicitDeclare Function GetVolumeInformation Lib"kernel32" Alias "GetVolumeInformationA"(ByVal lpRootPathName As String, ByVallpVolumeNameBuffer As String, ByValnVolumeNameSize As Long, lpVolumeSerialNumberAs Long, lpMaximumComponentLength As Long,lpFileSystemFlags As Long, ByVallpFileSystemNameBuffer As String, ByValnFileSystemNameSize As Long) As Long

71

Page 72: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

 'Aşağıdaki kodların hepsi formun General -Declarations bölümüne girecekPrivate Sub cmdVolumeInfo_Click()Dim r As LongDim PathName As StringDim DrvVolumeName As StringDim DrvSerialNo As StringPathName$ = "c:\" rgbGetVolumeInformationRDI PathName$,DrvVolumeName$, DrvSerialNo$ 'Sonuçları GörüntülePrint: Print " Sürücü İstatistikleri ", ": "; UCase$(PathName$)Print: Print " Disk Etiketi ", ": "; DrvVolumeName$Print " Seri Numarası", ": "; DrvSerialNo$End Sub Private Sub Form_Load()Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2End Sub Function GetHiWord(dw As Long) As IntegerIf dw& And &H80000000 ThenGetHiWord% = (dw& \ 65535) - 1Else: GetHiWord% = dw& \ 65535End IfEnd Function Function GetLoWord(dw As Long) As IntegerIf dw& And &H8000& ThenGetLoWord% = &H8000 Or (dw& And &H7FFF&)Else: GetLoWord% = dw& And &HFFFF&End IfEnd Function Private Sub rgbGetVolumeInformationRDI(PathName$,DrvVolumeName$, DrvSerialNo$)Dim r As LongDim pos As IntegerDim HiWord As LongDim HiHexStr As StringDim LoWord As LongDim LoHexStr As StringDim VolumeSN As LongDim MaxFNLen As LongDim UnusedStr As StringDim UnusedVal1 As LongDim UnusedVal2 As Long DrvVolumeName$ = Space$(14)UnusedStr$ = Space$(32) r& = GetVolumeInformation(PathName$, _DrvVolumeName$, Len(DrvVolumeName$), VolumeSN&, _UnusedVal1&, UnusedVal2&, UnusedStr$, Len(UnusedStr$))

72

Page 73: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

If r& = 0 Then Exit Subpos% = InStr(DrvVolumeName$, Chr$(0))If pos% Then DrvVolumeName$ = Left$(DrvVolumeName$, pos% - 1)If Len(Trim$(DrvVolumeName$)) = 0 Then DrvVolumeName$ = "(no label)" HiWord& = GetHiWord(VolumeSN&) And &HFFFF&LoWord& = GetLoWord(VolumeSN&) And &HFFFF&HiHexStr$ = Format$(Hex(HiWord&), "0000")LoHexStr$ = Format$(Hex(LoWord&), "0000")DrvSerialNo$ = HiHexStr$ & "-" & LoHexStr$End Sub PROGRAMCIYA ULAŞMAKWindows 95 için programlanan uygulamalara son günlerde Internet erişimi eklemek çok moda oldu. Gerek programın menülerinden gerek formun herhangi bir alanına tıklayarak programa ait web sitesine veya programcıya ulaşabiliyorsunuz. Siz de bu özelliği programlarınızda kolayca ekleyebilirsiniz. Şekilde görüldüğü gibi bir etiket kontrolü oluşturup içerisindeki metnin mavi ve altının çizili olmasını sağlayın. Böylece kullanıcı bunun bir Internet adresi olduğunu anlayacaktır. Daha sonra etiketin Click olayına aşağıdaki satırlardan birini girin. x = Shell("start mailto:[email protected]")x = Shell("start www.pcworld.com.tr")işte bu kadar basit. Çözümümüz çok kolay görünse de etiket kontrolü üzerine tıklandığında seçiminize göre mail programı veya web tarayıcısı açılacak, ilgili kimseye veya siteye ulaşılacaktır INTERNET KISAYOLLARISoru: İki ay önceki derginizde API'leri kullanarak nasıl kısayol oluşturulacağını anlattınız. Verdiğiniz kodları uygulayarak bunu başardım. Sorum ise nasıl Internet kısayolu oluşturacağım. Yani belirli bir API kullanarak ve parametre vererek Internet kısayolu oluşturabilir miyim? Necdet Özkeser (e-mail) Yanıt: Ne yazık ki Internet kısayolu oluşturmak için kullanabileceğiniz bir API bulamadık. Zaten bir bu tip bir kısayol oluşturmak için API'ye gerek yok. Aşağıdaki gibi kodlar kullanarak kolayca bir kısayol oluşturabilir, üzerine çift tıklayarak web tarayıcınızın ilgili adrese bağlanmasını sağlayabilirsiniz. ' Masaüstünde PC World Online isimli bir kısayol oluşturOpen "c:\windows\desktop\PC World Online.url" For Output As #1' Gerekli İçeriği yazPrint #1, "[InternetShortcut]"' Adresi YazPrint #1, "URL=" & "http://www.pcworld.com.tr"Close #1 'Tamamla BALON YARDIM ÖRNEĞİÖnceki sayılarımızdan birinde balon yardım oluşturmayı teorik olarak anlatmış kod vermeden sadece fikir vermiştik. Bir kaç arkadaşımız balon yardım oluşturmak için gerekli olan kodları ısrarla istediler. Biz de sizi kırmıyor ve örnek programı yayınlıyoruz. Programı oluşturmak için öncelikle iki ayrı form oluşturun. Oluşturacağınız ikinci form balon yardımı oluşturacak, bu formun işlevini yerine getirebilmesi için Border Style özelliğini None yapın. 1. form'a, şekilde görüldüğü gibi kontrolleri yerleştirin ve her bir komut butonuna CMD ismini vererek bir Control Array oluşturun. Formlardan bir BAS modülüne aşağıdaki satırları girin. Type POINTAPI X As Long Y As LongEnd Type Public Const SW_SHOWNOACTIVATE = 4Public Const GW_CHILD = 5Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongDeclare Function GetActiveWindow Lib "user32" () As LongDeclare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long,

73

Page 74: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

ByVal yPoint As Long) As LongDeclare Function ShowWindow Lib "user32" (ByVal hwnd As Long,ByVal nCmdShow As Long) As Long FORM 1'İN KODLARI: General - DeclarationsPrivate Sub DisplayHelp(Help$)Dim lpPoint As POINTAPIDim ret As Integer If Len(Help$) > 0 ThenfrmHelp.HidefrmHelp.Label1.Caption = Help$ '& " "Call GetCursorPos(lpPoint)frmHelp.Top = (lpPoint.y + 18) * Screen.TwipsPerPixelYfrmHelp.Left = (lpPoint.x - 2) * Screen.TwipsPerPixelYfrmHelp.Width = frmHelp.Label1.Width + (12 * Screen.TwipsPerPixelX)frmHelp.Height = frmHelp.Label1.Height + (6 * Screen.TwipsPerPixelY)frmHelp.ZOrderret = ShowWindow(frmHelp.hwnd, SW_SHOWNOACTIVATE) ElsefrmHelp.HideEnd IfEnd Sub Private Sub Form_Load()Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2Timer1.Interval = 500Timer1.Enabled = TrueList1.AddItem "Item 1"List1.AddItem "Item 2"List1.AddItem "Item 3"End Sub Private Sub Timer1_Timer()Dim curhWnd As IntegerDim p As POINTAPIStatic LasthWnd As Integer  If GetActiveWindow() = Form1.hwnd Then ' Form'un aktif olduğundan emin olCall GetCursorPos(p) ' İmlecin yerini belirle ' Fare imleci hangi kontrol üzerinde?curhWnd = WindowFromPoint(p.X, p.Y) ' Aynı kontrol mü?' Eğer aynı kontrol ise tekrar baloncuğu çizme. If curhWnd <> LasthWnd ThenLasthWnd = curhWnd ' Şimdiki HWnd değerini aklında tut.Timer1.Interval = 1 ' Kontrol etme aralığını düşürSelect Case curhWndCase cmd(0).hwnd: DisplayHelp (cmd(0).Tag)Case cmd(1).hwnd: DisplayHelp (cmd(1).Tag)Case cmd(2).hwnd: DisplayHelp (cmd(2).Tag)Case cmd(3).hwnd: DisplayHelp (cmd(3).Tag)Case List1.hwnd: DisplayHelp (List1.Tag)Case Text1.hwnd: DisplayHelp (Text1.Tag)

74

Page 75: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

 'Eğer fare imleci kontrolün dışına çıkarsa form2'yi gizleCase frmhelp.hwndfrmhelp.HideCase Else:DisplayHelp ""Timer1.Interval = 1000End SelectEnd IfEnd IfEnd Sub FORM 2'NİN KODLARIPrivate Sub Form_Load()Me.Caption = ""Me.BackColor = &HFFFF&Label1.Left = 4 * Screen.TwipsPerPixelXLabel1.Top = 20Tüm kodları girdikten sonra her kontrolü seçerek TAG özelliğine gidin ve görülmesini istediğiniz açıklamayı yazın. Projenizi çalıştırın ve Timer 1'in Interval aralığına göre kontrollerin balon yardımlarını gösteren uygulamanıza bakın. İşte bu kadar YAZDIĞINIZ METİN DEĞİŞMESİNÖyle bir metin kutusu istiyorsunuz ki kullanıcı üzerine bir şeyler yazdığında değiştiremesin, istediğiniz metin dosyasını bu kutuya yüklediğinizde kullanıcı sadece bunu aşağı yukarı kaydırsın. Örneğimiz için alelade bir form üzerine yine alelade bir metin kutusu oluşturun. DENEME.TXT adında ve uzunca bir metin içeren örnek dosya oluşturun. Form_Load ()'Deneme dosyamızı yüklüyoruz...Open "DENEME.TXT" For Input As #1 Text1.Text = Input$(LOF(1), 1)Close #1End Sub Private Sub Text1_KeyPress(keyascii As Integer)' Kullanıcı bir tuşa bastığında ASCII değerini0 yaparak tuş vuruşunu gözardı et.keyascii = 0End Sub 

75

Page 76: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

MASAÜSTÜ RESMİNİ DEĞİŞTİRMEKVisual Basic ile masaüstü resmini değiştirmek çok kolaydır. Sadece USER32.DLL dosyasında bulunan bir fonksiyonu çağırmak yeterlidir. Yemedik, içmedik sizin için bu API'yi kullanan bir program oluşturduk. Öncelikle FORMdan ayrı bir BAS modülüne aşağıdaki tek bir satırı girin. Declare Function SystemParametersInfo Lib "user32" Alias"SystemParametersInfoA" (ByVal uAction As Long, ByValuParam As Long, ByVal lpvParam As Any, ByVal fuWinIniAs Long) As LongFonksiyonu programınıza tanıttıktan sonra şekildeki gibi bir form oluşturun ve ilgili bölümlere kodları yazın. Private Sub Form_Load()Dim Temp As String Temp = InputBox("Lütfen WINDOWS klasörünü girin", "", "C:\WINDOWS\") If Temp = "" Then End 'Vazgeç'e basıldıIf Right$(Temp, 1) <> "\" Then Temp = Temp + "\"list1.Tag = TempTemp = Temp + "*.bmp"Temp = Dir$(Temp)Do While Temp$ <> ""Temp = Dir$ 'Dosya bulunamazsa döngüden çık.If Temp = "" Then Exit Dolist1.AddItem TempLoop list1.AddItem "(Yok)"Showlist1.SetFocuslist1.ListIndex = 0End Sub 'Küçük açıklama: Formun yüklenme aşamasında 'Setfocus olayını kullanırsanız VB hata verir. Private Sub list1_DblClick()Dim Temp As StringDim BMPFile As StringTemp = TagIf list1.Text = "(Yok)" ThenBMPFile = "(Yok)"ElseBMPFile = Temp + (list1)End If SystemParametersInfo SPI_SETDESKWALLPAPER, 0, ByVal BMPFile, SPIF_UPDATEINIFILE End Sub 'Değiştir tuşuPrivate Sub Command1_Click()list1_DblClickEnd SubProgramınızı çalıştırdıktan sonra karşınıza BMP dosyalarınızın yerini soran bir mesaj kutusu gelecektir. Mesaj kutusuna uygun bir dizin girdikten sonra artık liste kutusundaki ilgili resme çift tıklayarak veya değiştir tuşuna basarak resmi masaüstüne yükleyebilirsiniz. Program aynı zamanda WIN.INI dosyasını da haberdar

76

Page 77: VisualBasic Programlamaya Giriş -   Web viewWINDOWS 3.10, WINDOWS95 ve WindowsNT 'den farklı API 'ler ve sabitler kullandığından,

ediyor.  NEDİR ŞU HWnd ?VB'de pencerelerle ilgili API'leri kullanırken genellikle HWnd diye bir kullanıma rastlıyorum. HWnd nedir? Anladığım kadarıyla pencere numarası belirtiyor. Serkan Güngör / e-mail Doğru bir tahminde bulunmuşsunuz. HWnd değişkeni pencere referansıdır. Yıllar önce Bill Gates amcamız Windows'un arabirimini tasarlarken arabirimi oluşturan her küçük pencereye bir numara vermeyi ve pencereleri numaralarıyla adlandırmayı düşünmüş. İşletim sisteminiz proje her çağrıldığında HWnd değişkenine bir tam sayı atar. Her zaman değişken olan bu tam sayı herhangi bir kontrol veya pencerenin referansını belirtir. Bu referans değişkendir çünkü çalıştırılan diğer uygulamalar ve yüklenen kontroller zaten kendilerine birer HWnd değeri alır. Bir nesnenin HWnd değerini öğrenmek için X = nesne.hWnd gibi bir ifade kullanabilir X değerini öğrenerek Hwnd değerini okuyabilirsiniz

77