VİSUAL BASIC DERS
NOTLARI
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. Eger 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.Eger 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.
Ö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.Sira 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-C
DefStr SDefVar K DefDate 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 String
Dim maas As Currency
End Sub
Bu örnektede ad ve soyad
isimli iki degişken string türünde ve maas degişkeni ise Currency tipindedir.
VERİ TİPLERİ
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 Integer
DefInt A-C
Oran% = 100
A_sayı = 100
B_sayı = Oran*A_sayı
C_sayı = B_sayı + A_sayı – 1000
Maas= 32767
End Sub
Eger
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-B
Bölüm=50000
cıkan&=600000
Kalan& = (cıkan / Bölüm ) * 10000
End Sub
Single :
Tam 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-B
Bölüm=50000
Cıkan!=600000
End Sub
Double :
Visual 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-K
Darı=50000
Bugday=600000
Arpa=340.56
End Sub
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=34650
Const 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 Ogrencı
Ad As String *10
Soyad As String *12
Not As Byte
Kredi As Integer
End Type
'Ogrencı veri tipi
toplam hafızada 25 byte yer kaplamaktadır. Bu veri tipini kullanmak için 'Ogrencı
tıpınde degişkenler tanımlamak gerekmektedir.
Private Sub Form_Load()
Dim A As Ogrencı
Dım B As Ogrencı
'Bu degıskenlere bilgi atamak aşagıdaki şekildeki gibidir.
A.Ad="Ali"
A.Soyad ="Armer"
End Sub
String
türü degişkenlere sabit bir uzunlukta yer ayırmak istersek aşagıdaki şekilde
bir tanımlama yapmalıyız.
Dim Name As String *12
Dim Address As String *50
DİZİLER
Aynı 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 String
Dim no(2) As Integer
ad(0) = "ali"
ad(1) = "ahmet"
ad(2) = "ebru"
no(0) = 133
no(1) = 56
no(2) = 67
End 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.
Eger
diziyi sıfırdan degilde 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
deger 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.
STATİK DİZİLER
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 1
Dim a(5) As Integer
Private Sub Command1_Click()
Text1.Text = a(1) + a(2)
End Sub
Private Sub Form_Load()
a(1) = 10
a(2) = 20
End 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. Eger 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.
Bu 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 1
Private Sub Form_Load()
Dim s() As String
End Sub
Private Sub Command1_Click()
ReDim s(10) As String
s(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 " degeri ikinci
elemanına "Ayşe" degeri 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 1
Private Sub Form_Load()
Dim s() As String
End Sub
Private Sub Command1_Click()
ReDim s(10) As String
s(1) = "selam"
s(2) = "fatih"
Text1.Text = s(1) + s(2)
End Sub
Private Sub Command2_Click()
ReDim s(5) As String
s(2) = "fatih"
Text1.Text = s(1) + s(2)
End Sub
Bu örnekte yukarıdaki örnekten tek farklı yan olarak bir
Command butonun arkasına yazılmış kod bulunuyor. Eger 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 degerler 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
TİP DÖNÜŞÜMLERİ
Visual 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 Deger Yaptıgı İş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.
Örnek1:
A=10 , B=5 , C=10 , D=0
check = CBool(A < B) 'check=False
check = CBool(A > B) 'check=True
check = CBool(A = C) 'check=True
check = CBool(D) 'check=False
check = CBool(B) 'check=True
Örnek2 :
A=10 , B=5 , C=0
check = CBytel(A < B) 'check=0
check = CByte(A > B) 'check=1
check = CByte(A = C) 'check=0
Örnek3 :
A=1 , B=2 , C=36000 , D=36001
check = CDate(A) 'check=12/31/1899
check = CDate(B) 'check=1/1/1900
check = CDate(C) 'check=7/24/98
check = CDate(D) 'check=7/26/98
Örnek4 :
A=2.4 , B=2.5 , C=2.6 , D=3.5
check = CInt(AB) 'check=2
check = CInt(B) 'check=2
check = CInt(C) 'check=3
check = CInt(D) 'check=4
2. OPERATÖRLER
, PROGRAM KONTROL VE DÖNGÜ KOMUTLARI
+ , - , * , / , \ , ^
,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 + Ifade2
Burda 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=58
Sonuc=1378+56.78+435.908 'Sonuc=1870.688
A=89,B=3456
Deger=A+B ' Deger=3545
Ad="Ebru"
Soyad=” Kayacı”
Dim Name As String
Name=Ad+Soyad 'Name=”Ebru Kayacı”
Bu 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=False
Sonuc=(100=100) 'Sonuc=True
A=12,B=45
Sonuc=(A=B) 'Sonuc=False
C=23,D=23
Sonuc=(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.
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=True
Sonuc=(100<>100) 'Sonuc=False
A=12,B=45
Sonuc=(A<>B) 'Sonuc=True
C=23,D=23
Sonuc=(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=True
Sonuc=(100<100) 'Sonuc=False
Sonuc=(100<130) 'Sonuc=False
A=12,B=45
Sonuc=(A<B) 'Sonuc=True
C=23,D=23
Sonuc=(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şagıda çeşitli örneklerle kaynaştırma operatörü açıklanmıştır.
Örnek :
Sonuc=(800>345) 'Sonuc=True
Sonuc=(100>100) 'Sonuc=False
Sonuc=(100>130) 'Sonuc=False
A=90,B=45
Sonuc=(A>B) 'Sonuc=True
C=23,D=23
Sonuc=(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)
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=True
Sonuc=(100=>100) 'Sonuc=True
Sonuc=(100=>130) 'Sonuc=False
A=90,B=45
Sonuc=(A=>B) 'Sonuc=True
C=23,D=23
Sonuc=(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=False
Sonuc=(100<=100) 'Sonuc=True
Sonuc=(100<=130) 'Sonuc=True
A=90,B=45
Sonuc=(A<=B) 'Sonuc=False
C=23,D=23
Sonuc=(A<=D) 'Sonuc=True
Lojik iki ifadenin karsilastirilmasi için kullanilir. Iki
ifadenin'de dogru olmasi gereklidir. Genel yazim sekli asagidaki 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.
|
|
İfade2 |
İfade1 And İfade2 |
|
0 |
0 |
0 |
|
0 |
1 |
0 |
|
1 |
0 |
0 |
|
1 |
1 |
1 |
Örnek :
Sonuc = (False And False ) 'Sonuc=False
Sonuc = (Null And False ) 'Sonuc=False
A=True , B=True
Sonuc = (A And B ) ' Sonuc=True
A=1 ,B=0
Sonuc = (A And B ) ' Sonuc=0
A=1 ,B=1
Sonuc = (A And B ) ' Sonuc=1
A=1,B=4
Sonuc = (A And B ) ' Sonuc=0
A=1,B=3
Sonuc = (A And B ) ' Sonuc=1
A=1,B=5
Sonuc = (A And B ) ' Sonuc=1
A=1,B=8
Sonuc = (A And B ) ' Sonuc=0
Kontrol komutları programcılar tarafından sıkca kullanılan
belirli ifadeleri kontrol etmek veya bazı şartların gerçekleşip
gerçekleşmedigini kontrol etmek amacıyla kullanılan komutlardır. Biz burada en
çok kullanılan komutların üzerinde duracagız.
If Kontrol Yapısı :
Genel olarak bu komut yapısı şu şekilde yazılır.
If Kosul Then
Kosul dogru 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
Eger 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 blogunun bulunmasına gerek yoktur.
Burada eger Kosul dogru ise ilk Then’den sonraki satırlar çalıştırılarak Elseif
ifadesine kadar icra edilirler. Daha sonra Endif 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.1
Endif
Örnek :
If Bolen=0 Then
Msg.Text=” Bolen sayı sıfır olamaz."
Else
Sonuc= Sayı / Bolen
Msg.Text = Sonuc
Endif
Ornek :
If name="Ali" AND no="1301920035"
Not=4
ElseIf name="Ahmet" AND no="1301940023" Then
Not=3
ElseIf name="Hakan" AND no="1301930045" Then
Not=2
ElseIf name="Hatice" AND no="1301940005" Then
Not=7
Endif
Bu 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 No
Case 1304
Name="Murat Tuna"
Case 1306
Name="Ayse Sinem"
Case 1307
Name=”Hakan Kaya”
Case 1312
Name=”Abdullah Kahyalı”
Case 1324
Name="Hatice Uygun"
End Select
Örnek :
Select Case Ay
Case 1
Max_date=31
Case 2
Dim Artık as Integer
Artık = Yıl Mod 4
If Artık=0 Then
Max_date=29
Else
Max_date=28
Endif
Case 3
Max_date=31
Case 12
Max_date=31
Case Else
Mesaj=”Error : Bir yılda 12 ay vardır.”
End Select
Bu komutlar belirli işlemleri belirli sayıda veya herhangi
bir şart sağlanana kadar tekrarlamak amacı ile kullanılırlar. Bu komutlar
aşagı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şagıdada 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 degerı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. Eger Sayac degeri Bitis degerini 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 son1
Komutlar
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=1
For I=1 To Sayi
Factöriyel= Factöriyel * I
Next I
Bu örnekte
girmiş oldugunuz pozitif sayının faktoriyeli hesaplanmaktadır.
Bu
dögünün genel yazim sekli asagidaki sekildeki gibidir.
Do While Kosul
Komutlar
Loop
Burada önce Kosula bakilir. Eger 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ç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=2
Do While I<=Sayi
Fact=Fact * I
I=I+1
Loop
Buradaki örnekte te faktöriyel hesabini Do While döngüsü ile yapiyoruz. Burada
sayac olarak I degeri kullaniliyor. Eger faktöriyeli hesaplanacak deger 2 den
kücükse (1 veya 0 ise) döngü içine girilmemektedir. Döngü içinde sayac artimini
kendimiz veriyoruz. Sayac sayi degerine esit 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. Eger 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=1
Do
Fact=Fact *I
I=I+1
Loop While I<=Sayi
Faktöriyel hesapini
yapan bir baska örnek verilmistir.
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. Eger 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=Sayi
Do Until I<=1
Fact=Fact * I
I=I-1
Loop
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. Eger 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=1
Do
Fact=Fact *I
I=I+1
Loop While I>Sayi
Faktöriyel hesapını
yapan bir başka örnek verilmiştir
FileDateTime(dosya_adi)
Dosyanın en son değişikliğe uğradığı tarih ve saati verir.
Genel yazım biçimi şu şekildedir:
Text1.Text = FileDateTime("c:\autoexec.bat")
GetAttr
Verilen dosyanın özelliklerini geri döndürür. Genel yazım
biçimi şu şekildedir:
Text1.Text = GetAttr("c:\autoexec.bat")
Geri dönüş değerleri şu şekildedir.
0 = vbNormal
1 = vbReadOnly (Sadece okunabilir.)
2 = vbHidden (Saklı dosya)
4 = vbSystem
8 = vbVolume
16 = vbDirectory
32 = vbArchive
SetAttr
Verilen dosyanın özelliklerini değiştirir. Genel yazım
biçimi şu şekildedir:
SetAttr "c:\scandisk.log", 2
-ASC Fonksiyonu
Verilen string'in ilk karakterinin ASCII kodunu geri
döndürür. Genel yazım biçimi şu şekildedir:
A% = ASC(String)
CHR$ Fonksiyonu
0 ile 255 arasında girilen sayının ASCII karakterini geri
döndürür. Genel yazım biçimi şu şekildedir:
A$ = CHR$(number)
SPACES$ fonksiyonu
n ile girilen değer kadar boşluk karakterini geri döndürür.
Genel yazım biçimi şu şekildedir:
A$ = SPACES$(10)
STRING$ (adet, kod)
"kod" parametresi 0 ile 255 arasında bir değer
alabilir. Girilen kodun ASCII karakterini "adet" sayısı kadar geri
dödürür. Genel yazım biçimi şu şekildedir:
yediA = STRING$(7, 66)
RIGHT$ (string, adet)
String ifadesinin sağından adet miktarı kadar karakteri geri
döndürür. Genel yazım biçimi şu şekildedir:
met = RIGHT$("Mehmet", 3)
LEFT$ (string, adet)
String ifadesinin solundan adet miktarı kadar karakteri geri
döndürür. Genel yazım biçimi şu şekildedir:
meh = LEFT$("Mehmet", 3)
MID$ (string, sol_bas, adet)
Girilen string ifadesinde sol_bas ile verilen değerdeb
başlayarak; adet kadar, sağa giderek yeni bir string geri döndürür. Genel yazım
biçimi şu şekildedir:
meh = MID$("tarak", 1,3) 'Sonuç
"tar" olacaktır.
LEN (string)
Bir string'in uzunluğunu bulmak için kullanılır. Genel yazım
biçimi şu şekildedir:
uzunluk =
LEN("Çekoslavakyalılaştıramadıklarımızdanmısınız") 'Sonuc 43
olacaktır.
LCASE(string)
Bir string'in tamamını küçük harfe çevirir. Genel yazım
biçimi şu şekildedir:
ahmet = LCASE("AHMET")
UCASE(string)
Bir string'in tamamını büyük harfe çevirir. Genel yazım
biçimi şu şekildedir:
AHMET = UCASE("ahmet")
INSTR (baslama, str1, str2, CompareMethod)
2. string'i 1. string içinde arar. Eğer başarılı olursa
str1'deki str2'nin başlangıç karakterini alır. Genel yazım biçimi şu
şekildedir:
Text1.Text = InStr(1, "Çekoslavakyalılaştıramadıklarımızdanmısınız",
"lılaş", vbTextCompare) ' _
Sonuç "lılaş" string'inin başlangıç harfi "l"'nin nosu
olur. yani 13
STRCOMP(str1,str2,tip)
İki string'i karşılaştırmaya yarar. Eğer karşılaştırma
sonucu iki string aynı ise "0" değerini farklı ise "-1"
değerini geri döndürür. Genel yazım biçimi şu şekildedir:
Text1.Text = StrComp("Çekoslovakya",
"Çekoslovakya", vbTextCompare)
TRIM(string)
Stringin sağ ve solundaki boşlukları atar. LTRIM ve RTRIM
ile sağ ve solda özellikle boşluklar atılabilir. Genel yazım biçimi şu
şekildedir:
Text1.Text = Len(Trim("
Çekoslavakyalılaştıramadıklarımızdanmısınız ")) 'Sonuç gene 43 tabii ki
VISUAL BASICTE
DOSYA VE DIZIN KOMUTLARI
Visual Basic'in
sağladıgı komut ve fonksiyonlar ile uygulamamız içinde işletim sistemi
işlevlerini gerçekleştirebiliriz. Aşagıda bu fonksiyon ve komutları
anlatacagız.
Fonksiyonlar geriye bir deger döndürürken komutlar geriye bir deger
döndürmezler.
ChDir:
Bu komut ile aktif dizini degiştirebiliriz. Ancak bu komut geçerli sürücüyü
degiştirmez. Kullanım biçimi aşagıdaki gibidir :
ChDir "yol adı"
Örnek :
ChDir "c:\windows"
ChDir "D:\GAMES"
ChDrive:
Bu komut ile aktif sürücüyü degiştirebiliriz.Kullanım biçimi aşagıdaki gibidir
:
ChDrive "sürücü adı"
Örnek :
ChDrive "c"
ChDrive "D"
MkDir:
Bu komut ile aktif dizin içersinde bir dizin yaratabiliriz.Kullanım biçimi
aşagıdaki gibidir :
MkDir "dizin adı"
Örnek :
MkDir "deneme1"
MkDir "c:\temp\deneme2"
RmDir:
Bu komut ile aktif dizin içersinde ve belirtyilen path'de bir dizini
silebiliriz. Ancak silinecek dizin boş olmak zorundadır.Kullanım biçimi aşagıdaki
gibidir :
RmDir "dizin adı"
Örnek :
RmDir "deneme1"
RmDir "c:\temp\deneme2"
Name:
Bu komut ile bir dosyanın ismini ve bulundugu konumu degiştirebiliriz. Ancak
dosyalar üzerinde geçerlidir. Kullanım biçimi aşagıdaki şekildeki gibidir :
Name "eski dosya adı" "yeni dosya adı"
Örnek :
Name "senet.xls" "alacaklar.xls"
Name "c:\my\odev.doc" "d:\arsiv\odevler\vb\stack.doc"
Kill:
Bu komut ile aktif dizinde veya verilen yol üzerindeki dosya ve dosya grublarını
silebiliriz. Wildcard karakterlerinide (? , *) kullanabiliriz.Kullanım biçimi
aşagıdaki şekildeki gibidir :
Kill "dosya adı"
Örnek :
Kill "kdv.xls"
Kill "c:\temp\*.tmp
Kill "d:\denemeler\odevler\vb\d???.doc"
VB'de projelerinizde çok
miktarda text, resim, ikon, cursor gibi dosyalar mı kullanıyorsunuz. Bu
dosyaları yönetmesi ve değişiklik yapması çok mu zor oluyor? O zaman bu
dosyaların derli toplu durması sizin için iyi olacaktır.Bu yüzden res uzantılı
dosyaları projelerenize ekleyerek kolay bir şekilde uygulamalarınızda
kullanabilirsiniz.
Bunun için yapmanız gerekenler şunlar.

Artık Project Explorer penceresinde "Related
documents" altında kaydettiğiniz isimde bir resource dosyası oluşmuştur.
Şimdide bu kaynakları nasıl kullanıcaz ona bi bakalım.
Resource Dosyasının Kullanımı
Reource dosyasını yarattıktan sonra uygulamaya bir form
ekleyin ve formun üzerine 1 text box, bir kaç image, ve bunlara kaynakları
yükleyeceğimiz butonları koyun.

Aşağıdaki koduda copy paste edin ve uygulumayı F5 tuşuna
basarak çalıştırın
Private Sub Command1_Click() 'resmi yükle butonu
Image3.Picture = LoadResPicture(101, 0)
End Sub
Private Sub Command2_Click() 'Texti yükle butonu
Text1.Text = LoadResString(101)
End Sub
Private Sub Command3_Click() 'cursoru yükle butonu
Image1.Picture = LoadResPicture(101, 2)
End Sub
Private Sub Command4_Click() 'ikonu yükle butonu
Image2.Picture = LoadResPicture(101, 1)
End Sub
Projeyi çalıştırınca ve
butonlara basınca görüntü şöyle olmalı (tabii sizin kullandığınız text,ikon'la
filan olucak).

İşte bu kadar basit. Bir proje yöneticisinin bu resource
dosyalarını önceden hazırlaması ve standartlarla uğraşan proje elemanına teslim
etmesi gerekir. Böylece proje içinde kullanılan kaynaklar birbirine benzer
olacaktır. Resource dosyasından yükleme yapmak için LoadResData() diye bir
fonksiyonda var ama tam olarak çalıştıramadım. Yapan varsa ve örnekleri
Programlama.com'a gönderirse sevinirim.
İşletim sistemlerine
duyulan ihtiyaçlardan biri standart olarak her program tarafından yapılması
gereken şeyleri ortak bir çatı altında toplamak ve programları sistemde belirli
kurallar altında çalışmasını sağlamaktır. İşletim sistemlerinin değerini
anlamak için işletim sistemi olmayan bir bilgisayar düşünün.
Yaptığınız programları diske kaydetme ihtiyacınız var. İşletim sisteminiz yoksa
programlarınızı diske yazacak ve okuyacak assembly kodları sizin yazmanız
gerekecektir. Ve her program diske yazma ve okuma kodlarını içinde bulundurmak
zorunda olacaktır. Ayrıca diske yazacağınız programı diskin neresine
yazacaksınız. Tabi ki herkes kendi programının başa yazılmasını isteyecektir.
Bu da diski paylaşım sorununu çıkaracaktır. Ayrıca yazıcı için de problem
vardır. Her yazıcı aynı sistemle çalışmayacağı için programınızda yazdırma
işlemleri de varsa belli başlı yazıcı tipleri için gerekli kodları yazmanız
gerekecektir. Bu örnekler çoğaltılabilir.
İşte PC'ler ilk çıktığında disk işlemlerini kolaylaştırmak için DOS ta piyasaya
çıktı. DOS disk işlemlerini yapmak için yazılım interruptlarını programcıların
hizmetine sunmuştu. Diskle ilgili bir işleminiz için INT X'in Y numaralı
servisini çağırıyordunuz ve bu işlemleri sizin yerinize DOS yapıyordu.
Sistemler geliştikçe bilgisayar değişik alanlara da hitap etmeye başlayınca çok
değişik arabirimler de çıktı. DOS'a grafik, yazıcı işlemleri gibi standart
işlemler de eklendi ve sistemde bulunan standart donanımların hemen hemen
hepsine DOS veya BIOS interruptlarıyla erişebiliyordunuz. Ayrıca DOS
programların belleği nasıl kullanacağını da belirliyordu. DOS işletim sistemi
olarak kullanıcıya herhangi bir standart arabirim sunmamıştır. Sadece
programların sistemdeki standart donanımlara ulaşabilecekleri kodları
kullanıcıya sunmuştur. DOS'ta yapılan programların hiçbiri bir birine benzemez.
Her program kendi kullanıcı arayüzünü belirlemek zorundadır ve bunun için
gerekli kodu kendisi yazmak zorundadır. DOS'ta yapılan programların kullanım ve
programlanmasının zorluğu da bir ölçüde buradan kaynaklanır.
DOS'un programlara standart bir arabirim sunmaması, bellek sınırlarının olması
gibi sebeplerden dolayı çok çok geç kalmış olsada Windows çıktı. Windows DOS'un
sağladığı standart donanıma ulaşma haricinde Ses kartları, Gelişmiş yazıcılar,
Scanner'ler gibi donanımların kullanımını da programların kullanımına sunar.
Ayrıca programlara standart arabirimleri (Diyalog kutuları, Formlar, Kontroller
gibi) kullanma imkanı da sunmuştur. DOS kendi servislerini yazılım
interruptlarıyla sunarken Windows API'lerle sunar.
Şimdi şöyle bir şey düşünülebilir. DOS'ta çok program yaptım ama diske birşey
yazdırmak için DOS'un interruptlarını kullanmaya hiç ihtiyaç duymadım. Evet
eğer assembly program yazmadıysanız bunlara da ihtiyacınız yoktur. Çünkü
kullandığınız programlama dili bu işi sizin yerinize yapıyordu. Bu VB'de
yaptığınız programlarda da böyledir. API kullanacaksınız diye bir şart yok VB
bunları sizin yerinize kullanır. Ancak DOS'taki programlama dillerinde olduğu
gibi VB'de de programlama dilinin sunduğu işlemler her zaman işinizi
görmeyebilir, bu durumda Windows API'lerini kullanma ihtiyacı duyarsınız.
Basic herhalde bütün zamanların en yavaş programlar üreten dili olma özelliğini
kimseye kaptırmak istemiyor. Quick Basicte yaptığınız bir program, aynı işi
yapan C ile yapılmış programdan en az 5 kat daha yavaş çalışacaktır. Bu fark
GWBasic'te daha da büyüktür. VB'de de durumun iç açıcı olduğunu iddia etmek çok
güç. Programlarınızda API kullanmanız bu hız barajlarını aşmanızı
sağlayacaktır. Ayrıca VB'nin sunmadığı bazı işlemler için de API kullanmak
gerekir. Örneğin sistemdeki boş bellek miktarını verecek herhangi bir komut
VB'de bulunmaz bunu da yine API kullanarak öğrenmek zorundasınız.
Windows'un sunduğu bu API'ler gruplandırılarak bir çok DLL ve EXE dosyasına
konmuştur. VB'de kullanılan OCX dosyalarında da API'ler bulunabilir. Bu
API'lerden birini kullandığınızda API'nin bulunduğu DLL sisteme daha önce
yüklenmemişse önce bu DLL yüklenir ve API çalıştırılır.
Programınızda API kullanmak için Declare deyimiyle API'yi tanımlamanız gerekir.
Bu tanımdan sonra tanımladığınız API'ye bir fonksiyon veya bir altprogram gibi
ulaşabilirsiniz.
VB'de API Tanımı
VB'de API'ler iki şekilde tanımlanabilir. Fonksiyon veya altprogram olarak.
Fonksiyon olarak tanımlanan API'lerden geriye bir değer dönerken, altprogram
olarak tanımlananlardan bir değer geri dönmez.
Alt program olarak API tanımı:
Private/Public Declare Sub isim Lib
"libname" [([parametreler])]
Fonksiyon program olarak API tanımı:
Private/Public Declare Function isim Lib libname
[([parametreler])] [As tip]
Burada isim fonksiyonun ismidir ve programda API bu isimle çağrılır. Libname
kullanılan kütüphanenin ismi, parametreler; fonksiyona giren parametreler, As
tip; fonksiyondan dönen değerin tipidir.
API'nin tanımlanacağı yer formun veya modülün General-Declerations kısmıdır.
API'yi bir formun decleration kısmında tanımlarsanız API'yi yalnız o formun
altprogramlarından çağırabilirsiniz. Bir modülde tanımlarsanız programınızın
her yerinde kullanabilirsiniz.
API'yi doğru olarak tanımladığınız halde VB, ilgili dosyada böyle bir API
bulunmadığını söylüyorsa veya API ile aynı isme sahip bir VB komutu var ise bu
durumda Alias isimleri kullanmanız gerekir.
Private/Public Declare Function/Sub isim Lib libname
Alias "isim" [([parametreler])] [As tip]
API'yi doğru olarak tanımladığınız halde VB, ilgili dosyada böyle bir API
bulunmadığını söylüyorsa API isminin sonuna A ekleyerek Alias ismi olarak
vermeniz gerekir. Bunun sebebi Windows işletim sisitemi farklı dilleri
desteklemektedir. ANSI karakter setini destekleyen ülkler için sonuna A harfi,
UniCode veya iki karekter genişliğini kullanan ülke seti için ise sonuna W
harfi eklemeniz gerekir.
API tanımı yaparken kullanacağınız tiplerin isimlerini ise C'den VB'ye
çevirmeniz gerekir. Genel olarak tip karşılıkları şöyledir.
|
|
C |
Visual Basic |
|
|
atom |
ByVal değişken AS integer |
|
|
bool |
ByVal değişken As Long |
|
|
byte |
ByVal değişken As Byte |
|
|
char |
ByVal değişken As Byte |
|
|
colorref |
ByVal değişken As Long |
|
|
dword |
ByVal değişken As Long |
|
|
hwnd,hdc,hmenu vb |
ByVal değişken As Long |
|
|
int,uint |
ByVal değişken As Long |
|
|
long |
ByVal değişken As Long |
|
|
lparam |
ByVal değişken As Long |
|
|
lpdword |
değişken As Long |
|
|
lpint,lpuint |
değişken As Long |
|
|
Iprect |
değişken As type |
|
|
Ipstr,Ipcstr |
ByVal değişken As String |
|
|
Ipvoid |
değişken As Any |
|
|
lpword |
değişken As Integer |
|
|
lresult |
ByVal değişken As Long |
|
|
null |
değişken As Any veya ByVal
değişken As Long |
|
|
short |
ByVal değişken As Integer |
|
|
void |
Sub procedure |
|
|
word |
ByVal değişken As Integer |
|
|
wparam |
ByVal değişken As Long |
|
|
16 bit |
ByVal değişken As Integer |
|
|
32 bit |
ByVal değişken As Long |
|
|
float |
ByVal değişken As Single |
|
|
double |
ByVal değişken As Double |
Parametrelerden biri iki farklı tipte değer alabiliyorsa bunu As Any olarak
tanımlamanız gerekir. Hangi parametrenin Any olarak tanımlanması gerektiğine
ancak dosyadaki bilgileri okuyarak anlayabilirsiniz. Örneğin bir parametre hem
string içerebiliyor ve hemde Null içerebiliyorsa bu parametre Any olarak
tanımlanmalıdır.
Yaptıkları işlere göre API'lerin bulundukları dosyalar ise şunlardır :
|
|
DLL |
Fonksiyonları |
|
|
Advapi32.dll |
Şifre ve Kayıt dosyası
işlemleri gibi gelişmiş bir çok API'ler |
|
|
Comdlg32.dll |
Diyalog pencereleri ile
ilgili API'ler |
|
|
Gdi32.dll |
Grafik API'leri |
|
|
Kernel32.dll |
Çekirdek Windows API'leri |
|
|
Lz32.dll |
32 bit skıştırma API'leri |
|
|
Mpr.dll |
Multiple Provider Router
API'leri |
|
|
Netapi32.dll |
32-bit Network API'leri |
|
|
Shell32.dll |
32-bit Shell API'leri |
|
|
User32.dll |
Kullanıcı arabirimi
API'leri |
|
|
Version.dll |
Versiyon işlemleri
API'leri |
|
|
Winmm.dll |
Multimedia API'leri |
|
|
Winspool.drv |
Print spooler API'leri |
VİSUAL BASIC DERS NOTLARI
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. Eger 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.Eger 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.
Örnek :
Private Sub Form_Load()
Dim Ad As String
Dim Maas As Currency
Dim D_tarihi As Date
Dim Adres As String
Dim Sira As Integer
End 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.Sira 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-C
DefStr S
DefVar K
DefDate D
DefSng 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 String
Dim maas As Currency
End Sub
Bu örnektede ad ve soyad isimli iki degişken string türünde ve maas degişkeni ise Currency tipindedir.
VERİ TİPLERİ
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 Integer
DefInt A-C
Oran% = 100
A_sayı = 100
B_sayı = Oran*A_sayı
C_sayı = B_sayı + A_sayı – 1000
Maas= 32767
End Sub
Eger
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-B
Bölüm=50000
cıkan&=600000
Kalan& = (cıkan / Bölüm ) * 10000
End Sub
Single :
Tam 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-B
Bölüm=50000
Cıkan!=600000
End Sub
Double :
Visual 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-K
Darı=50000
Bugday=600000
Arpa=340.56
End Sub
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=34650
Const 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 Ogrencı
Ad As String *10
Soyad As String *12
Not As Byte
Kredi As Integer
End Type
'Ogrencı veri tipi toplam hafızada 25 byte yer kaplamaktadır. Bu veri tipini kullanmak için 'Ogrencı tıpınde degişkenler tanımlamak gerekmektedir.
Private Sub Form_Load()
Dim A As Ogrencı
Dım B As Ogrencı
'Bu degıskenlere bilgi atamak aşagıdaki şekildeki gibidir.
A.Ad="Ali"
A.Soyad ="Armer"
End Sub
String
türü degişkenlere sabit bir uzunlukta yer ayırmak istersek aşagıdaki şekilde bir
tanımlama yapmalıyız.
Dim Name As String *12
Dim Address As String *50
DİZİLER
Aynı 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 String
Dim no(2) As Integer
ad(0) = "ali"
ad(1) = "ahmet"
ad(2) = "ebru"
no(0) = 133
no(1) = 56
no(2) = 67
End 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.
Eger
diziyi sıfırdan degilde 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
deger 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.
STATİK DİZİLER
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 1
Dim a(5) As Integer
Private Sub Command1_Click()
Text1.Text = a(1) + a(2)
End Sub
Private Sub Form_Load()
a(1) = 10
a(2) = 20
End 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. Eger 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.
Bu 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 1
Private Sub Form_Load()
Dim s() As String
End Sub
Private Sub Command1_Click()
ReDim s(10) As String
s(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 " degeri ikinci elemanına "Ayşe" degeri 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 1
Private Sub Form_Load()
Dim s() As String
End Sub
Private Sub Command1_Click()
ReDim s(10) As String
s(1) = "selam"
s(2) = "fatih"
Text1.Text = s(1) + s(2)
End Sub
Private Sub Command2_Click()
ReDim s(5) As String
s(2) = "fatih"
Text1.Text = s(1) + s(2)
End Sub
Bu örnekte yukarıdaki örnekten tek farklı yan olarak bir Command butonun
arkasına yazılmış kod bulunuyor. Eger 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 degerler 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
TİP DÖNÜŞÜMLERİ
Visual 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 Deger Yaptıgı İş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.
Örnek1:
A=10 , B=5 , C=10 , D=0
check = CBool(A < B) 'check=False
check = CBool(A > B) 'check=True
check = CBool(A = C) 'check=True
check = CBool(D) 'check=False
check = CBool(B) 'check=True
Örnek2 :
A=10 , B=5 , C=0
check = CBytel(A < B) 'check=0
check = CByte(A > B) 'check=1
check = CByte(A = C) 'check=0
Örnek3 :
A=1 , B=2 , C=36000 , D=36001
check = CDate(A) 'check=12/31/1899
check = CDate(B) 'check=1/1/1900
check = CDate(C) 'check=7/24/98
check = CDate(D) 'check=7/26/98
Örnek4 :
A=2.4 , B=2.5 , C=2.6 , D=3.5
check = CInt(AB) 'check=2
check = CInt(B) 'check=2
check = CInt(C) 'check=3
check = CInt(D) 'check=4
2. OPERATÖRLER , PROGRAM KONTROL VE DÖNGÜ KOMUTLARI
+ , - , * , / , \ , ^ ,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 + Ifade2
Burda 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=58
Sonuc=1378+56.78+435.908 'Sonuc=1870.688
A=89,B=3456
Deger=A+B ' Deger=3545
Ad="Ebru"
Soyad=” Kayacı”
Dim Name As String
Name=Ad+Soyad 'Name=”Ebru Kayacı”
Bu 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=False
Sonuc=(100=100) 'Sonuc=True
A=12,B=45
Sonuc=(A=B) 'Sonuc=False
C=23,D=23
Sonuc=(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.
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=True
Sonuc=(100<>100) 'Sonuc=False
A=12,B=45
Sonuc=(A<>B) 'Sonuc=True
C=23,D=23
Sonuc=(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=True
Sonuc=(100<100) 'Sonuc=False
Sonuc=(100<130) 'Sonuc=False
A=12,B=45
Sonuc=(A<B) 'Sonuc=True
C=23,D=23
Sonuc=(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şagıda çeşitli örneklerle kaynaştırma operatörü açıklanmıştır.
Örnek :
Sonuc=(800>345) 'Sonuc=True
Sonuc=(100>100) 'Sonuc=False
Sonuc=(100>130) 'Sonuc=False
A=90,B=45
Sonuc=(A>B) 'Sonuc=True
C=23,D=23
Sonuc=(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)
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=True
Sonuc=(100=>100) 'Sonuc=True
Sonuc=(100=>130) 'Sonuc=False
A=90,B=45
Sonuc=(A=>B) 'Sonuc=True
C=23,D=23
Sonuc=(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=False
Sonuc=(100<=100) 'Sonuc=True
Sonuc=(100<=130) 'Sonuc=True
A=90,B=45
Sonuc=(A<=B) 'Sonuc=False
C=23,D=23
Sonuc=(A<=D) 'Sonuc=True
Lojik iki ifadenin karsilastirilmasi için kullanilir. Iki ifadenin'de dogru
olmasi gereklidir. Genel yazim sekli asagidaki 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.
|
|
İfade2 |
İfade1 And İfade2 |
|
0 |
0 |
0 |
|
0 |
1 |
0 |
|
1 |
0 |
0 |
|
1 |
1 |
1 |
Örnek :
Sonuc = (False And False ) 'Sonuc=False
Sonuc = (Null And False ) 'Sonuc=False
A=True , B=True
Sonuc = (A And B ) ' Sonuc=True
A=1 ,B=0
Sonuc = (A And B ) ' Sonuc=0
A=1 ,B=1
Sonuc = (A And B ) ' Sonuc=1
A=1,B=4
Sonuc = (A And B ) ' Sonuc=0
A=1,B=3
Sonuc = (A And B ) ' Sonuc=1
A=1,B=5
Sonuc = (A And B ) ' Sonuc=1
A=1,B=8
Sonuc = (A And B ) ' Sonuc=0
Kontrol komutları programcılar tarafından sıkca kullanılan belirli ifadeleri
kontrol etmek veya bazı şartların gerçekleşip gerçekleşmedigini kontrol etmek
amacıyla kullanılan komutlardır. Biz burada en çok kullanılan komutların
üzerinde duracagız.
If Kontrol Yapısı :
Genel olarak bu komut yapısı şu şekilde yazılır.
If Kosul Then
Kosul dogru 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
Eger 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 blogunun bulunmasına gerek yoktur.
Burada eger Kosul dogru ise ilk Then’den sonraki satırlar çalıştırılarak Elseif
ifadesine kadar icra edilirler. Daha sonra Endif 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.1
Endif
Örnek :
If Bolen=0 Then
Msg.Text=” Bolen sayı sıfır olamaz."
Else
Sonuc= Sayı / Bolen
Msg.Text = Sonuc
Endif
Ornek :
If name="Ali" AND no="1301920035"
Not=4
ElseIf name="Ahmet" AND no="1301940023" Then
Not=3
ElseIf name="Hakan" AND no="1301930045" Then
Not=2
ElseIf name="Hatice" AND no="1301940005" Then
Not=7
Endif
Bu 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 No
Case 1304
Name="Murat Tuna"
Case 1306
Name="Ayse Sinem"
Case 1307
Name=”Hakan Kaya”
Case 1312
Name=”Abdullah Kahyalı”
Case 1324
Name="Hatice Uygun"
End Select
Örnek :
Select Case Ay
Case 1
Max_date=31
Case 2
Dim Artık as Integer
Artık = Yıl Mod 4
If Artık=0 Then
Max_date=29
Else
Max_date=28
Endif
Case 3
Max_date=31
Case 12
Max_date=31
Case Else
Mesaj=”Error : Bir yılda 12 ay vardır.”
End Select
Bu komutlar belirli işlemleri belirli sayıda veya herhangi bir şart
sağlanana kadar tekrarlamak amacı ile kullanılırlar. Bu komutlar aşagı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şagıdada 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 degerı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.
Eger Sayac degeri Bitis degerini 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 son1
Komutlar
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=1
For I=1 To Sayi
Factöriyel= Factöriyel * I
Next I
Bu örnekte girmiş oldugunuz pozitif sayının faktoriyeli hesaplanmaktadır.
Bu dögünün genel
yazim sekli asagidaki sekildeki gibidir.
Do While Kosul
Komutlar
Loop
Burada önce Kosula bakilir. Eger 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ç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=2
Do While I<=Sayi
Fact=Fact * I
I=I+1
Loop
Buradaki örnekte te
faktöriyel hesabini Do While döngüsü ile yapiyoruz. Burada sayac olarak I degeri
kullaniliyor. Eger faktöriyeli hesaplanacak deger 2 den kücükse (1 veya 0 ise)
döngü içine girilmemektedir. Döngü içinde sayac artimini kendimiz veriyoruz.
Sayac sayi degerine esit 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. Eger 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=1
Do
Fact=Fact *I
I=I+1
Loop While I<=Sayi
Faktöriyel hesapini yapan bir baska örnek verilmistir.
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. Eger 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=Sayi
Do Until I<=1
Fact=Fact * I
I=I-1
Loop
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. Eger 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=1
Do
Fact=Fact *I
I=I+1
Loop While I>Sayi
Faktöriyel hesapını yapan bir başka örnek verilmiştir
FileDateTime(dosya_adi)
Dosyanın en son değişikliğe uğradığı tarih ve saati verir. Genel yazım
biçimi şu şekildedir:
Text1.Text = FileDateTime("c:\autoexec.bat")
GetAttr
Verilen dosyanın özelliklerini geri döndürür. Genel yazım biçimi şu
şekildedir:
Text1.Text = GetAttr("c:\autoexec.bat")
Geri dönüş değerleri şu şekildedir.
0 = vbNormal
1 = vbReadOnly (Sadece okunabilir.)
2 = vbHidden (Saklı dosya)
4 = vbSystem
8 = vbVolume
16 = vbDirectory
32 = vbArchive
SetAttr
Verilen dosyanın özelliklerini değiştirir. Genel yazım biçimi şu şekildedir:
SetAttr "c:\scandisk.log", 2
-ASC Fonksiyonu
Verilen string'in ilk karakterinin ASCII kodunu geri döndürür. Genel yazım
biçimi şu şekildedir:
A% = ASC(String)
CHR$ Fonksiyonu
0 ile 255 arasında girilen sayının ASCII karakterini geri döndürür. Genel
yazım biçimi şu şekildedir:
A$ = CHR$(number)
SPACES$ fonksiyonu
n ile girilen değer kadar boşluk karakterini geri döndürür. Genel yazım
biçimi şu şekildedir:
A$ = SPACES$(10)
STRING$ (adet, kod)
"kod" parametresi 0 ile 255 arasında bir değer alabilir. Girilen kodun ASCII
karakterini "adet" sayısı kadar geri dödürür. Genel yazım biçimi şu şekildedir:
yediA = STRING$(7, 66)
RIGHT$ (string, adet)
String ifadesinin sağından adet miktarı kadar karakteri geri döndürür. Genel
yazım biçimi şu şekildedir:
met = RIGHT$("Mehmet", 3)
LEFT$ (string, adet)
String ifadesinin solundan adet miktarı kadar karakteri geri döndürür. Genel
yazım biçimi şu şekildedir:
meh = LEFT$("Mehmet", 3)
MID$ (string, sol_bas, adet)
Girilen string ifadesinde sol_bas ile verilen değerdeb başlayarak; adet
kadar, sağa giderek yeni bir string geri döndürür. Genel yazım biçimi şu
şekildedir:
meh = MID$("tarak", 1,3) 'Sonuç "tar" olacaktır.
LEN (string)
Bir string'in uzunluğunu bulmak için kullanılır. Genel yazım biçimi şu
şekildedir:
uzunluk = LEN("Çekoslavakyalılaştıramadıklarımızdanmısınız")
'Sonuc 43 olacaktır.
LCASE(string)
Bir string'in tamamını küçük harfe çevirir. Genel yazım biçimi şu
şekildedir:
ahmet = LCASE("AHMET")
UCASE(string)
Bir string'in tamamını büyük harfe çevirir. Genel yazım biçimi şu
şekildedir:
AHMET = UCASE("ahmet")
INSTR (baslama, str1, str2, CompareMethod)
2. string'i 1. string içinde arar. Eğer başarılı olursa str1'deki str2'nin
başlangıç karakterini alır. Genel yazım biçimi şu şekildedir:
Text1.Text = InStr(1, "Çekoslavakyalılaştıramadıklarımızdanmısınız",
"lılaş", vbTextCompare) ' _
Sonuç "lılaş" string'inin başlangıç harfi "l"'nin nosu olur. yani 13
STRCOMP(str1,str2,tip)
İki string'i karşılaştırmaya yarar. Eğer karşılaştırma sonucu iki string
aynı ise "0" değerini farklı ise "-1" değerini geri döndürür. Genel yazım biçimi
şu şekildedir:
Text1.Text = StrComp("Çekoslovakya", "Çekoslovakya",
vbTextCompare)
TRIM(string)
Stringin sağ ve solundaki boşlukları atar. LTRIM ve RTRIM ile sağ ve solda
özellikle boşluklar atılabilir. Genel yazım biçimi şu şekildedir:
Text1.Text = Len(Trim("
Çekoslavakyalılaştıramadıklarımızdanmısınız ")) 'Sonuç gene 43 tabii ki
VISUAL BASICTE DOSYA VE DIZIN KOMUTLARI
Visual Basic'in
sağladıgı komut ve fonksiyonlar ile uygulamamız içinde işletim sistemi
işlevlerini gerçekleştirebiliriz. Aşagıda bu fonksiyon ve komutları anlatacagız.
Fonksiyonlar geriye bir deger döndürürken komutlar geriye bir deger
döndürmezler.
ChDir:
Bu komut ile aktif dizini degiştirebiliriz. Ancak bu komut geçerli sürücüyü
degiştirmez. Kullanım biçimi aşagıdaki gibidir :
ChDir "yol adı"
Örnek :
ChDir "c:\windows"
ChDir "D:\GAMES"
ChDrive:
Bu komut ile aktif sürücüyü degiştirebiliriz.Kullanım biçimi aşagıdaki gibidir :
ChDrive "sürücü adı"
Örnek :
ChDrive "c"
ChDrive "D"
MkDir:
Bu komut ile aktif dizin içersinde bir dizin yaratabiliriz.Kullanım biçimi
aşagıdaki gibidir :
MkDir "dizin adı"
Örnek :
MkDir "deneme1"
MkDir "c:\temp\deneme2"
RmDir:
Bu komut ile aktif dizin içersinde ve belirtyilen path'de bir dizini
silebiliriz. Ancak silinecek dizin boş olmak zorundadır.Kullanım biçimi
aşagıdaki gibidir :
RmDir "dizin adı"
Örnek :
RmDir "deneme1"
RmDir "c:\temp\deneme2"
Name:
Bu komut ile bir dosyanın ismini ve bulundugu konumu degiştirebiliriz. Ancak
dosyalar üzerinde geçerlidir. Kullanım biçimi aşagıdaki şekildeki gibidir :
Name "eski dosya adı" "yeni dosya adı"
Örnek :
Name "senet.xls" "alacaklar.xls"
Name "c:\my\odev.doc" "d:\arsiv\odevler\vb\stack.doc"
Kill:
Bu komut ile aktif dizinde veya verilen yol üzerindeki dosya ve dosya grublarını
silebiliriz. Wildcard karakterlerinide (? , *) kullanabiliriz.Kullanım biçimi
aşagıdaki şekildeki gibidir :
Kill "dosya adı"
Örnek :
Kill "kdv.xls"
Kill "c:\temp\*.tmp
Kill "d:\denemeler\odevler\vb\d???.doc"
VB'de projelerinizde çok
miktarda text, resim, ikon, cursor gibi dosyalar mı kullanıyorsunuz. Bu
dosyaları yönetmesi ve değişiklik yapması çok mu zor oluyor? O zaman bu
dosyaların derli toplu durması sizin için iyi olacaktır.Bu yüzden res uzantılı
dosyaları projelerenize ekleyerek kolay bir şekilde uygulamalarınızda
kullanabilirsiniz.
Bunun için yapmanız gerekenler şunlar.

Artık Project Explorer penceresinde "Related documents" altında
kaydettiğiniz isimde bir resource dosyası oluşmuştur. Şimdide bu kaynakları
nasıl kullanıcaz ona bi bakalım.
Resource Dosyasının Kullanımı
Reource dosyasını yarattıktan sonra uygulamaya bir form ekleyin ve formun
üzerine 1 text box, bir kaç image, ve bunlara kaynakları yükleyeceğimiz
butonları koyun.

Aşağıdaki koduda copy paste edin ve uygulumayı F5 tuşuna basarak çalıştırın
Private Sub Command1_Click() 'resmi yükle butonu
Image3.Picture = LoadResPicture(101, 0)
End Sub
Private Sub Command2_Click() 'Texti yükle butonu
Text1.Text = LoadResString(101)
End Sub
Private Sub Command3_Click() 'cursoru yükle butonu
Image1.Picture = LoadResPicture(101, 2)
End Sub
Private Sub Command4_Click() 'ikonu yükle butonu
Image2.Picture = LoadResPicture(101, 1)
End Sub
Projeyi çalıştırınca ve
butonlara basınca görüntü şöyle olmalı (tabii sizin kullandığınız text,ikon'la
filan olucak).

İşte bu kadar basit. Bir proje yöneticisinin bu resource dosyalarını önceden
hazırlaması ve standartlarla uğraşan proje elemanına teslim etmesi gerekir.
Böylece proje içinde kullanılan kaynaklar birbirine benzer olacaktır. Resource
dosyasından yükleme yapmak için LoadResData() diye bir fonksiyonda var ama tam
olarak çalıştıramadım. Yapan varsa ve örnekleri Programlama.com'a gönderirse
sevinirim.
İşletim sistemlerine
duyulan ihtiyaçlardan biri standart olarak her program tarafından yapılması
gereken şeyleri ortak bir çatı altında toplamak ve programları sistemde belirli
kurallar altında çalışmasını sağlamaktır. İşletim sistemlerinin değerini anlamak
için işletim sistemi olmayan bir bilgisayar düşünün.
Yaptığınız programları diske kaydetme ihtiyacınız var. İşletim sisteminiz yoksa
programlarınızı diske yazacak ve okuyacak assembly kodları sizin yazmanız
gerekecektir. Ve her program diske yazma ve okuma kodlarını içinde bulundurmak
zorunda olacaktır. Ayrıca diske yazacağınız programı diskin neresine
yazacaksınız. Tabi ki herkes kendi programının başa yazılmasını isteyecektir. Bu
da diski paylaşım sorununu çıkaracaktır. Ayrıca yazıcı için de problem vardır.
Her yazıcı aynı sistemle çalışmayacağı için programınızda yazdırma işlemleri de
varsa belli başlı yazıcı tipleri için gerekli kodları yazmanız gerekecektir. Bu
örnekler çoğaltılabilir.
İşte PC'ler ilk çıktığında disk işlemlerini kolaylaştırmak için DOS ta piyasaya
çıktı. DOS disk işlemlerini yapmak için yazılım interruptlarını programcıların
hizmetine sunmuştu. Diskle ilgili bir işleminiz için INT X'in Y numaralı
servisini çağırıyordunuz ve bu işlemleri sizin yerinize DOS yapıyordu. Sistemler
geliştikçe bilgisayar değişik alanlara da hitap etmeye başlayınca çok değişik
arabirimler de çıktı. DOS'a grafik, yazıcı işlemleri gibi standart işlemler de
eklendi ve sistemde bulunan standart donanımların hemen hemen hepsine DOS veya
BIOS interruptlarıyla erişebiliyordunuz. Ayrıca DOS programların belleği nasıl
kullanacağını da belirliyordu. DOS işletim sistemi olarak kullanıcıya herhangi
bir standart arabirim sunmamıştır. Sadece programların sistemdeki standart
donanımlara ulaşabilecekleri kodları kullanıcıya sunmuştur. DOS'ta yapılan
programların hiçbiri bir birine benzemez. Her program kendi kullanıcı arayüzünü
belirlemek zorundadır ve bunun için gerekli kodu kendisi yazmak zorundadır.
DOS'ta yapılan programların kullanım ve programlanmasının zorluğu da bir ölçüde
buradan kaynaklanır.
DOS'un programlara standart bir arabirim sunmaması, bellek sınırlarının olması
gibi sebeplerden dolayı çok çok geç kalmış olsada Windows çıktı. Windows DOS'un
sağladığı standart donanıma ulaşma haricinde Ses kartları, Gelişmiş yazıcılar,
Scanner'ler gibi donanımların kullanımını da programların kullanımına sunar.
Ayrıca programlara standart arabirimleri (Diyalog kutuları, Formlar, Kontroller
gibi) kullanma imkanı da sunmuştur. DOS kendi servislerini yazılım
interruptlarıyla sunarken Windows API'lerle sunar.
Şimdi şöyle bir şey düşünülebilir. DOS'ta çok program yaptım ama diske birşey
yazdırmak için DOS'un interruptlarını kullanmaya hiç ihtiyaç duymadım. Evet eğer
assembly program yazmadıysanız bunlara da ihtiyacınız yoktur. Çünkü
kullandığınız programlama dili bu işi sizin yerinize yapıyordu. Bu VB'de
yaptığınız programlarda da böyledir. API kullanacaksınız diye bir şart yok VB
bunları sizin yerinize kullanır. Ancak DOS'taki programlama dillerinde olduğu
gibi VB'de de programlama dilinin sunduğu işlemler her zaman işinizi
görmeyebilir, bu durumda Windows API'lerini kullanma ihtiyacı duyarsınız.
Basic herhalde bütün zamanların en yavaş programlar üreten dili olma özelliğini
kimseye kaptırmak istemiyor. Quick Basicte yaptığınız bir program, aynı işi
yapan C ile yapılmış programdan en az 5 kat daha yavaş çalışacaktır. Bu fark
GWBasic'te daha da büyüktür. VB'de de durumun iç açıcı olduğunu iddia etmek çok
güç. Programlarınızda API kullanmanız bu hız barajlarını aşmanızı sağlayacaktır.
Ayrıca VB'nin sunmadığı bazı işlemler için de API kullanmak gerekir. Örneğin
sistemdeki boş bellek miktarını verecek herhangi bir komut VB'de bulunmaz bunu
da yine API kullanarak öğrenmek zorundasınız.
Windows'un sunduğu bu API'ler gruplandırılarak bir çok DLL ve EXE dosyasına
konmuştur. VB'de kullanılan OCX dosyalarında da API'ler bulunabilir. Bu
API'lerden birini kullandığınızda API'nin bulunduğu DLL sisteme daha önce
yüklenmemişse önce bu DLL yüklenir ve API çalıştırılır.
Programınızda API kullanmak için Declare deyimiyle API'yi tanımlamanız gerekir.
Bu tanımdan sonra tanımladığınız API'ye bir fonksiyon veya bir altprogram gibi
ulaşabilirsiniz.
VB'de API Tanımı
VB'de API'ler iki şekilde tanımlanabilir. Fonksiyon veya altprogram olarak.
Fonksiyon olarak tanımlanan API'lerden geriye bir değer dönerken, altprogram
olarak tanımlananlardan bir değer geri dönmez.
Alt program olarak API tanımı:
Private/Public Declare Sub isim Lib "libname"
[([parametreler])]
Fonksiyon program olarak API tanımı:
Private/Public Declare Function isim Lib libname
[([parametreler])] [As tip]
Burada isim fonksiyonun ismidir ve programda API bu isimle çağrılır. Libname
kullanılan kütüphanenin ismi, parametreler; fonksiyona giren parametreler, As
tip; fonksiyondan dönen değerin tipidir.
API'nin tanımlanacağı yer formun veya modülün General-Declerations kısmıdır.
API'yi bir formun decleration kısmında tanımlarsanız API'yi yalnız o formun
altprogramlarından çağırabilirsiniz. Bir modülde tanımlarsanız programınızın her
yerinde kullanabilirsiniz.
API'yi doğru olarak tanımladığınız halde VB, ilgili dosyada böyle bir API
bulunmadığını söylüyorsa veya API ile aynı isme sahip bir VB komutu var ise bu
durumda Alias isimleri kullanmanız gerekir.
Private/Public Declare Function/Sub isim Lib libname
Alias "isim" [([parametreler])] [As tip]
API'yi doğru olarak tanımladığınız halde VB, ilgili dosyada böyle bir API
bulunmadığını söylüyorsa API isminin sonuna A ekleyerek Alias ismi olarak
vermeniz gerekir. Bunun sebebi Windows işletim sisitemi farklı dilleri
desteklemektedir. ANSI karakter setini destekleyen ülkler için sonuna A harfi,
UniCode veya iki karekter genişliğini kullanan ülke seti için ise sonuna W harfi
eklemeniz gerekir.
API tanımı yaparken kullanacağınız tiplerin isimlerini ise C'den VB'ye
çevirmeniz gerekir. Genel olarak tip karşılıkları şöyledir.
|
|
C |
Visual Basic |
|
|
atom |
ByVal değişken AS integer |
|
|
bool |
ByVal değişken As Long |
|
|
byte |
ByVal değişken As Byte |
|
|
char |
ByVal değişken As Byte |
|
|
colorref |
ByVal değişken As Long |
|
|
dword |
ByVal değişken As Long |
|
|
hwnd,hdc,hmenu vb |
ByVal değişken As Long |
|
|
int,uint |
ByVal değişken As Long |
|
|
long |
ByVal değişken As Long |
|
|
lparam |
ByVal değişken As Long |
|
|
lpdword |
değişken As Long |
|
|
lpint,lpuint |
değişken As Long |
|
|
Iprect |
değişken As type |
|
|
Ipstr,Ipcstr |
ByVal değişken As String |
|
|
Ipvoid |
değişken As Any |
|
|
lpword |
değişken As Integer |
|
|
lresult |
ByVal değişken As Long |
|
|
null |
değişken As Any veya ByVal değişken As Long |
|
|
short |
ByVal değişken As Integer |
|
|
void |
Sub procedure |
|
|
word |
ByVal değişken As Integer |
|
|
wparam |
ByVal değişken As Long |
|
|
16 bit |
ByVal değişken As Integer |
|
|
32 bit |
ByVal değişken As Long |
|
|
float |
ByVal değişken As Single |
|
|
double |
ByVal değişken As Double |
Parametrelerden biri iki farklı tipte değer alabiliyorsa bunu As Any olarak
tanımlamanız gerekir. Hangi parametrenin Any olarak tanımlanması gerektiğine
ancak dosyadaki bilgileri okuyarak anlayabilirsiniz. Örneğin bir parametre hem
string içerebiliyor ve hemde Null içerebiliyorsa bu parametre Any olarak
tanımlanmalıdır.
Yaptıkları işlere göre API'lerin bulundukları dosyalar ise şunlardır :
|
|
DLL |
Fonksiyonları |
|
|
Advapi32.dll |
Şifre ve Kayıt dosyası işlemleri gibi gelişmiş bir çok API'ler |
|
|
Comdlg32.dll |
Diyalog pencereleri ile ilgili API'ler |
|
|
Gdi32.dll |
Grafik API'leri |
|
|
Kernel32.dll |
Çekirdek Windows API'leri |
|
|
Lz32.dll |
32 bit skıştırma API'leri |
|
|
Mpr.dll |
Multiple Provider Router API'leri |
|
|
Netapi32.dll |
32-bit Network API'leri |
|
|
Shell32.dll |
32-bit Shell API'leri |
|
|
User32.dll |
Kullanıcı arabirimi API'leri |
|
|
Version.dll |
Versiyon işlemleri API'leri |
|
|
Winmm.dll |
Multimedia API'leri |
|
|
Winspool.drv |
Print spooler API'leri |