.
  Visial Balic Dersleri
 
VİSUAL BASIC DERS NOTLARI
  1. Temel Bilgiler
    • Değişkenler
    • Veri Tipleri
    • Veri Yapıları
    • Dizilere Genel Bakış
    • Statik Diziler
    • Dinamik Diziler
    • Tip Dönüşümleri
  2. Operatörler,Program Kontrol ve Döngü Komutları
    • Aritmetiksel Operatörler
    • Karşılaştırma Operatörleri
    • Mantıksal Operatörler
    • if kontrol Yapısı
    • Select Case Kontrol Yapısı
    • For Next Döngüsü
    • Do While ve Do.......Loop While Döngüleri
    • Do Until ve Do.......Loop Until Döngüleri
    • Do Until ve Do.......Loop Until Döngüleri
1.      TEMEL BİLGİLER
 
DEĞİŞKENLER


    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
 
VERİ YAPILARI
 
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.
 
DİNAMİK DİZİLER

    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
 
ARİTMETİKSEL OPERATÖRLER
 
+ , - , * , / , , ^ ,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ı”
 
KARŞILAŞTIRMALI OPERATÖRLER
 


    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
 
 
MANTIKSAL OPERATÖRLER
 

    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.

İfade1
İ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
 
 
İF KONTROL YAPISI
 

&n
 
 
  Bugün 33584 ziyaretçi (57698 klik) kişi burdaydı! -------------------- (©2008 Webmasterler-Group)------------------- Image Hosted by ImageShack.usImage Hosted by ImageShack.usImage Hosted by ImageShack.usImage Hosted by ImageShack.usImage Hosted by ImageShack.us Image Hosted by ImageShack.us  
  Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol