Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual Basic => Konuyu başlatan: OG - 20 Mayıs 2006, 03:42:33

Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:42:33
kontrol blokları If .. Then .. ElseIf .. Else .. End If ... Iff If TypeOf .. Then .. ElseIf .. Else .. End If ... Choose ... Select Case .. Case .. End Select

İf then komutunun tek satırda en kolay örneği

If bakiye – cekilen < 0 Then Print "Fazla çektiniz"

Burada, eğer bakiye – cekilen 0'dan küçükse fazla çektiniz yazar.

İf then/endif komutlarıyla if'in blok şeklinde kullanımı

If bakiye - cekilen < 0 Then
Print "Fazla çektiniz"
Print "Yetkili haberdar edildi."
End If

Burada, bakiye-cekilen 0 dan küçükse ekrana fazla çektiniz ve yetkili haberdar edildi diye yazılır.

İf then / else /endif komutlarının kullanımı

If bakiye - cekilen < 0 Then
Print "Fazla çektiniz"
Print "Yetkili haberdar edildi."
Else
Bakiye=bakiye-cekilen
End If

Burada ise, bakiye-cekilen 0 dan küçükse ekrana fazla çektiniz ve yetkili haberdar edildi diye yazar. Eğere belirtilen şart sağlanmıyorsa, cekilen miktar bakiyeden düşülerek yeni bakiyeniz hesaplanır.


Yukarıdaki örneklere elseif komutu ekledik

If bakiye - cekilen < 0 Then
Print "Fazla çektiniz"
Print "Yetkili haberdar edildi."
ElseIf bakiye - cekilen = 0 Then
Print "Bakiyeniz 0 "
End If

Select Case – Dallanmanın başka bir yolu

İf then/else komutlarına ilaveten; select case komutları birden fazla dallanmanın yer aldığı durumlarda kullanılabilir.

Burada if komutlarıyla yapılmış örnek

If yas = 5 Then
Kategori = "5 yaşında"
ElseIf yas >= 13 and yas <= 19 Then
Kategori = "genç"
ElseIf (yas >= 20 and yas<= 35) Or yas = 50 Or (yas >= 60 and Age <= 65) Then
Kategori = "özel yetişkin"
ElseIf Age > 65 Then
Kategori = "yaşlı"
Else
Kategori = "ötekiler"
End If


Burada select case komutuyla yapılmış örnek

Select Case yas
Case 5
Kategori = "5 yaşında "
Case 13 To 19
Kategori = "genç"
Case 20 To 35, 50, 60 To 65
Kategori = " özel yetişkin "
Case Is > 65
Kategori = "yaşlı"
Case Else
Kategori = "öekiler"
End Select

Uyarı olarak; Case deyiminin değişik formatları vardır.. online yardım vs. ile bu formatlara ulaşabilrisiniz.



IFF
Koşula bakar. Koşuldan sonraki ilk deyim koşulun doğru oluşunu açıklar , ikinci deyim ise koşulun yanlış olduğunu gösterir.

Kullanım şekli
Değişken= iif(Koşul,"1. Deyim Doğru Sonuç","2. Deyim Yanlış Sonuç")

Dim Sonuç As String
Notu = 45
Sonuç = IIF(Notu > 50, "Geçer","Kalır") ' Sonuç = "
Koşul 1. Deyim 2.Deyim


If TypeOf ...Then ... ElseIf ... Else ... End If
Eğer kontrolörün tipi aradığımız ise; komutları çalıştırır.

If TypeOf Control_Name Is TextBox Then
MsgBox "this controller is a textbox"
Else
MsgBox " this controller isn't a textbox "
End If




Choose
Bir liste içerisinden seçim yapar.

indx = 3
Seçim = Choose(indx, "İyi", "Kötü", "Çirkin")
' Seçim = "Çirkin"
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:43:20
Döngüler (For...Next / Do...Loop)

VB'de For ... Next Döngü Yapısı

Programlama dillerinde döngüler genelde aynı işi birden fazla yaptırmak amacıyla işlemi istenilen miktarda tekrarlamak için kullanılır.Ya da belli aralıklarda birşey arattırmak için veya belli aralığa birşeyler eklemek için aynı işlemi tekrar tekrar yapmaktan kurtulmak için. Döngüler yapı olarak ikiye ayrılır. For....Next Ve Do...Loop biz bu derste For...Next yapısını inceleyeceğiz.
For..Next döngüsünde olay for ve next arasında istenilen miktarda tekrar edilerek döner.Kullanımı:
For x=a to b step Y
Komutlar
Next x
Burada sayacımız x oluyor. Bu x, a dan b ye kadar Y kadar atlayarak sayıyor. Mesela For x=1 to 10 step 1 gibi bir ifadeyle döngü 1 den 10 a kadar 10 kez donecektir. Yani yukarıdaki ifadede x=1 görecek next e kadar olan komutları yerine getirecek,x=2 görecek next e kadar olan komutları yerine getirecek, x=5 görecek next e kadar olan komutları yerine getirecek,dikkat! x=10 görecek next e kadar olan komutları yerine getirecekve döngüden çıkıp artık next in altındaki komutları yerine getirmeye başlıyacak. Eğer step 2 deseydik x 1,3,5,7,9 değerlerini olacaktı, eğer for x=0 to 10 step 2 deseydik x 0,2,4,6,8,10. Mesela 0 den 10 a kadar olan çift sayıların toplamını bu şekilde döngü içerisinde yapabiliriz.
Örnek: Sıfır ile 10 arasındaki çift sayıları toplayan çok küçük bir program yazacağız. Standart.exe olarak açtığınız programa bir tane command buton koyarak çifr tıklayın. Çift tıklayınca project penceresinden command penceresine geçecektir. Bu pencerede şu kodu yazın ve F5 e basarak progamı çalıştırıp command butonunu tıklayın. içinde 30 yazan bir Mesaj kutusu elde edeceksiniz.
Private Sub Command1_Click()
For x = 0 To 10 Step 2
a = a + x
Next x
MsgBox a
End Sub


VB'de Do ... Loop Döngü Yapısı

Programlama dillerinde döngüler genelde aynı işi birden fazla yaptırmak amacıyla işlemi istenilen miktarda tekrarlamak için kullanılır.Ya da belli aralıklarda birşey arattırmak için veya belli aralığa birşeyler eklemek için aynı işlemi tekrar tekrar yapmaktan kurtulmak için. Döngüler yapı olarak ikiye ayrılır. For....Next Ve Do...Loop biz bu derste Do...Loop yapısını inceleyeceğiz.VB de Do...Loop sözcüklerini içeren dört ayrı tür mevcuttur.
1)Do While ... Loop Yapısı
Bu yapıda önce koşul kontrol edilir.Kontrol doğruysa programın akışı döngünün içine girer.Değilse döngüye 1 kez bile girilmeden program işleyişine devam edecektir. Şunu da unutmamk gerek, döngü while koşulu sağlandığı sürece işlevine devam edecektir. Yapısı;
Do While Koşul
Komutlar
Loop
Örnek: Standart.exe olarak açtığınız bir forma bir buton yerleştirin.Butonu çift tıklayın Private Sub Command1.click ile başlayan paragrafi yazın. Sonra tekrar project penceresine geçin ve formun herhangi bir yerine çift tıklayın Private Sub Form Load ile başlayan paragrafı Yazın. Sonra F5 e basarak çalıştırın. Project penceresinden çift tıklatmamın sebebi,ilgili kısma ait private sub... end sub metinlerini vb nin otomatik yazması sebebiyledir.

Private Sub Command1_Click()
End
End Sub

Private Sub Form_Load()
a = MsgBox("Devam için evet,bitirmek için hayırı tıkla",
vbOKCancel, "DoWhile-Loop Yapısı incelemesi")
Do While a = vbOK
a = MsgBox("Devam için evet,bitirmek için hayırı tıkla",
vbOKCancel, "DoWhile-Loop Yapısı incelemesi")
Loop
End Sub

2)Do Until ... Loop
Bu yapıda da önce koşul kontrol edilir ancak while..loop yapısının tersine burada koşul doğru olmadığı sürece programın akışı döngünün içine girer,doğru olduğunda döngünün dışına çıkar.Yada koşul zaten doğruysa hiç döngünün içine girmez. Yapısı;
Do Until Koşul
Komutlar
Loop
Örnek: Yukarıda While..Loop Yapısındaki yaptığımız programla aynı işe yarıyan programı until..loop ile yapacağız. Anlaşılması açısından daha yararlı olacağını düşündüm.Yapmanız gereken while ı silip until,vbok u silip vbcancel yapmanız.
Private Sub Command1_Click()
End
End Sub

Private Sub Form_Load()
a = MsgBox("Devam için evet,bitirmek için hayırı tıkla",
vbOKCancel, "DoWhile-Loop Yapısı incelemesi")
Do Until a = vbCancel
a = MsgBox("Devam için evet,bitirmek için hayırı tıkla",
vbOKCancel, "DoWhile-Loop Yapısı incelemesi")
Loop
End Sub
3)Do ... Loop While
İşte geldik koşulun altta kontrol eildiği yapıya.Bundan sonra anlatacağım dördüncü yapıda da böyle. Koşul altta kontrol ediliyor. Tahmin edeceğiniz gibi birinci yapıda anlattığım Do While ... Loop yapısından tek farkı while ın en üstte değil de en altta olmasıdır. Hal böyle olunca koşul sağlansa da sağlanmasa da döngü yukarıdan aşağıya en az bir kez akacaktır, sonra aşağıdaki while ile belirtilen koşul sağlandığında döngü yukarı çıkıp bir kez daha dönecektir,ta ki koşul sağlanmayıncaya dek.Sağlanmayınca programın akışı döngüden çıkar ve alt satırdan devam eder. Yani birinci ve ikinci yapıdan farkı,hiçbirşey olmasa bile döngü,koşul en aşağıda kontrol edildiği için en az bir kez icra eder.Yapısı;
Do
Komutlar
Loop While Koşul
4)Do ... Loop Until
Bu da bir üstte anlattığım yapı gibi koşulu aşağıda kontrol ediyor. Yani koşul kontrol edilmesi için program döngünün içinde enaz bir kere akıyor. Sizin de tahmin ettiğiniz gibi ikinci yapıda anlattığım Do Until...Loop yapısından tek farkı az önce bahsettiğim gibi koşulun aşağıda kotrol edilmesi.Yapısı;
Do
Komutlar
Loop Until Koşul
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:44:08
Inputbox

VISUAL BASİC'TE İNPUTBOX VE

ÖZELLİKLERİ

KAYNAKLAR: 1. www.msdn.com

2.antrak gazetesi

3.www.meta.wikimedia.org


Kullanıcıdan bilgi almak istediğimiz zaman bu fonksiyonu kullanabiliriz. Bilgi giriş penceresinden girilen bilgi String(karakter) türünde olacaktır.

Kullanımı: Değişken=Inputbox("Başlık") şeklindedir.

veri=InputBox("Adınızı girin")

Sayısal olarak kullanılacak bilgini VAL fonksiyonu yardımıyla sayısal değere dönüştürülmesi gereklidir.

Sıra No = Val(InputBox("Sıra No Giriniz"))

Kullanım Şekli;

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])


Prompt: Zorunlu. İletişim kutusunda gösterilecek mesajı belirler ve en fazla 1024 karakter olabilir. Eğer birden fazla satır olacaksa aynı MsgBox fonksiyonunda olduğu gibi mesajımıza Chr(13) & Chr(10) kodunu ekleriz

Title: İsteğe Bağlı.Başlık çubuğunda kullanılan değerdir. Eğer kullanmazsanız varsayılan olarak projenizin ismi kullanılır

Default: İsteğe Bağlı. Text Box da varsayılan olarak bir cevap görüntülenir eğer kullanılmazsa Text Box boş olarak görüntülenir

Xpos: İsteğe Bağlı. Giriş kutusunun ekrandaki yatay pozisyonunu belirler ve sayısal bir değer olmak zorundadır


Ypos: İsteğe Bağlı. Giriş kutusunun ekrandaki dikey pozisyonunu belirler ve sayısal bir değer olmak zorundadır

Helpfile: İsteğe Bağlı. yardım dosyasının yerini belirler eğer bu değer tanımlanmışsa "Context" değeri mutlaka tanımlanmalıdır


Context: İsteğe Bağlı. Sayısal bir değer alır yardım konularının numaralarını gösterir

Example:
Private Sub Form_Load()
Dim Vize1, Vize2, Vize3 As Byte
Dim Final, Sonuc As Integer
Vize1 = Val(InputBox("1.Vize Sonucu", "Not Hesaplama"))
Vize2 = Val(InputBox("2.Vize Sonucu", "Not Hesaplama"))
Vize3 = Val(InputBox("3.Vize Sonucu", "Not Hesaplama"))
Final = Val(InputBox("Final Sonucu", "Not Hesaplama"))
Sonuc = Vize1 + Vize2 + Vize3 + 4 * Final
MsgBox Sonuc, vbInformation + vbOKOnly, "Sınav Sonucu"
End Sub
ALINTIDIR.
Hazırlayan:DUYGU YILDIZ
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:44:58
Mesaj kutusu (MsgBox) özellikleri ve kullanımı

MSGBOX-MESAJ KUTUSU

Kullanıcıyı bilgilendirmeyi sağlar. Kullanıcıya elde edilen bilgi ve uyarı mesajlarını bildirmekte ya da seçimin onaylanmasını sağlamak için kullanılır.

Windows'ta en aşina olduğumuz şey program akışı sırasında bilgi vermek ve onaylatmak için karşımıza çıkan mesaj kutularıdır.Örneğin bir programdan çıkarken "kaydedilsin mi?" gibi bir soru ve duruma göre evet,hayır,iptal vb. seçenekleri olan bir kutu çıkar.Bu kutu windows tarafından sağlanan standart bir kutudur ve windows altındaki İngilizce bir mesajın altındaki evet,hayır gibi Türkçe seçenekleri vardır.Bu kutuları programın herhangi bir yerinde kullanıcıya mesaj vermek ve onay almak için iki değişik formatta kullanılabilir.

Sadece kullanıcıya mesaj vermek için kullanılacaksa aşağıdaki gibi kullanılır.
Msgbox("dosya bulunamadı")
Bu durumda mesajla birlikte tamam düğmesi olan pencere çıkar.

Örneğin programdan çıkarken iyi günler mesajı vermek için form kapanırken meydana gelen Unload olayına aşağıdaki kodu yazınız.

Option Explicit
Private Sub Form_Unload(Cancel As Integer)
MsgBox ("iyi günler")
End Sub



Mesaj kutuları bir çok durumda sadece bir mesaj vermek için değil aynı zamanda kullanıcıdan onay almak içinde kullanılır.Kullanıcının mesaj kutularında verebileceği cevaplar için uygun düğmeleri belirlemek ve verilerin cevabını da öğrenebilmek içinde msgbox fonksiyonu aşağıdaki formatta kullanılır.
Cevap=msgbox(mesaj,[tip],[pencere başlığı],[helpfile,context])

Mesaj:
Kutu içerine yazılmasını istediğimiz mesaj.
Pencere başlığı:
Pencerenin başlığına yazılacak metin.



Helpfile,context:
Bu iki özellikle bir yardım dosyası ismi ve bir konu numarası belirlenebilir.Böylece kullanıcının mesaj kutusunda yardım istendiğinde ilgili help dosyası açılır ve ilgili konu gösterilir.
Tip:
Pencerenin içine konacak seçenekler,iconlar pencerenin önceliğini ve varsayılan seçenekleri belirten bir sayıdır.Tip parametresini şu şekilde formalize edersek;
Tip=seçenek+icon+varsayılan+öncelik
Bu formüldeki değerlerin olabileceği liste aşağıdaki tablodaki gibidir.
Aşağıdaki tabloda en önemli parametre mesaj kutusunun tipini belirleyen seçenekler parametresidir.Bu parametre mesaj kutusunda hangi düğmelerin bulunacağını belirler.
İcon parametresi ise kullanıcının dikkatini çekebilmek için mesaja uygun bir resim gösterilmesinde kullanılır.
Varsayılan düğme parametresi ise kullanıcının yanlış seçim yapmasını önlemek için açılan pencerede hangi düğmenin aktif olacağını belirler.Örneğin bir dosyayı önemli bir dosyayı silmek için kullanıcıdan onay alırken açtığınız pencerede varsayılan düğmeyi hayır düğmesi yaparak kullanıcını dosyayı yanlışlıkla silmesi önlenebilir.
Öncelik parametresinin 4096 olması durumunda mesaj kutusunda herhangi bir seçim yapılmadan diğer uygulamalara geçiş yapılmaz.Cevap verilmesinin sistem için kesinlikle gerekli olduğu durumlarda kullanılabilir.
Bu dört ayrı seçenek birbiriyle toplanarak msgbox fonksiyonun ikinci parametresi olarak kullanılır.





seçenek
vbokonly

vbokcancel


vbAbortretryIgnore

vbYesNoCancel

vbYesNo

vbRetryCancel

icon
vbCritical

vbQuestion

vbExclamation

vbInformation

varsayılan
vbDefaultButton1
birinci düğme
vbDefaultButton2
ikinci düğme
vbDefaultButton3
üçüncü düğme
öncelik
vbApplicationModal
system modal
vbSystemModa
normal

Msgbox fonksiyonundan kullanıcını hangi düğmeyi seçtiğini belirtir bir tam sayı geri döner.bu değerler aşağıdaki tabloda verilmiştir.


sembolik
sayısal
anlamı
vbOk

1
tamam düğmesi seçildi
vbCancel

2
iptal düğmesi seçildi
vbAbort

3
işlemi durdur düğmesi seçildi
vbRetry

4
tekrar dene düğmesi seçildi
vbIgnore

5
göz ardı et düğmesi seçildi
vbYes

6
evet düğmesi seçildi
vbNo

7
hayır düğmesi seçildi


Örnek:
Private sub form_load()
Dim cevap,dosya
Dosya="gereksiz.sil" 'silinecek dosya adı
cevap = MsgBox(dosya + "dosyası silinsin mi?", 4 + 32 + 256, "silinecek")
If cevap = 6 Then Kill dosya
End Sub


Yukarıdaki örnekte görüldüğü gibi 4 değeri ile evet,hayır düğmesini,32 değeri ile ? iconu ,256 değeri ile de hayır düğmesi aktif hale geldi. Cevap= 6 satırı ile evet düğmesinin seçildiğini anlıyoruz ve kill ile de dosya silme işlemine gerçekleştiriyoruz.,
Msgbox fonksiyonunun bulunduğu satırı sembolik değerleri kullanarak yazarsak daha anlaşılır olur.

Private Sub Form_Load()
Dim cevap, dosya
dosya = "gereksiz.sil"
cevap = MsgBox(dosya + "dosyası silinsin mi?", vbYesNo + vbDefaultButton2 + vbQuestion, "silinecek")
If cevap = 6 Then Kill dosya
End Sub
Private sub form_load()
Dim cevap As VbMsgBoxResult
Msgbox "programa hoş geldiniz!",VbInformation+VbOkOnly,deneme v1.0"
Cevap=Msgbox ("programın yüklenilmesine devam edilsin mi? , vbQuestion + VbYesNo , "deneme v1.0")
İf cevap=VbYes then
Msgbox "program yüklemeye devam edecek ",VbOnly +VbInformation,"deneme v1.0"
Else
Msgbox"güle güle",VbOnly+VbInformation,"deneme v1.0"
End
End if
End sub.


A satırında, yazdığımız kodların form ilk yüklendiğinde işleme sokulacağını anlatmaktadır.B satırında ise "cevap" isimli değişkenimizin bir mesaj kutusunun sonuç değişkeni olduğunu tanımlıyoruz.C satırında ki alttan çizgi ( _ ) ise daha satırın daha bitmediğini çizginin altındaki satırın devamı olduğunu belirtmektedir.Bu özelliği bu özelliği kullanmamıza gerek yok , çok uzun satır kullandığımızda bunu kullanmamız hataları bulmamız açısından kolaylık sağlayacaktır.Ç satırında "cevap" değişkenine mesaj kutusundan bir değer atanıyor.Burada önemli olan nokta mesaj kutusunda ki basılan düğmeyi atama yapıyorsak "msgbox" komutundan sonra yazdıklarımızı () parantez içinde yazmalıyız. F satırındaki komut programı sona erdirmeye yarar.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:45:46
KLAVYE OLAYLARI

KeyPreview

Form aktifken basılan tuşlardan formun etkilenip etkilenmeyeceği bu özellik kullanılarak ayarlanılır. Bu özellik iki değer alabilir. Eğer değer true ise formda bulunan herhangi bir kontrolün üzerinde basılan tuşlar ilk önce formun KeyPress, Keydown, KeyUp olaylarını meydana getirir. Bu değer false ise kontrolün üzerinde basılan tuşlar o kontrolün KeyPress, Keydown, KeyUp olaylarını meydana getirir.

KeyPress (Bir tuşa basma olayı)

Çalışma anında klavyenin yön ve kontrol (Control Alt, Shift vs.) tuşları dışında herhangi bir tuşa basılması halinde KeyPress olayı meydana gelir. KeyPress olayı için Visual Basic tarafından hazırlanan yordama basılan tuşun Ascii kodu parametre olarak gönderilir. Formlar için KeyPress olayının olabilmesi için formda düğme ve metin kutusu gibi nesnelerin olmaması gerekir. Bu olay ve yordam daha çok dışarıdan bilgi girişi yapılan nesneler için kullanıldığı zaman işlevsel olmaktadır. Ancak formlar için yine KeyPress olayı için basit bir örnek verebiliriz. Bu örnek çalışma anında tuşa basılan tuşun Ascii kodunu bulup ekrana yazar:
İmleç metin kutusu üzerinde iken bir tuşa basıldığı anda Keydown'dan sonra tetiklenen olaydır. Bu olayda basılan tuşun Ascii değeri KeyAscii değişkenine atanır. Bu değişkeni kullanarak hangi tuşa basıldığını öğrenebilirsiniz.

Aşağıdaki program, formun çalışması sırasında hangi tuşa basıldığını ekrana yazar. (Bu key olaylarının kullanılabilmesi için, nesnenin keypreview özelliğinin açık olması gerekir.) Aktif nesne tarafından algılanır.

Çalışma anında her tuşa basma işleminden sonra Form_KeyPress yordamı işletilir. Basılan tuşun Ascii kodu Chr ( ) fonksiyonuna parametre olarak verilerek hangi tuşa basıldığı öğrenilebilir.

Örnek:

Private Sub Form_KeyPress(KeyAscii As Integer)ShowPrint Chr(KeyAscii) & " tusuna bastiniz."End SubÖrnek:

Private Sub Form_KeyPress (KeyAscii As Integer )
Tuşun basılıp bırakılması ile yapılacak olan işlemler
End Sub

KeyDown ve KeyUp Olayları

KeyDown ve KeyUp olayları işlev bakımında KeyPress olayına benzeseler de bazı farklılıklar vardır. KeyDown olayı tuşa basıldığı anda, KeyUp ise tuşun serbest bırakıldığı sırada meydana gelir. KeyPress olayında ise tuşa basma – bırakma ayrımı yoktur. Bu iki olayı temsil eden yordamlar KeyPress olayına ait yordamdan farklı olarak dışarıdan ikinci bir parametreyi daha almaktadır. Basılan tuşun Ascii kodu KeyCode adlı parametreye (değişken) aktarılır.

KeyDown: İmleç metin kutusu üzerinde iken bir tuşa basıldığı anda tetiklenen olaydır. Bu olay herhangi bir tuşa basıldığı anda meydana gelir. Bu olayda iki parametre kullanılır. Bu parametrelerin biri basılan tuşun Ascii değerini, diğeri ise bu tuşla birlikte Shift, Ctrl ve Alt tuşlarından herhangi birine basılıp basılmadığı konusunda bilgi tutar. Aktif nesne tarafından algılanır. KeyUp olayından önce oluşur. Shift adındaki ikinci parametreye ise bu olay meydana geldiği zaman Shift, Ctrl ve alt tuşlarının birinin basılı durumda olup olmadığı konusunda bilgi aktarılır. KeyDown olayı sırasında Shift tuşu basılı durumda ise Shift değişkeni 1,basılı durumda değilse 0 değerini içerir. Bu olay sırasında Ctrl tuşu basılı durumda ise Shift parametresi 2 değerini alır ve Alt tuşu basılı durumda ise 4 değerini alır.
Aşağıdaki örnekte kullanıcı Ctrl tuşu ile birlikte A tuşuna basarsa kullanıcıya mesaj verecektir.
Örnek:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = 65 And Shift = 2 ThenMsgBox "Ctrl+A tus kombinasyonunu kullandiniz."End IfEnd Sub
Bu çalıştırıldığı anda herhangi bir tuşa basılması durumunda KeyDown olayı meydana gelir ve form_Keydown yordamı işletilir. Bu sırada Shift tuşu basılı durumda ve basılan tuş Enter ise ekrana MsgBox( ) ile mesaj verilir.
KeyUp olayı KeyDown farklı olarak tuşa basıldığı sırada değil, tuşun serbest bırakıldığı yani kullanıcının elini tuşun üstünden kaldırdığı zaman meydana gelir. Bunun dışında KeyUp olayı KeyDown'dan farklı değildir. KeyDown olayının KeyPress olayı karşısında önceliği var.

Örnek:

Private Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)
Tuşa basılması ile yapılacak olan işlemler
End Sub

KeyUp: İmleç metin kutusu üzerinde iken bir tuşa basılıp bırakıldığı anda tetiklenen olaydır. Bu olay ise kullanıcının bastığı tuşu bırakması sırasında meydana gelir. Yukarıdaki tabloda Shift parametresi için gösterilen değerler bu olaydada geçerlidir. Basılı olan bir tuşun bırakılmasıdır. Basılı olan tuşun bırakılması olayıdır. Aktif nesne tarafından algılanır. KeyDown olayından sonra oluşur.

Örnek:

Private Sub Form_KeyUp (KeyCode As Integer, Shift As Integer)
Basılı olan tuşun bırakılması ile yapılacak olan işlemler
End Sub











Aşağıdaki tabloda Shift parametresinin alabileceği değerler ve açıklamalarını bulabilirsiniz.



Shift Parametresinin içeriği
Basılı durumda olan tuşlar
0
Shift,Ctrl ve Alt tuşları basılı durumda
1
Shift tuşları basılı durumda
2
Ctrl tuşu basılı durumda
3
Shift ve Ctrl tuşları basılı durumda
4
Alt tuşu basılı durumda
5
Shift ve Alt tuşaları basılı durumda
6
Ctrl ve Alt tuşları basılı durumda
7
Shift,Ctrl ve Alt tuşları basılı durumda

Ya da bu şekilde de diyebiliriz:

Shift
Tuş Kombinasyonu
0
Basılı Tuş Yok (Ctrl,Alt,Shift)
1
Shift
2
Ctrl
3
Shift + Ctrl
4
Alt
5
Shift + Alt
6
Ctrl + Alt
7
Shift + Ctrl + Alt



Chr( ) Fonksiyonu

Bu fonksiyon 0 ile 255 arasındaki herhangi bir sayıya karşılık gelen Ascii karakterini elde etmek amacıyla kullanılır. Chr ( ) fonksiyonu dışarıdan parametre olarak değeri 0 ile 255 arasında değişen tamsayı bir değeri almaktadır. Geriye bu sayının Ascii karakterini döndürür. Döndürülen değerlerin bazıları ekranda gösterilebilinen karakter olmayıp bir etkidir. Chr( ) fonksiyonunun geriye döndürdüğü bilgi Variant tiptedir. Eğer geriye karaktersel bilginin gönderilmesini istiyorsanız Chr( ) yerine Chr$( ) fonksiyonunu kullanabilirsiniz.

Örnek

Private Sub Command1_Click()
Dim say
say = InputBox("Lütfen bir rakam giriniz")
Print Chr(say)
End Sub


Chr$: Gönderdiğiniz ASCII değerini karakter cinsinden döndürür.0–255 arasında girilen bir nümerik ascii koduna karşılık gelen karakteri verir.

Yazılışı: CHR (Sayı) Yazılışı: CHR$ (Sayı)


Asc( ) Fonksiyonu


Gönderdiğiniz karakterin ASCII değerini döndürür. Klavyeden girilen herhangi bir ifadenin, nümerik ascii karşılığını verir. Eğer tek harfli ifade yerine sözcük girerseniz, sözcüğün ilk karakterini baz alacaktır. Mesela asc (bilgisayar)denirse b' nin nümerik ascii karşılığı olan 98 elde edilir.
Bu fonksiyon, herhangi bir karaktersel bilginin ilk karakterinin Ascii kodunu bulmak amacıyla kullanılmaktadır. Asc() fonksiyonu parametre olarak aldığı karaktersel bilginin ilk karakterinin Ascii kodunu döndürür. Döndürülen değer 0 ile 255 arasında değer olabilir. Yazılışı: ASC (Karaktersel Bilgi)

Örnek

Private Sub Command1_Click()
Dim say
say = Asc("A")
Print say
say = Asc("a")
Print say
say = Asc("oguz")
Print say
End Sub


Asc( ) ve Chr( ) fonksiyonları kullanılarak yapılan bir örnek:

Private Sub Form_Load( )
Dim I, mesaj
For I = Asc("A") to Asc (" Z ")
Mesaj = Mesaj + Chr (I)
Next I
MsgBox Mesaj
End Sub

Örnek:

Bu programda text1'e gireceğiniz karakterin karşılığı text2'de,text3'de girdiğiniz karakterin karşılığı text4'de görünecektir.

Private Sub Command1_Click()a = Text1.Texta = Asc(a)Text2.Text = Str(a)End SubPrivate Sub Command2_Click()b = Text3.Textb = Val(b)If b > 255 Then GoTo sonb = Chr(b)Text4.Text = bEnd Sub

Basılan Tuşun Kodunu Bulmak



Örnek:



Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

MsgBox "Basılan Tuşun Kodu :" & KeyCode

End Sub
Basılan Tuşun Ascii Değerini Bulmak



Örnek:



Private Sub Form_KeyPress(KeyAscii As Integer)
MsgBox "Basılan Tuşun Ascii Değeri :" & KeyAscii
End Sub

Sadece Büyük Harf Kullanmak



Örnek:



Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
End If
KeyAscii = Asc(UCase(Chr(KeyAscii))) ' UCase ile büyük harfe çevriliyor
Print Chr(KeyAscii)
End Sub
Esc Tuşu ile Çıkış



Örnek:



Çıkış_Butonu. Cancel = True
Private Sub Çıkış_butonu_Click()
End
End Sub

NumLock ve CapsLock'u Açıp Kapatmak

Örnek:
(General)(Declaration)
Const VK_CAPITAL = &H14 ' CapsLock
Const VK_NUMLOCK = &H90 ' NumLock
Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
Private Declare Function GetKeyboardState Lib "user32"
(kbArray As KeyboardBytes) As Long
Private Declare Function SetKeyboardState Lib "user32"
(kbArray As KeyboardBytes) As Long
Dim Tuş_Kodu As String
Dim kbArray As KeyboardBytes
Private Sub Command1_Click()
' Tuş_Kodu = VK_NumLock
Tuş_Kodu = VK_CAPITAL
GetKeyboardState kbArray
kbArray.kbByte(Tuş_Kodu) = 0 ' Kapat
SetKeyboardState kbArray
End Sub
Private Sub Command2_Click()

kbArray.kbByte(Tuş_Kodu) = 1 ' Aç

SetKeyboardState kbArray

End Sub


Sisteme Tuş Basımı Yollamak



Örnek:



(General)(Declaration)

Option Explicit

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _

ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Const VK_CONTROL = &H11

Const KEYEVENTF_KEYUP = &H2

Const VK_ESCAPE = &H1B

Private Sub Form_Click()

Call keybd_event(VK_CONTROL, 0, 0, 0) ' CTRL

Call keybd_event(VK_ESCAPE, 0, 0, 0) ' ESC

Call keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0)

Call keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0)

End Sub


Fonksiyon Tuşlarına Görev Atamak



(General)(Declaration)

Option Explicit

Const KEY_F1 = &H70

Const KEY_F2 = &H71

Const KEY_ESCAPE = &H1B

Form1.KeyPreview = True ' Formun KeyPreview özelliği True

Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

Select Case KeyCode

Case KEY_F1 ' F1 - Tarih

Text1.Text = Date$

Case KEY_F2 ' F2 - Saat

Text1.Text = Time$

Case KEY_ESCAPE ' ESC – Çıkış

Unload Me

End Select

End Sub



SendKeys – Tuş Basımı Gönderme
Bu kod klavyenizin ışıklarını yakıp söndürür.

Dim i As Integer
For i = 1 To 150
SendKeys "{CAPSLOCK}", True
SendKeys "{DOWN}", True
SendKeys "{DOWN}", True
SendKeys "{SCROLLLOCK}", True
SendKeys "{DOWN}", True
SendKeys "{DOWN}", True
Next i
SendKeys;(words) : Mesaj yollar * tusu ile yazdiginiz siler
SendKeys;2;13 : Sends ozel tuslar [sag,sol,yukari,asagi]
Kes, Kopyala, Yapistir
Bir TextBoxta Kes, Kopyala, Yapistir, Geri Al islemlerinin yapilmasi için iki tane çok kolay yol mevcut. Asagidaki örneklerde SendKeys methodu kullanilıyor.

birinci örnek:

Sub DoEditThing(whatThing As String, onWhat As Object)
Select Case whatThing
Case "Copy"
onWhat.SetFocus
SendKeys "^C"
Case "Cut"
onWhat.SetFocus
SendKeys "^X"
Case "Paste"
onWhat.SetFocus
SendKeys "^V"
Case "Undo"
onWhat.SetFocus
SendKeys "^Z"
End Select
End Sub

Asagidaki kod ayni isi yapan ikinci örnek:

Sub DoEditThing(whatThing As String, onWhat As Object)
Dim Send$
Select Case whatThing
Case "Copy"
Send = "^C"
Case "Cut"
Send = "^X"
Case "Paste"
Send = "^V"
Case "Undo"
Send = "^Z"
End Select
If Len(Send) Then
onWhat.SetFocus
SendKeys Send
End If
End Sub
Örnek:
Private Sub Command1_Click()

SendKeys "%{F4}", True ' Alt + F4 Programı kapar

End Sub


Key
Code
BACKSPACE
{BACKSPACE}, {BS}, or {BKSP}
BREAK
{BREAK}
CAPS LOCK
{CAPSLOCK}
DEL or DELETE
{DELETE} or {DEL}
DOWN ARROW
{DOWN}
END
{END}
ENTER
{ENTER}or ~
ESC
{ESC}
HELP
{HELP}
HOME
{HOME}
INS or INSERT
{INSERT} or {INS}
LEFT ARROW
{LEFT}
NUM LOCK
{NUMLOCK}
PAGE DOWN
{PGDN}
PAGE UP
{PGUP}
PRINT SCREEN
{PRTSC}
RIGHT ARROW
{RIGHT}
SCROLL LOCK
{SCROLLLOCK}
TAB
{TAB}
UP ARROW
{UP}
F1
{F1}
F2
{F2}
F3
{F3}
F4
{F4}
F5
{F5}
F6
{F6}
F7
{F7}
F8
{F8}
F9
{F9}
F10
{F10}
F11
{F11}
F12
{F12}
F13
{F13}
F14
{F14}
F15
{F15}
F16
{F16}

Key
Code
SHIFT
+
CTRL
^
ALT
%
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:47:34
SDI formlar (İçinde tek pencere olan formlar)

VB de FORMLAR


Visual Basic' te Formlar Bu yazıda Visual Basic'in olmazsa olmazı olan ve her programda mutlaka bir tane olması gereken formlar ve bu formların özellikleri üzerinde duracağız.

Visual Basic' te iki çeşit form vardır. Bunlardan bir tanesi tek başına çalışan form türü olan Visual Basic ilk çalıştığı zaman ekrana gelen form ve projeye her eklenen yeni formun türü olan SDI (Single Document Interface) formlarıdır. Bu tür formların içinde başka formlar çalışamazlar. İkinci tür form çeşidi ise içerisinde başka formların çalışmasına izin veren ve MDI (Multi Document Interface) olarak bilinen form türüdür.Bu tür formların içinde Child form olarak adlandırılan ve normal SDI formların Child özelliğinin true yapılmasıyla oluşan formlar çalıştırılabilir. Aşağıdaki birince resimde örnek bir SDI form , ikinci resimde ise örnek bir MDI form ve bu formun içindeki Child formları görebilirsiniz.



SDI form örneği



MDI form örneği

Şimdi sıra geldi formların özelliklerine. Bu özellikleri sırasıyla ele alalım.

Caption: Formun başlığına yazılacak yazıyı belirtir.Bu özelliğe formun properties penceresinden ulaşılabileceği gibi kod kullanarak da formun başlığı değiştirilebilir.



Icon : Formda kullanılacak iconu belirtir. Bu icon programınıza ait bir kısayol oluşturduğunuzda gözükecek icondur aynı zamanda.



BorderStyle : Formun sınırlarının belirlendiği bu özellik aşağıda belirten değerleri alabilir. 0-None:Bu değer verildiğinde form boyutlandırılamaz ,taşınamaz ve kapatılamaz. Ayrıca formun çerçevesi ,başlığı,kontrol kutusu ,min ve max düğmeleri de formda yer almayacaktır. Çalıştığında aşağıdaki şekli alır.



1-FixedSingle: Bu değer verildiğinde kullanıcı formu büyültüp küçültemez ama formu taşıyabilir ve kapatabilir.Ayrıca formun boyutlarında herhangi bir değişiklik yapılamaz.



2-Sizable: Varsayılan değer budur ve formun tüm özellikleri kullanılabilir.



3-FixedDouble :Kullanıcı formu boyutlandıramaz ama formu taşıyabilir ve formu kapatabilir.

4-FixedToolWindow :Normal forma göre başlığı daha küçük olan ve kontrol menüsü içermeyen bir form oluşturur.Bu formun boyutları kullanıcı tarafından değiştirilemez.

5-SizableToolWindow :Yukarıdaki forma benzer terk farkı boyutları kullanıcı tarafından değiştirilebilir.

MaxButton, MinButton : Formun sağ üst köşesinde bulunan ve formun büyültülüp küçültülmesi işlemleri için kullanılan düğmelerin formda bulunup bulunmamasını belirler.

ControlBox : Formun sol üst köşesinde bulunan kontrol menüsünün görünüp görünmemesini sağlar.Bu değer true veya false değerlerini alabilir.Eğer bu değer true ise kontrol menüsü görünür ve bu form Alt+F4 tuş kombinasyonu kullanılarak kapatılabilir.

Moveable : Bu özellik ile kullanıcının formu taşıyıp taşıyamayacağı belirlenir.Bu özellik true veya false değerini alabilir.Eğer bu değer true ise kullanıcı formu taşıyabilir.

ShowInTaskbar : Bu özellik formun çalışma esnasında görev çubuğunda görünüp görünmeyeceğini belirler.True yada false değerlerini alabilir.Eğer bu özellik true ise program çalıştığında form görev çubuğunda görünür.

AutoRedraw : Bu özellik ile formun üzerine başka bir form geldiğinde veya formun boyutlarıyla oynandığında formun üzerindeki yazı veya çizimlerin yenilenip yenilenmeyeceği belirlenir.Bu özellik true veya false olmak üzere iki değer alabilir. Eğer bu değer true ise formda yenileme yapılır ve formun üzerindeki yazı ve çizimler kaybolmaz.

FontTransparent : Formun üzerine Print metodu ile yazılan yazıların zemin renginin olup olmamasını belirler. Bu özellik true yada false olabilir.Eğer true ise yazıların zemin rengi olmayacaktır. False ise yazı kandı zemin rengi üzerine yazılır ve altındaki nesneyi göstermez.

WindowState : Formun ilk çalışmaya başlayacağı zaman alacağı durumu belirler.Bu özellik üç değer alabilir.

0-Normal :Normal durumda açılır.
1-Minimized imge durumunda açılır.
2-Maximized :Ekranın tamamını kaplayacak şekilde açılır.

StartupPosition : Formun yüklenmeye başlandığı zaman ekran koordinatlarının neye göre belirleneceğini belirler.bu özellik dört farklı değer alabilir.

0-Manuel :Form tasarlandığı zamanki konumda açılır.
1-CenterOwner : Child özelliği true yapılmış formların MDI formun ortasında açılmasını sağlar.
2-CenterScreen :Formun ekranın ortasında açılmasını sağlar.
3-WindowsDefault :Formun konumunu Windows belirler.

KeyPreview : Form aktifken basılan tuşlardan formun etkilenip etkilenmeyeceği bu özellik kullanılarak ayarlanılır.Bu özellik iki değer alabilir.Eğer değer true ise formda bulunan herhangi bir kontrolün üzerinde basılan tuşlar ilk önce formun KeyPress , Keydown ,KeyUp olaylarını meydana getirir.Bu değer false ise kontrolün üzerinde basılan tuşlar o kontrolün KeyPress , Keydown , KeyUp olaylarını meydana getirir.

Count : Formdaki menüler dahil kontrol sayısını belirtir. Picture : Formun üzerinde gösterilecek resmi belirtir.

MDIChild : Yukarıda bahsettiğimiz MDI formların içinde çalışabilen bir form istiyorsak bu özelliği true yapmamız gerekiyor.

CurrentX, CurrentY : Formun üzerindeki aktif pixelin yerini belirtir. Formun üzerine yazdırılacak yazılar bu noktadan başlayarak yazdırılır.

Width : Formun genişliğinin belirlendiği özellik. Heigth : Formun yüksekliğinin belirlendiği özellik.

Left : Formun ekranın ne kadar solunda olacağının belirlendiği özellik.

Top : Formun ekranın ne kadar üstünde yer olacağının belirlendiği özellik.

Font : Formlara yazılacak yazıların fontlarının belirlendiği özellik.

BackColor: Formun zemin renginin belirlendiği özellik.

ScaleMode : Formda kullanılan ölçü birimini belirtir.Varsayılan ölçü birimi Twip'dir.Kullanılabilecek ölçü birimleri ise;

1- Twip
2- Point
3- Pixel
4- Character
5- Inch
6- Millimeter
7- Centimeter

MousePointer: Form üzerindeki fare işaretçisinin şeklini belirler.

Enabled : Formların kullanılabir olup olmamasının belirlendiği özellik.Eğer bu özellik bir form için false ise o form proje içerisinde kullanılamaz.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:48:28
MDI formlar (İçinde birden çok pencere bulunan formlar)

MDI ÖZELLİKLİ FORMLAR

Visual Basic uygulamaları dahilinde aynı anda birden fazla pencereyi açık tutma imkanı vardır.Gerektiğinde aynı anda birden fazla pencereyi açık tutmaya imkan vermek için şimdiye kadar projelerde kullanılan formlardan farklı olarak MDI (Multiple Document Interface)adı verilen çoklu formlar kullanılır.Üzerinde çalıştığınız projeye MDI özellikli bir form eklemek istiyorsanız Project menüsünden Add MDI Form komutunu vermelisiniz.Bu komutu verirseniz projeye" MDIForm1 " adında MDI özellikli bir form eklenir.

MDI özellikli form projede tek başına yer alabileceği gibi çok sayıda alt form(Child)da içerebilir.Diğer taraftan bir projede yalnızca bir tek MDI özellikli form bulunabilir.Üzerinde çalıştığınız projeye MDI özellikli bir form dahil ettikten sonra Project menüsündeki Add MDI Form komutu kullanılamaz duruma gelir.Buna göre projelerde yalnızca bir mdı özellikli form bulunabilir.
Üzerinde çalıştığınız projeye MDI özellikli bir form ekledikten sonra istediğiniz sayıda alt formu başka bir deyişle Child formu projeye dahil edebilirsiniz.Ayrıca projedeki normal formların sonradan Child özellikli form olmalarını sağlayabilirsiniz.Projede MDI özellikli form yokken bu özelliğe mantıksal True değeri aktarılıp proje çalıştırılacak olunursa hata meydana gelir..

Projedeki MDI özellikli forma alt formlar dahil etmek için Project menüsünden Add Form komutu ile yeni form dahil edilip bu formun Child Form olması sağlanır veya projedeki mevcut formlara Child özelliği verilir.

Örneğin,üzerinde çalışılan projede biri normal form ve 2 adet alt formu olan bir MDI formun olması istensin.Bu durumda proje oluşturulduğu sırada projeye otomatik olarak normal bir form eklendiği için önce Project menüsündeki Add MDI F orm komutu ile projeye MDI özellikli bir form eklenir.Daha sonra alt(child)form olarak kullanılmak üzere iki adet normal form daha projeye dahil edilir.

Proje penceresinde formların ikonlarına bakarak hangi formun normal,hangisinin MDI veya alt(child)form olduğunu anlamanız mümkündür.Bu ilk formun dışında kalan formları aktif duruma getirmek için formların belleğe yüklenilmesi ve gösterilmesi gerekir.Aşağıdaki örnekteform otomatik olarak yüklenecektir.MDI özellikli formu belleğe yüklemek için formun herhangibir yordamına MDI formun yüklenmesini sağlayacak program satırının eklenmesi gerekir.

Private Sub Form_Load()
MDIForm1.sHOW
End Sub


Bu program satırı ile projenin başlangıç formu olan formun be3lleğe yüklenilmesi biter bitmez MDI özellikli form Show metodu ile belleğe yüklenip aktive edilir.Forma ait Form_Load yordamı bu şekilde düzenlenip proje çalıştırılır.




MDI FORMLARIN ÖZELLİKLERİ

Windows ve Windows uyumlu programların pencerelerine dahil edilen alt pencere veya bilgiler pencereye sığmıyorsa,pencerenin sağ kenarına otomatik olarak düşey ve yatay kaydırma çubukları eklenir.Bazen durum MDI özellikli pencereler içinde geçerlidir.MDI özellikli pencereye dahil edilen pencerelerin(childform)boyutları çalışma alanında değiştirilip,alt pencerelerden birinin pencereye sığmaması halinde,MDI özellikli formlara kaydırma çubuklarının gerektiğinde eklenmesini istemiyorsanız,Properties penceresinde MDI özellikli formun özellikleri varken ScroolBars özelliğine False değerini aktarmalısınız.

Bütün alt formlar MDI formun çalışma alanını kullanırlar.Bu nedenle onların hareketi MDI form alanı ile kısıtlıdır.Bir alt form simgeleştirildiğinde simgesi MDI form içinde görünür.MDI form simgeleştirildiğinde ise görev çubuğunda görülür.MDI formun simgeleşmesi ve tekrar açılması durumunda alt formlar eski durumunda görülürler.Bir alt form(child form)ekranı kapladığında onun Caption(başlık)bilgisi MDI formun başlığı olur.

AutoShowChildren özelliği ile alt formlar yüklendiklerinde otomatik olarak gösterilirler yada gösterilmezler.AutoShowChildren =True yada False olarak düzenlenirler.Aktif alt formun menü çubuğu varsa bu menü çubuğu MDI formun menü çubuğu olur.



MDI UYGULAMALAR İÇİN MENÜ YARATMAK

MDI uygulamalarda MDI form ve child formlar için ayrı ayrı menü çubukları yaratılabilir.MDI formlar üzerinde komut düğmesi gibi kontroller kullanılmadığı için işlemler genellikle menü çubuğu aracılığıyla yapılır.Aktifleşen bir alt form eğer bir menü çubuğuna sahipse o menü MDI formun menü çubuğu haline gelir.Böylece MDI form taşıyıcılık görevinin yanısıra açılan alt formun işlemlerininde yapılmasını da sağlar.


MDI UYGULAMALARDA MENÜ KULLANIMI

MDI uygulamalarda da menü hazırlama işlemleri normal uygulamalarda olduğu gibi gerçekleştirilir.MDI uygulamamızda iki alt pencere olduğunu ve bunlara birer menü eklemek istediğimizi düşünelim.Ayrıca MDI formumuzun da bir menüsü olmasını istiyoruz.Bu durumda tasarım aşamasında yapılacak işlemler şöyledir:
- Menü hazırlanacak formu aktif hale getir.Burada önce hantgi forma menü hazırlanacağı önemli değildir.İşlem istenilen sırada gerçekleştirilebilir.Yaptığınız işlemi korumak için Save yapınız.Uygulamayı çalıştır.
- Uygulamayı çalıştırdıktan sonra görüntüye gelen penceredeki menü çubuğuna bak.Burada MDI formu için hazırladığınız menü adımlarını göreceksiniz.Ancak diğer pencerelerde herhangibir menü görüntüsü olmadığını farkedeceksiniz.Alt pencereden herhangibirini,menü hazırladığınız birini seçip aktif vhale getirin.MDI forma ait menü adımlarının kaybolduğunu,yerine bu pencere için hazırladığınız menü seçeneklerinin yerleştiğini göreceksiniz.Doğal olarak bu durum,menü adımları düzenlenmiş bir alt pencere için geçerli olacaktır.Eğer seçilip aktifleşen alt pencereye ait bir menü hazırlanmamışsa,MDI forma ait menü seçenekleri görüntülenmeye devam edecektir.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:49:22
Picturebox

Picturebox ve Image

Görüntü denetimleri resim gösterme işlemlerinde kullanılırlar. Resim denetime oranla daha az hazfıza tüketir. Image'lar içerisinde *.Bmp, *.Ico, *.Wmf, *.Jpg, ve *.Gif dosyaları görüntülenebilir.

PictureBox

Resim kutuları genellikle grafikleri (örneğin bmp, jpg, gif ) görüntülemek için kullanılır. Görüntü denetimleri ile çok benzerdirler. Aralarında çok az farklılık vardır. Eğer sadece bir resim göstermek isteniyorsa görüntü kutusu daha iyi bir seçimdir. Graifiği form üzerinde taşımayı düşünüyorsak resim kutuları daha esnektir. Resim kutuları içerisine çizim yapabiliriz. PictureBox Nesnesi : PictureBox nesnesi program içerisinde resimsel veya grafiksel konumların yer almasını sağlar. Örneğin; kişi, adı ve soyadını girdikten sonra resmini programını eklemek ister ise bu nesnenin kullanılması gerekir. En azından bu nesne ile ihtiyacını görür


AutoSize
Resim kutusuna bir resim yerleştirildiğinde normal boyutlarda gösterilir. Eğer resim, resim kutusundan büyük ise resim kırpılır. Bu özelliğin değerini True yaparsak resim kutusu boyutlarını grafiğe uyacak şekilde ayarlamasını sağlar.
Picture
Resim kutusu içerisinde gösterilen resim bu özellikle belirlenir. Hem tasarım modunda hemde çalışma modunda kullanılabilir.
Image
Bu özellik sadece çalışma modunda kullanılabilir. Resim kutusu içerisinde gösterilen resmi başka bir Resim kutusu içerisine kopyalarken kullanılabilir.

Picture2.Picture=Piture1.Image
LoadPicture

Bu metot çalışma kipinde resim kutusuna resim yükletmek için kullanılır.
Picture1.Picture=LoadPicture(dosya adı) ‘Bu kod dosya adı verilen resmi görüntüler
Picture1.Picture=LoadPicture( ) ‘Bu kod ise resim kutusu içerisini boşaltır.
Picture
Bu özelliği araçılığı ile resim eklenebilir.
Stretch
Bu özellik False ise resmin boyutlarını alır. Eğer özellik True olursa resim denetimin boyutlarına ayak uydurur.

Picture1.appearance : Picture Nesnesinin 3D veya normal çerçeve görünüşünde olmasını ayarlar.
Picture1.borderstyle : Bu değer Picture nesnesinin çerçeve çizgilerini gösterir ve gizle
Picture1.picture : Picture nesnesi içerisindeki reisimin ne olacağını ayarlar
Picture1.autoredraw : Picture nesnesinin taşıma esnasında ve form yenilendiğinde otomatik yenilenip yenilenmeyeceğini yarlar. Eğer picture nesnesi içerisindeki resminiz bazı durumlarda bozuk görünüyorsa bu değeri değiştirmeniz gerekir.





PİCTUREBOX KAYNAK: http://www.ceturk.com/dersoku.asp
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:50:16
Label (Etiket nesnesi)

VISUAL BASIC --- LABEL KONTROL
Label kullanıcının direk kontrol edemeyeceği bilgiyi gösterir.Bu genellikle diğer kontrollere başlıklar sağlamak üzere kullanılır veya bazı bilgisayar işlemlerinin sonuçlarını göstermek üzere kullanılır. Label kontrolü araç kutusu içerisinden seçilir


Bir label yaratmak için label kontrol, visual basic komponentleri menüsünden seçilmelidir.

ÖZELLİKLER:

Name: Label'ı tanımlamak üzere verilen isim.Etiket isimleri için kullanılan ve üç harften oluşan örnek lbl dir.

Caption: Metin ve etiket içinde görünür.

BackColor: Etiket'in artalan(geri plan) rengini düzenler

BorderStyle: Label sınırlarının tipini düzenler.

Alignment: Caption metninin sola yaslı,sağa yaslı veya ortada olmasını belirleyen özelliktir(Hizalama).

Font: Caption metninin stil,boyut ve tipini düzenler.

ForeColor: Caption metninin rengini düzenler

Left: Formun sol kenarından,etiketin sol kenarına kadar olan uzaklık.

Top: Formun üst noktasından etiketin üst noktasına kadar olan uzaklık.

Width: Twip birimi ile etiketin gelişliği.

Height: Twip birimi ile etiketin yüksekliği.

Visible: Çalışır modda etiketin form üzerinde görünüp görünmemesini belirler.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:51:34
Frame (Çerçeve nesnesi)

Frame Control For Visual Basic 6.0

Visual basic 6.0 frame kontrol tek başına değil, diğer kontrolleri gruplamak için kullanılır.
Kontrolleri groupBox kontrol ile gruplamanın birçok avantajı vardır.
Frame OptionButton ( Seçenek düğmesi ) kontrollerini gruplamak için kullanılır. Ayrıca Frame, kontrolleri sadece bazı şartlarda gösterilmesi gereken kontrolleri de bir arada tutarak bunların kolayca gizlenip/gösterilmesini sağlarlar

Option1.Value = True şeklinde yazılır.


Forumda belli kategorideki anlamca bütünlük gösteren nesneleri bunun üzerine yerleştirebilirsiniz. Caption özelliği ile Frame1 yazısını değiştirebilirsiniz. Bu arada form üzerindeki nesneleri kutunun üstüne alacaksanız mutlaka kopyala-yapıştır yöntemini kullanın. Bize sağladığı kolaylık bu nesneleri sadece Frame ile taşıyabilmemizdir.. (Yani kutuyu taşırsak kutu içindeki nesnelerde taşınacaktır..)

Özellikle birkaç kontrolü birden görünür veya görünmez yapmak için hepsinin Visable özelliğini tek tek değiştirmek yerine çerçevenin Visable özelliği değiştirilerek çerçeve içindeki tüm kontroller aynı anda görünmez yapılabilir. Aynı durum taşıma için de geçerlidir her birini tek tek taşımak yerine, çerçeve taşınır. Çerçevelerin buna benzer birçok faydaları vardır. Özellikle OptionButton'ların kullanılmasında çerçeve kullanmak zorunlu hale gelebilir.

Form üzerine yerleştirilmiş bir kontrolü taşıyarak bir Frame kontrolü üzerine getirmekle o kontrol gruplanmış olmaz. Frame kontrolü içerisine bir kontrol yerleştirirken önce Frame kutusunu seçin.Eğer zaten form üzerine yerleştirilmiş bulunan kontrolleri Frame kontrolü içine almak istiyorsanız o zaman form üzerindeki kontrolleri kesin (cut) ve Frame kontrolünü seçtikten sonra buraya yapıştırın (paste).



Frame Properties

Appearance Flatstyle Görünüş
BackColor Arka Plan Rengi
Borderstyle Tablo sitili
Caption Metin
ClipControls Yeni yürütme kullanıcı için grafik
Font Metin tipi seçmek için kullanılır
Font size Yazı büyüklüğü
Height Yükseklik
İndex Kullanıcı için kontrol sağlar
MauseIcon Özel mause pointeri kurmak
MausePointer İmleç
Parent Yöntem metodu
TolTipText Bileşen
Top Üst anlamına gelir.Nesnenim marj ayarlarında kullanılabilir.
Width Genişlik anlamına gelir.Nesneye genişlik vermek için kullanılır.



Frame Methods

Drag Sürükleme
Move Hareket ettirme
OLEDrag
Show Whats This
ZOrder
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:52:29
Checkbox (Kontrol Kutusu)

KONTROL KUTUSU (CHECKBOX)


Kontrol kutusu, açma ya da kapama gibi ya da seçme ve iptal gibi ikili bir kontrole ihtiyaç duyulan uygulamalarda kullanılır. Kullanıcı , belirtilen seçeneği seçerse, kutu içinde bir işaret sembolü görüntülenir. Kullanıcıya Evet/Hayır gibi seçenekler vermek için kullanılır.
Properties (Özellik)

Aligment :

O değeri için Check işareti solda,1 değeri için işaret sağdadır.

Value :

İkisi kullanıcı tarafından değiştirilebilen üç değer almaktadır.
0 değeri için Checkbox işaretsiz
1 değeri için Checkbox işaretli
2 değeri için Checkbox belirsiz olarak karşımıza çıkar.

İlk iki değer kullanıcı tarafından kontrol tıklanarak değiştirilebilir.Üçüncü değer ise belirsizlik durumunu gösterir ve program tarafından bu durum aktif hale getirilebilir.Belirsizlik Value özelliğinin 2 olması ile ilgili değildir.Sadece o kontrolün ifade ettiği değerin belirsiz olduğunu gösterir.Örneğin;Checkbox'ın bir metnin kalın olup olmadığını temsil ettiğini düşünürsek metnin tamamı kalın ise işaretli,tamamı kalın değil ise işaretsiz ve bir kısmı kalın bir kısmı kalın değilse belirsiz olması gerekir.

Events (olay) :

Click Olayı : Kullanıcı tarafından CheckBox nesnesinin seçilme durumunun değiştirilmesiyle gerçekleşir.

Örneğin : Yapılan satışa %10 veya %15 KDV'nin dahil edilip edilmeyeceğini Checkbox kontrolü kullanarak gerçekleştirelim.

Private Sub Check1_Click()
Text3.Text = Val(Text2)+(Val(Text2)*10)/100
End Sub
Private Sub Check2_Click()
Text3.Text = Val(Text2)+(Val(Text2)*15)/100
End Sub

Onay Kutusunun Özellikleri

Aşağıdaki onay kutusu denetiminin özelliklerini içeriyor.
Alignment: Nesne içerisindeki yazının sola,sağa veya ortaya yazılmasını sağlar.
Appeance : Form üzerinde yerleştirilmiş kontrol nesnelerinin 3 boyutlu görünmesini sağlar.
Backcolor : Form penceresinin zemin rengini belirtmek istenildiğinde kullanılır.
Caption : Caption özelliği ile form başlığı değiştirilir.
Container : Yer belirleme.
DataChanged : Veri değişimi
DataField : Veri alanı
DataFormat : Veri formatı
DataMember : Veri üyesi
DataSource : Veri kaynağı
DownPicture : Komut düğmesine basılı iken gösterilecek resmi belirtmemizi sağlar.
DisablePicture : Özelliği ile belirlenen resim pozitif iken gösterilecek resim.
DragIcon : Nesneyi Mouse ile taşırken alacağı şekli belirten ikondur.
DragMode : Sürükle ve bırak işleminin el ile mi yoksa otomatik olarak mı yapılacağını ayarlar.
Enabled : True özelliği ile form ile ilgili bütün özelliklere duyarlılık sağlar.False ile program run edildiğinde hiçbir özellik aktif halde olmaz.
Font : Form üzerinde yazı tipi değiştirilebilir.
FontBold : True ise nesne için kullanılan yazıyı koyu yapar.
FontItalic : True ise nesne için kullanılan yazıyı eğik yapar.
FontName : Nesne için kullanılan yazının fontunu belirler.
FontSize : Nesne için kullanılan yazının puntosunu belirler.
FontStrikethru : True ise nesne için kullanılan yazının ortasını çizer.
FontUnderline : True ise nesne için kullanılan yazının altını çizer.
ForeColor : Form'un ön plan rengini belirler.
Height : Form'un yüksekliğini arttırır ve azaltır.
HelpContext ID : Kontrolle ilgili yardım dosyasındaki konu numarası bu özellik ile belirlenir.
HideSelection : Bilgiyi seçip saklamak.
H Wind : Nesneye referans gösteren handle'ı içerir.
Index : Parçalara bölünmüş resmin hangi parçalara bölüneceğini gösterir.
Left : Formun sol kenar ile ekran arasındaki mesafeyi belirler.
MaskColor : Renk maskesi
MousePointer : Programın çalışması esnasında Mouse göstergesinin şeklinin değişmesini sağlar.16 seçenek vardır.
MouseIcon : Mouse pointer'de ayarlanan 16 Mouse göstergesi halinde hazır olan değer Mouse ikonlarını değiştirir
Name : Yazılacak kod için formun adını değiştirmemizi sağlar.
OleDragMode : Taşıma işleminin nasıl yapılacağını belirler.
Parent : Nesnenin hangi nesne üzerinde bulunduğunu veya hangi nesneye bağlı olduğunu gösterir.
Picture : Kullanılacak resim dosyası.
TabIndex : Nesnenin tab tuşu değişimlerinde kaçıncı sırada olduğunu belirler.
TabStop : Nesnenin tab tuşu sektirmelerine dahil olup olmadığını belirtir.
ToolTipText : Bir nesnenin üzerinde Mouse ile bekleyince çıkan sarı zeminli yazının ne olacağını belirler.
Top : Formun üst kenarları ile ekran arasındaki mesafeyi belirler.
Value : Nesneye ait seçili veri tipi ile ilgili değeri içerir.
Visible : Formun çalışma esnasında ekranda görünüp görünmemesini sağladığımız True/False'den oluşan bölümdür.
Width : Nesnenin genişliğini sağlar.

Checkbox Olayları
Click : Nesne üzerine fare ile tıklamak.
DragDrop : Sürükle ve bırak işleminin tamamlanmasıyla ortaya çıkan olaydır.
DragOver : Sürükle ve bırak devam ederken ortaya çıkar.
GotFocus: Nesnenin kullanıcı tarafından seçilmesi yada etkin hale dönüştürülmesidir.
KeyDown : Bir tuşa basılması
KeyPress : Bir tuşa basılıp çekilmesi
KeyUp : Basılı olan bir tuşun bırakılması
LastFocus : Got focusun tersi yani,nesnenin pozitif duruma geçmesi
MouseDown : Fare düğmesine basılması
MouseMove : Farenin nesne üzerinde gezinmesi
MouseUp : Basılı olan fare düğmesinin bırakılması
OleCompleteDrag : Drag drop işlemi tamamlandığında veya iptal edildiğinde bu olay meydana gelir.
OleDragDrop : Ole drop mode özelliğine manual verilmişse bırakma işlemi gerçekleştiğinde bu olay meydana gelir.
OleDragOver : Ole drop mode özelliğine manual verilmişse sürükleme işlemi gerçekleştirilirken bu olay meydana gelir.
OleGiveFeedBack : Bu olay ole kaynağının sürükle ve bırak işlemi esnasında fare şeklinin değişmesi gerektiği durumlarda meydana gelir.
OleStartDrag : Sürükleme işlemi başladığında bu olay meydana gelir.

CheckBox - Yöntemler

Drag : Sürükle ve bırak işleminin başlamasını,bitmesini yada iptal edilmesini sağlar.
Move : Herhangi bir nesnenin ekran üzerine taşınmasını sağlar.
Refresh : Nesnenin hem içerik hem de görünüş açısından güncelleşmesini sağlar.
SetFocus : Nesnenin etkin konum özelliğine sahip olmasını sağlar.

Seçenek düğmeleri gibi,onay kutusu denetiminin yöntemleri de bu denetimin işlemesi için önemsizdir.Onay kutusu denetiminin işlevini test etmek isterseniz
Controls uygulamasına başlatarak Checkbox düğmesine tıklayın.Checkbox Example iletişim kutusunun üst taraftaki metin kutusunu kullanan iki onay kutusu vardır.
Bold onay kutusunun işaretlenmesi kutu içindeki metni kalın kipe italik kutusu da yatık kipe geçirir.Aşağıdaki yordamda bu metin kutusunun FontBold özelliğinin değerinin Click() olayında nasıl değiştirildiğini görebilirsiniz.

Private Sub ChkBold_Click()
'The Click Event Occurs When The Checkbox Changes State.
'Value Properti Indicates The New State Of The Checkbox,
If ChkBold.Value = 1 Then ' If Checked.
TxtDisplay.FontBold = True
Else ' If Not Checked.
TxtDisplay.FontBold = False
End If
End Sub.

Checkbox:
• Appearance: Checkbox tik koyulan şekilde mi yoksa buton halinde mi olsun?
• Checked: Program çalıştırıldığında seçili mi başlasın?
• CheckState: Checkbox'ın durumunu belirtebiliyorsunuz. Tikli, tiksiz ya da gizli...
• RightToLeft: Check kutusu sağda mı olsun?
• ThreeState: Boşluğa her tıkladığımızda tikli, tiksiz ya da gizli olsun mu?
Checkedlistbox:
CheckedListBox, listbox ile checkbox'ın birleşiminden oluşmuştur.
• CheckOnClick: O boşluğa tıklamadan, o yazının üzerine tıklandığında da seçilmesini sağlıyor.
• HorizontalScrollBar: Yazılar çok uzun ise okumak için sağa çekmek amacıyla scrollbar koyar.
• Items: İşte en önemli seçenek bence. Buradan maddeleri yazıyoruz.
• Sorted: İçeriğine yazdığınız tüm maddeleri(items) alfabetik olarak sıraya dizer.

ONAY KUTUSU DENETİMLERİNİ DENEYELİM

Onay kutusunun her üç durumunda da nasıl çalıştığını görmek için bu örneği deneyin.

1. File →New Project → Standard EXE komutunu vererek yeni bir proje açın,
2. Properties penceresinde form1'in name özelliğinin değerine FrmMain yapın.
3. Bu form'a bir onay kutusu denetimi ekleyin.Bunun Name özelliğinin değerine ChkOptions,Caption özelliğinin değerini de herhangi bir isim yazın.
4. ChkOptions'ı çift tıklayarak Code penceresini açın.Ve açılır listelerinden (General) (Declarations)seçeneklerini işaretleyin.Aşağıdaki kodu ekleyin.

Public PeanutButter As Boolean
Public Jelly As Boolean

5. Aşağıdaki kodu ChkOptions'ın MouseUp olayına ekleyin.
Private Sub ChkOptions_MouseUp(Button As Integer' Shift As
Integer,X As Single, Y As Single)
FrmOptions.Show VbModal
If PeanutButter And Jelly Then
ChkOptions.Value = 1
Exit Sub
End If
If PeanutButter Or Jelly Then
ChkOptions.Value = 2
Exit Sub
End If
If Not PeanutButter And Not Jelly Then
ChkOptions.Value=0
Exit Sub
End If
End Sub

6. Project Explorer'ı sağ tıklayarak açılan mönüden ADD →form komutunu verin.ADD form iletişim kutusunda form seçeneğini işaretleyin.
7. Properties penceresinde bu yeni formun Name özelliğinin değerini FrmOptions yapın.Caption özelliğinin değerini PeanutButter yapın.
8. FormOptions'a bir onay kutusu denetimi ekleyin.Bunun Name özelliğinin değerini ChkPeanutButter,Caption özelliğinin değerini PeanutButter yapın.
9. Bir onay kutusu denetimi daha ekleyin.Bunun Nane özelliğinin değerini ChkJelly,Caption özelliğinin değerini Jelly yapın.
10. FormOptions'ı çift tıklayarak Code penceresini açın.Formun Load() olayına.Aşağıdaki kodu ekleyin.

Private Sub Form_Load()
If frmMain.PeanutButter Then
ChkPeanutButter.Value = 1
Else
ChkPeanutButter.Value = 0
End If
If frmmain.Jelly Then
ChkJelly.Value=1
Else
ChkJelly.Value=0
End If
End Sub

11. Aşağıdaki kodu ChkPeanutButter'ın Click()olayına ekleyin:
Private Sub ChkPeanutButter_Click()
If ChkPeanutButter.Value=1 Then
FrmMain.PeanutButter =True
Else
Frmmain.PeanutButter=False
End If
End Sub

12. Aşağıdaki kodu ChkJelly'nin Click()olayına ekleyin:
Private Sub ChkJelly_Click()
If. ChkJelly.Value=1 Then
FrmMain. Chkjelly=True
else
FrmMain. Chkjelly=False
End If
End Sub
13. Run→Start komutunu vererek uygulamanızı çalıştırın.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:53:36
Listbox (Liste Kutusu)

Listbox Nesneleri

Birçok elemanı liste biçiminde göstermek için kullanılır

ListBox : Arayüz içinde basit anlamda (tek sütun) listeleri görüntülemekte kullanılan nesnelerdir. ListBox nesnesi içindeki liste elemanları ekrana sığmayacak kadar fazlaysa ListBox nesnesinin sağ tarafında düşey bir kaydırma çubuğu belirir ve bu sayede listenin bütün elemanları görüntülenebilir. Kullanıcı ListBox nesnesindeki bir elemanı seçebileceği gibi duruma göre birden fazla elemanı seçmesi de istenebirilir. ListBox nesnesinin en önemli metodları ve özellikleri aşağıda listelenmiştir. Ayrıca liste elemanlarının görünmeyen bir değerleri vardır. Görünen değer bir String değerdir fakat görünmeyen değer bir Long değerdir.

Özellikleri
ListIndex : Tek seçimli modda seçili olan liste elemanının, çoklu seçim modunda en son seçilen liste elemanının index numarasını saklar. Türü Integer'dır. 1. Liste elemanının ListIndex değeri 0'dır. n. elemanın ListIndex değeri n-1 dir.
ListCount : Liste elemanlarının sayısını verir. Türü Integer'dır.
Text : Seçili Liste elemanın görünen liste değerini verir ve değiştirir. Türü String'dir.
ItemData([ListIndex]) : ListIndex değeri ile belirtilen liste elemanının görünmeyen değerini verir ve değiştirir. Türü Long'dur.
Selected([ListIndex]) : ListIndex değeri ile belirtilen liste elemanın seçli olup olmadığını belirtir ve atar. Türü Boolean'dır.
Sorted : Liste elemanlarının görünen değerlerine göre sıralanıp sıralanmayacağını belirtildiği özelliktir. Türü Boolean'dır.
List([ListIndex]) : ListIndex değeri ile belirtilen liste elemanının görünen değerini verir ve değiştirir.
MultiSelect : Kullanıcının liste içinde birden fazla kayıt seçip seçemeyeceğini belirtildiği özelliktir. Türü Integer'dır.



Metodları
Clear : Liste içindeki bütün elemanları silen metoddur.
ListBox1.Clear
AddItem [Görünen Değer] : Görünen değeri parametre olarak alan bu metod ile listeye eleman eklenir.
ListBox1.AddItem "Visual Basic"
Refresh : Listenin ekran görüntüsünü güncelleyen metoddur.
ListBox1.Refresh
RemoveItem([ListIndex]) : ListIndex ile belirtilen liste elemanını listeden siler.
ListBox1.Remove(0)
ListBox'a veri ekleme prosedürü

Öncelikle yeni bir proje açın ve 1 adet commandbuton, 1 adet textbox ve 1 adet listbox ekleyin. Aşağıdaki kodları kullanabilirsiniz.

Private Sub Command1_Click()
If EkleListBox(Text1, List1) = True Then
Call MsgBox("Veri eklendi.", vbOKOnly, "Cheet@H")
Else
Call MsgBox("Veri daha önceden eklenmiş!", vbCritical, "Cheet@H")
End If
End Sub

Public Function EkleListBox(ByVal Veri As String, ByVal Obje As Object) As Boolean
Dim Yi&
Veri = Trim(Veri)
For Yi = 1 To Obje.ListCount
If Veri = Obje.List(Yi - 1) Then
EkleListBox = False
Exit Function
End If
Next
Obje.AddItem Veri
EkleListBox = True
End Function


'EkleListBox' Fonksiyonun açıklaması: Fonksiyona iki değer yollanıp boolean bir değer ya 'True' ya da 'False' döndürmesi bekleniyor. Veri değeri listbox objesine eklenmek istenen değeri Obje ise eklenecek listbox (bu comboboxta olabilir) ismini simgeliyor. Eğer 'Veri' değeri objede var ise fonksiyona false atanıp çıkılıyor. Listbox ta tüm değerlere bakılıp veri değeri bulunamadı ise fonksiyona true değeri atanıp listbox a o değer ekleniyor.

Listbox'a bir text dosyasi içerigi nasıl yüklenir?

Private Sub Command1_Click()
Dim BulunanKelimeler As String
Open "C:\test.txt" For Input As #1
List1.Clear
While Not EOF(1)
Input #1, StringHold
List1.AddItem BulunanKelimeler
Wend
Close #1
End Sub

Listbox'a aralıklı (tab) öğeler ekleyin
Listbox'ın TabWidth özelliğini 100 olarak girin. Bu aradaki boşluğu belirtir. Daha Sonra eklemek istediğiniz öğeler arasına ^I (Tab karakteri) koyarak öğeleri ekleyin.
Listbox1.Items.Add ('Bir'^I'İki'^I'Üç');

CHECKEDLISTBOX:
CheckedListBox, listbox ile checkboxın birleşiminden oluşmuştur.

• CheckOnClick: Oboşluğa tıklamadan, o yazının üzerine tıklandığında da seçilmesini sağlıyor.
• HorizontalScrollBar: Yazılar çok uzun ise okumak için sağa çekmek amacıyla scrollbar koyar.
• Items: İşte en önemli seçenek bence. Buradan maddeleri yazıyoruz.
• Sorted: İçeriğine yazdığınız tüm maddeleri(items) alfabetik olarak sıraya dizer.
LİSTBOX:
• Items: Buradan maddeleri yazıyoruz.
• SelectionMode: Birden fazla seçime izin vermeye yarıyor.


Appeance
BackColor
CausesValidation
Columns
Container
DataChanged
DataField
DataFormat
DataMember
DataSource
DragIcon
DragMode
Enabled Font
FontBold
FontItalıc
FontName
FontSize
FontStrikethru
FontUnderline
ForeColor
Height
HelpContextID
HideSelection
HWnd
Index
IntegralHeight ItemData
Left
List
ListCount
ListIndex
ListItem
MouseIcon
MousePointer
MultiSelect
Name
NewIndex
OleDragMode
Parent
RightToLeft SelCount
Selected
Sorted
Style
TabIndex
TabStop
Tag
Text
ToolTipText
Top
TopIndex
Visible
WhatsThisHelpID
Width
ListBox - Özellikler
















Columns : Sütun sayısı ( 0 - 1 sütün, 1 - 2 sütun )
IntegralHeight : ListBox boyutun font büyüklüğüne göre
ayarlanması
List : Dizi değişken. ListBox'da yer alan
elemanlar
ListCount : ListBox'daki elemansayısı
ListIndex : Seçili elemanın sıra numarası
ListItem : Listede seçili olan elemanın sırası (-1 0
İlk eleman seçili)Seçim yok,
MultiSelect : Aynı anda birden fazla seçim yapılıp
yapılamayacağı
SelCount : Seçili eleman sayısı
Selected : Seçilmesi istenen eleman
Sorted : ListBox içerisinde sıralama yapılıp
yapılmayacağı
Style : ListBox'un stili


ListBox - Olaylar


Click
DblClick
DragDrop
DragOver
GotFocus ItemCheck KeyDown
KeyPress
LostFocus
MouseDown MouseMove
MouseUp
OleCompleteDrag
OleDragDrop
OleDragOver OleGiveFeedBack
OleSetData
OleStartDrag
Scroll
Validate





ListBox - Yöntemler

AddItem
Clear
Drag Move
NewIndex
Refresh RemoveItem
SetFocus
ShowWhatsThis TopIndex
ZOrder

AddItem : Listeye ekleme
Clear : Listenin tamamının silme
NewIndex : Listeye eklenen son elemanın indeks
numarası
RemoveItem : Listeden silme
TopIndex : Görülen en üstteki elemanın indeks
numarası


Text Dosya İçeriğini ListBox'a Eklemek

Private Sub Command1_Click()
Dim Eklenecek As String
Open "c:\sil.txt" For Input As #1
List1.Clear
While Not EOF(1)
Input #1, Eklenecek
List1.AddItem Eklenecek
Wend
List1.Refresh
Close #1
End Sub

TextBox İçeriğini ListBox'a Eklemek

(General)(Declaration)
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Const EM_GETLINECOUNT = &HBA
Const EM_GETLINE = &HC4

Private Sub Command1_Click()
Dim lCount As Long, l As Long, i As Integer, k As Long, a$
lCount = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0, ByVal 0)
If lCount = 0 Then Exit Sub
ReDim aLines(1 To lCount) As String
i = 512
a$ = Space$(512)
List1.Clear
For l = 0 To lCount - 1
Call CopyMemory(ByVal a$, i, 2)
k = SendMessage(Text1.hwnd, EM_GETLINE, l, ByVal a$)
aLines(l + 1) = Left$(a$, k)
List1.AddItem aLines(l + 1)
Next End Sub
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:54:36
Scrollbar (Kaydırma Çubuğu)

Scrollbar Denetimi

Bu denetim, kullanıcının yatay veya dikey olarak bir uygulama veya denetim içinde hareket etmesini sağlayarak birçok seçenekten veya çok miktarda bilgiden oluşan bir grup içinde kolayca gezinmesini kolaylaştırır. Bir Scrollbar denetimi aynı zamanda mevcut durumun analog olarak sunumunu sağlar.
Sözdizimi

HScrollBar
VScrollBar

Scrollbar denetimi aşağıdaki özellikleri destekler.

• Container
• Parent
• Enabled
• SmallChange
• Height
• TabIndex
• HWnd
• TabStop
• LargeChange
• Tag
• Left
• Top
• Max
• Value
• Min
• Visible
• Name
• Width

Scrollbar denetimi aşağıdaki yöntemleri destekler:

• Move
• Refresh
•SetFocus
• ZOrder

Scrollbar denetimi aşağıdaki olayları destekler:

• Change
• GotFocus
• KeyDown
• KeyPress
• KeyUp
• LostFocus
• Scroll

Açıklamalar

Bir scroll çubuğunu hız ya da miktarın bir göstergesi veya bir girdi aygıtı gibi kullanabilirsiniz. Örneğin, bir bilgisayar oyununun sesini kontrol etmek veya zamanlı bir işlemde geçen zamanı görmek gibi.
Scroll çubuğu kontrolleri, bazen "baş parmak" olarak adlandırılan, bir scroll kutusunun bir scroll çubuğu üzerindeki hareketini izlemek için Scroll ve Change olaylarını kullanır. Scroll olayını kullanmakla, sürüklenirken scroll çubuğu değerine erişim sağlanır. Kullanıcı scroll kutusunu bıraktığında veya scroll çubuğunu ya da scroll oklarını seçtiğinde Change olayı meydana gelir.

Value özelliği (default değeri 0 dır), scroll çubuğundaki scroll kutusunun konumuna karşılık gelen bir tam sayı değeridir. Scroll kutusu pozisyonu minimum değerde iken, en sol konuma (yatay scroll çubukları için) veya en üst konuma (dikey scroll çubukları için) hareket eder. Scroll kutusu en yüksek değerde iken, scroll kutusu en sağ veya en alt konuma hareket edecektir. Aynı şekilde dizinin alt ve üstü arasında tam ortada bulunan bir değer scroll kutusunu scroll çubuğunun ortasına yerleştirecektir.
Scroll çubuğunu miktar veya hız göstergesi ya da bir girdi aygıtı olarak kullanmak için, kontrol için uygun limitlere ayarlama amacıyla Max ve Min özelliklerini kullanınız. Scroll çubuğunun bilgileri azalan sırada göstermesini isterseniz, Min değeri Max değerinden daha büyük olabilir.
Bir scroll çubuğunda bildirilmesini istediğiniz değişim miktarını belirlemek için, scroll çubuğu içindeki alanı seçmek için LargeChange özelliğini, scroll çubuğunun uçlarındaki okları seçmek için SmallChange özelliğini kullanınız. Scroll çubuğunun Value özelliği, LargeChange ve SmallChange özellikleri için ayarlanmış değerlerle artar veya azalır. Yürütme sırasında Value değerini 0 ile 32,767 arasında ayarlayarak scroll çubuğunu konumlayabilirsiniz.


Özellikler:

Container
Bu özellik bir Form objesi üzerinde bir kontrol konteynırını seçer ve ayarlar.
Sözdizimi
object.Container [= container]
Enabled
Bu özellik bir form veya bir kontrolün kullanıcının yarattığı bir olaya yanıt verip veremeyeceğini saptayan bir değeri başa alır ve ayarlar.
Sözdizimi
object.Enabled [= Boolean]
Height
Bu özellik kontrollerin yüksekliğini seçer ve ayarlar.
Sözdizimi
object.Height [= number]
HWnd
Bu özellik bir form veya bir kontrolün elle kontrolünü sağlar.
Sözdizimi
object.HWnd
LargeChange
LargeChange özelliği, kullanıcı scroll kutusu ile scroll oku arasındaki bir alana tıkladığında, bir Scroll çubuğu kontrolündeki Value özelliği ayarındaki değişim miktarını seçer ve ayarlar.
Sözdizimi
object.LargeChange [= number]
Left Property
Bu özellik, bir objenin iç sol kenarı ile konteynırının sol kenarı arasındaki mesafeyi seçer ve ayarlar.
Sözdizimi
object.Left [= value]
Max
Bu özellik Font Common Dialog diyalog kutusunun Size listesi kutusunda ekrana gelen en büyük yazı karakterini seçer ve ayarlar. Max özelliği aynı zamanda, scroll kutusu en alt veya en sağ konumda iken, scroll çubuğu konumunun azami Value özelliği ayarını seçer ve ayarlar.
Sözdizimi
object.Max [= value]
Min
Bu özellik Font Common Dialog diyalog kutusunun Size listesi kutusunda ekrana gelen en küçük yazı karakterini seçer ve ayarlar. Min özelliği aynı zamanda, scroll kutusu en üst veya en sol konumda iken, scroll çubuğu konumunun en düşük Value özelliği ayarını seçer ve ayarlar.
Sözdizimi
object.Min [= value]
Name
Bu özellik bir form veya bir kontrolü tanımlamak için kodda kullanılan ismi seçer ve bir yazı karakteri objesini seçer ve ayarlar.
Sözdizimi
object.Name
Parent
Bu özellik içinde bir kontrol bulunan formu, objeyi veya koleksiyonu seçer.
Sözdizimi
object.Parent
SmallChange
Bu özellik kullanıcı bir scroll oku seçtiğinde, scroll çubuğu denetimindeki Value özelliği ayarındaki değişim miktarını seçer ve ayarlar.

Sözdizimi
object.SmallChange [= number]
TabIndex
Bu özellik tekrarların ve ayarların sıralı objelerin etiketleri sayesinde bağlı oldukları aile formuna katılmaları sağlanır.
Sözdizimi
object.TabIndex [= index]
TabStop
Bu özellik bir kullanıcının bir objeye odaklanmak için TAB tuşunu kullanıp kullanamayacağını gösteren bir değeri başa alır ve ayarlar.
Sözdizimi
object.TabStop [= Boolean]
Top
Bu özellik bir objenin iç üst kenarı ile konteynırının üst kenarı arasındaki mesafeyi geri alır ve ayarlar.
Sözdizimi
object.Top [= value]
Value
Bu özellik bir kontolün durumunu gösteren bir değeri geri alır ve ayarlar.
Sözdizimi
object.Value [= value]
Visible
Bu özellik bir objenin görünür mü yoksa gizli mi olduğunu belirten bir değeri geri alır ve ayarlar.
Sözdizimi
object.Visible [= Boolean]
Width
Bu özellik bir kontrol veya Formun genişliğini geri almak veya ayarlamak için bir kontrol konteynırının scala birimlerini kullanır.
Sözdizimi
object.Width [= number]
Methods
Move
Bu yöntem bir Form objesini veya kontrolü hareket ettirir.
Sözdizimi
object.Move left, [top], [width], [height]
Refresh
Bu yöntem bir Form objesinin veya kontrolün komple tekrar boyanmasını sağlar.
Sözdizimi
object.Refresh
SetFocus
Bu yöntem odak noktasını belirlenmiş bir kontrol veya forma hareket ettirir.
Sözdizimi
object.SetFocus
ZOrder
Bu yöntem zorder'ın önüne veya arkasına belli bir Form veya kontrol yerleştirir.
Sözdizimi
object.ZOrder position
Events
Change
Bu olay sizin ya da kullanıcının bir kontrolün özelliklerini değiştirdiğinde meydana gelir.
Sözdizimi
Private Sub intrinsic_Change( )
GotFocus
Bu olay bir objeye odaklanıldığında meydana gelir.
Sözdizimi
Private Sub object_GotFocus( )
KeyDown
Bu olay kullanıcı bir objeye odaklanıldığı zaman bir tuşa bastığında meydana gelir.
Sözdizimi
Private Sub object_KeyDown(keycode, shift)
KeyPress
Bu olay kullanıcı bir ANSI tuşuna basıp bıraktığında meydana gelir.
Sözdizimi
Private Sub object_KeyPress(keyascii)
KeyUp
Bu olay bir kullanıcı bir objeye odaklanıldığı zaman bir tuşu bıraktığında meydana gelir.
Sözdizimi
Private Sub object_KeyUp(keycode, shift)
LostFocus
Bu olay, bir kullanıcı bir eylem başlattığında veya SetFocus yöntemi kullanarak koddaki odağı değiştirdiğinizde bir obje odaklanmayı kaybettiğinde meydana gelir.
Sözdizimi
Private Sub object_LostFocus( )
Scroll (Intrinsic)
Bu olay bir kontrol üzerinde tekrar konumlandığınızda veya yatay ya da dikey olarak scroll kutusunu hareket ettirdiğinizde meydana gelir.
Sözdizimi
Private Sub control_Scroll( )
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:55:57
Timer (Zamanlayıcı)

TIMER NESNESİ

Timer(Zamanlayıcı)

Zaman saatidir.Zamanın takip edilmesini sağlar,zamanlayıcı denetimidir ve çalışma kipinde görülmezler.Programda zamana bağlı işlemler yapılabilmesini sağlayan bileşendir.Timer nesnesi,kullanıcının göremeyeceği fakat belirtilen zaman aralıklarında istenilen görevleri yerine getiren bir nesnedir.
Bu nesneyi örneğin,saat yapımında kullanabiliriz.Nesneden saat yapmasını bekleyemeyiz.Sadece 1 saniye zaman birimini bu nesne sayesinde kullanabiliriz.
Eğer işlerin zamana göre yapılmasını istiyorsak timer nesnesini kullanırız.Özellikler kısmındaki invertal ile kaç milisaniyede bir işlevin tekrar edileceğini ayarlayabiliriz.Uygulamanın çalışması esnasında,zamana bağlı olarak belirli aralıklarla,belirli eylemlerin gerçekleşmesini denetlemek için kullanılır.

Timer1.Interval = 1000 ' 1 saniyede 1 işlem yapılır
Timer1.Interval = 500 ' 0,5 saniyede bir işlem yapılır

TİMER NESNESİ ÖZELLİKLERİ

Timer nesnesinin önemli iki özelliği vardır.

Timer1.invertal= Zamanlamanın ne kadar olacağının ayarıdır.Yani,Timer denetiminin ne kadar aralıkla Timer olayını üreteceğini belirleriz.Milisaniye cinsinden bir değer yazarız.1 saniye için 1000 yazmalıyız.

Timer1.enabled= Timer denetiminin aktif veya pasif olacağını belirler.Yani,Bu değeri enable yaparsak etkin,disable yaparsak etkin dışı olur.

Zamanlayıcı denetiminin, aşağıda da görüldüğü gibi fazla özelliği yoktur

Enabled
Index
Interval
Left
Name
Parent
Tag
Top


Name özelliği hariç (bir tmr ön takısı tavsiye edilir), zamanlayıcı denetiminin önemli olan sadece iki özelliği vardır.Enabled ve Interval özellikleri.Gerçektende zamanlayıcının herhangi bir şey yapmasını sağlamak için (Enabled özelliğinin değerinin,başlangıç değeri olan True olduğunu var sayarsak) bu özelliklerin değerlerini ayarlamamız gerekir.Left ve Top özellikleri aslında gereksizdir.Bir zamanlayıcıyı bir form üzerinde nereye yerleştirdiğimiz pek fark etmez.

Interval özelliği mili saniye cinsinden ölçülür. Bu da saniyeleri saymak istediğimiz taktirde bu saniye sayısına 1000 ile çarpmamız gerektiği anlamına gelir.Bu süre geçtikten sonra (zamanlayıcı devrede ise),zamanlayıcı kendi TIMER olayını üretir.Bu işi de kısa aralıklarla sistem saatini kontrol ederek yapar.

TİMER OLAYLARI

Zamanlayıcı denetiminin sadece bir tek,uygun bir biçimde TIMER()adlı bir olayı vardır.Daha öncede belirtildiği gibi de bu olay belirli bir sürenin her geçişinde gerçekleşir.Bu süre Interval özelliği tarafından belirlenir.TIMER() olayının gerçekleşmesini durdurmak için çalışma kipinde zamanlayıcının Enabled özelliğinin değerine False yapabiliriz.

Timer olayını kullanarak istediğimiz aralıklarla olaylar gerçekleştirebiliriz.

Örnek: Bir saat yapalım.

Private Sub Timer1_Timer ( )
Text1.Text=Time
End Sub

Örnek: Zamanı saniye cinsinden veren program.
Dim sn
Sn=Timer
Msgbox sn

ÖRNEK: Timer kontrolü kullanarak form başlığında saati gösteren bir program yazalım.Bunun için timer nesnesinin invertal özelliğini 1000 (1saniye) yapalım.

Private Sub Timer1_Timer ( )
Form1.Caption= "Saat :" + Timer
End Sub

ÖRNEK: Bir Text yada Label üzerinden kayan bir yazı programı yazalım.Program için 1 adet Timer ve 1 adet Text veya Label gerekir.

Option Explicit
Dim yazi As string

Private Sub Form_Load( )
Yazi=string(5, " " ) + "EMİNE"
End Sub

Private Sub Timer1_Timer( )
Yazi=mid (yazi,2)left (yazi,1)
Text1.Text=yazi
End Sub

ÖRNEK: Timer kontrolü ile ayarlanan saat için alarm çalan bir program kodu yazalım.Bu kod için bir Timer ve adı ZAMAN olan bir text kutusu gerekmektedir.

Option Explicit
Dim saat,dakika,saniye As byte
Private Sub Form_Load( )
Saat=Inputbox ( "Alarm saati giriniz: ")
Dakika=Inputbox ( "Alarm dakikasını giriniz: ")
Saniye=Inputbox ( "Alarm saniyesini giriniz: ")
Zaman.Text=saat + " : " + dakika + " : " + saniye
End Sub

Private Sub Timer1_Timer ( )
İf (hour (now)=val (trim(saat))) and (minute (now)=val (trim (dakika))) and (second (now) val (trim (saniye))) then beep: beep: beep
Else
End if
End Sub

ZAMANLAYICI YÖNTEMLERİ

Zamanlayıcı yöntemi hiçbir yöntemi desteklemez.

ZAMANLAYICILARIN KULLANILMASI

Zamanlayıcı denetimi (yanda görülüyor),çalışma kipinde gizli olan az sayıdaki denetimden biridir.Bu da onun için bir form üzerinde yer bulmamıza gerek kalmadığı anlamına gelir;herhangi bir yere hatta mevcut denetimlerin üzerine bile yerleştirilebilir.Zamanlayıcı temel olarak sadece bir tek iş yapar.Sistem saatini kontrol eder ve buna göre bir tutum belirler.

BİR ZAMANLAYICI DENETİMİNİ DENEYELİM

Zamanlayıcının nasıl çalıştığı hakkında bir fikir edinmek için bir başlık çubuğu saati yapalım.

1.File→New Project komutunu vererek yeni bir proje açalım.Proje tipi Standard EXE. Olarak seçelim.

2.Form 1.'in Name özelliğinin değerini Frmmain,Caption özelliğinin değerini Application time yapalım.

3.FrmMain'e bir zamanlayıcı ekleyelim.Name özelliğinin değerini Tmrtimer yapalım.

4.Bu zamanlayıcının Interval özelliğinin değerini 500 yapalım.Bu saatin kendisi her yarım saniyede bir kontrol etmesini istiyoruz.Bunu zamanlayıcı denetimi bu türdeki diğer denetimler kadar hassas olmadığı için yaparız,ancak bu örnek için işe yarar.

5.Aşağıdaki kodu Frm Main'in (general)(Declarations)yordamına ekleyelim:
Option Explicit
Private OldCaption As String

6.Aşağıdaki kodu form_Load() olayına ekleyelim
Private sub Form_Load()
Oldcaption=Me.Caption
End Sub.

7.Şimdide aşağıdaki kodu zamanlayıcının Timer ()olayına ekleyelim.
Private Sub TmrTimer_Timer()
Dim msg As String
Msg=OldCaption &":"& Time$
Caption=Msg
End Sub.

8.Uygulamayı kaydederek Run→Start komutunu vermek suretiyle çalıştıralım.
Bu etiketin biraz titrediğini fark edebiliriz.Bu durumu Timer() olayındaki kodu, Caption güncelleme sayısını en aza indirgeyecek biçimde değiştirerek azaltabiliriz.
Private Sub TmrTimer_Timer()
Dim msg as string
Msg=OldCaption & ":" &Time $
If msg <>Caption Then
Caption=msg
End İf
End Sub

İf ...Then ifadesi Time $ tarafından döndürülen saatin değişip değişmediğini kontrol eder.Msg karakter katarı Caption değerinden farklı olursa,bu zaman değişikliğini yansıtmak için Caption özelliğinin değerini değiştiririz,aksi taktirde Caption üzerinde bir güncellemeye neden olacak herhangi bir şey yapamayız.Titreme de geçer.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 03:57:11
Shape (Şekil) ve Line (Çizgi) nesneleri

Şekil (Shape) Denetimi



Bu denetim, dikdörtgenler, kareler, ovaller, çemberler, çevrelenmiş dikdörtgenler ve çevrelenmiş kareler yaratmakta kullanılan grafiksel bir denetimdir.



Sözdizimi



Şekil



Şekil denetimi şu özellikleri destekler:





BackColor,
FillColor
Shape

BackStyle
FillStyle
Tag

BorderColor
ForeColor
Top

BorderStyle
Height
Visible

BorderWidth
Left
Width

Container
Name
 

DrawMode
Parent
 






BackColor



Bu özellik nesnenin arka plan rengini seçer ve ayarlar.



Sözdizimi



object.BackColor [= color]



Parametreler



Object

               Object bir forma sokmayı veya denetlemeyi ifade eder.

Color

               Nesnenin arka plan rengi, RGB fonksiyonu ile veya sistemin sabit renkleri ile belirtilir.



BackStyle



Bu özellik, nasıl bir etiket denetimi değerinin olduğunu veya biçimlendirme denetiminin saydam olup olmadığını seçer ve ayarlar.



Sözdizimi



control.BackStyle [= number]



BorderColor



Bu özellik nesnenin kenar rengini seçer ve ayarlar.



Sözdizimi



object.BorderColor [= color]



BorderStyle



Bu özellik, kenar stilinin biçim ve denetimini seçer ve ayarlar.



Sözdizimi

object.BorderStyle [= value]

Parametreler

Object

           Object ifadesi biçim denetimi için değer biçer.

Value

               Value veya Constant, ayarlar gözüyle bakarak kenar stilini belirler. Takip eden tablolar nesnenin biçimi için kenar stili özellikleri ayarlarını gösterir.

Metin Ayarlar Tanım
vbBSNone
0
Hiçbiri (kenar stili veya kenarla ilişkili öge yok)

vbFixedSingle
1
Sabit tek

vbSizable
2
Ölçülendirilebilir (sadece biçim)

vbFixedDialog
3
Sabit diyalog (sadece biçim)

vbFixedToolWindow
4
Sabit pencere aracı

vbSizableToolWindow
5
Ölçülendirilebilir pencere aracı


Takip eden tablolar kenar stili özellik ayarlarından etiket, çerçeveleme, resim kutucuğu ve yazım kutucuğu denetimlerini gösterir.

Ayarlar Tanım
0
Hiçbiri (etiket denetimleri için standart)

1
Fixed single (yazım kutucuğu için standart)


Takip eden tablolar kenar stili özelliklerinin şekil ve biçimlendirme denetimi ayarlarını gösterir.

Metin Ayarlar Tanım  
vbTransparent
0
Şeffaf

vbBSSolid
1 (standart)
Katı. Kenarın biçimlendirme ucunu ortalar.

vbBSDash
2
Kısa çizgi




BorderWidth

Bu özellik kenar genişliği denetimini seçer ve ayarlar.

Söz Dizimi

object.BorderWidth [= number]

Container

Bu özellik nesne biçimi üzerinde kalıp denetimini seçer ve ayarlar.

Söz Dizimi

object.Container [= container]

DrawMode

Bu özellik herhangi bir grafik metodundan çıktı görünümü veya biçimlendirme ve şekil denetimi görünümü için bir değer seçer ve ayarlar.

Söz Dizimi

object.DrawMode [= number]

Parametreler

Object

               Object ifadesi biçimlendirme ve şekil denetimi için değer biçer.

Number

               Tam sayı görünümü açıkça belirler. Takip eden tablolar ayar numaralarını açıklar.

Metin Ayarlar Tanım
vbBlackness
1
Siyah.

vbNotMergePen
2
15 nolu ayarın tersi (vbMerge Pen).

vbMaskNotPen
3
Arka plan renkleri ve kalemin tersi olan renklerin renk kombinasyonu.

vbNotCopyPen
4
13. ayarın tersi (vbCopy Pen).

vbMaskPenNot
5
Kalemdeki ve görünüm tersi olan renklerin her ikisinin de kombinasyonları.

vbInvert
6
Görünüm renginin tersi.

vbXorPen
7
Kalemdeki renk kombinasyonları ve görünümdeki renkler fakat her ikisi de değil.

vbNotMaskPen
8
 9. ayarın tersi (vbMask Pen).

vbMaskPen
9
Görünümdeki ve kalemdeki sıradan renklerin her ikisinin kombinasyonları.

vbNotXorPen
10
 7. ayarın tersi(vbXorPen).

vbNop
11
müdehale yok. Bu çizim ayarlarını kapatır ve müdehale şansını ortadan kaldırır.

vbMergeNotPen
12
Görünüm renk kombinasyonları ve kalemin tersi olan renkler.

vbCopyPen
13 (standart)
Renk ön renk özellikleri ile özelleştirilir.

vbMergePenNot
14
Kalem rengi kombinasyonlarını ve görünümün tersi olan renkleri gösterir.

vbMergePen
15
Kalem rengi kombinasyonunu ve renklerini gösterir.

vbWhiteness
16
Beyaz.


FillStyle

Bu özellik, çizim çemberi ve çizim şekilleri grafik metotları ile çemberler ve kutular yaratmada biçimlendirme denetimleri kaplamalarında kalıp seçme ayarlamada kullanılır.

Söz Dizimi

object.FillStyle [= number]

ForeColor

Bu özellik, bir nesne içindeki yazım ve grafik görüntüsünün ön plan renginin seçim ve ayarlanmasında kullanılır.

Söz Dizimi

object.ForeColor [= color]

Height

Bu özellik yükseklik denetimini seçer ve ayarlar.

Söz Dizimi

object.Height [= number]

Left Özelliği

Bu özellik nesnenin sol iç kenarı ile kalıbın sol iç kenarı arasındaki mesafeyi seçer ve ayarlar.

Söz Dizimi

object.Left [= value]

Name

Bu özellik bir forma kodlama belirmek veya nesne fondunun ismini belirleme,ayarlama ve denetimde kullanılır.

Söz Dizimi

object.Name



Parent

Bu özellik bir denetim içeren form, nesne ve koleksiyonları seçer.

Söz Dizimi

object.Parent

Shape

Bu özellik bir şekil kontrolüne görünüm belirlemek için bir değer seçer ve ayarlar.

Söz Dizimi

object.Shape [= value]

Parametreler

Object

               Object ifadesi bir biçim denetimine değer biçer.

Value

Tam sayı, denetim görünümünü açıkça belirler. Takip eden tablolar ayarların değerlerini gösterir.

Metin Ayarlar Tanım
vbShapeRectangle
0 (standart)
Dikdörtgen

vbShapeSquare
1
Kare

vbShapeOval
2
Oval

vbShapeCircle
3
Daire

vbShapeRoundedRectangle
4
Çevrelenmiş Dikdörtgen

vbShapeRoundedSquare
5
Çevrelenmiş Kare


Tag

Bu özellik ihtiyaç duyulan herhangi bir extra bilgi için başvuruları depolamayı seçmeyi ve ayarlamayı ifade eder.

Söz Dizimi

object.Tag [= expression]

Top

Bu özellik herhangi bir nesnenin iç üst kenarı ile kalıp üst kenarı arasındaki mesafeyi seçer ve ayarlar.

Söz Dizimi

object.Top [= value]

Visible

Bu özellik herhangi bir değerin görülebilir mi yoksa görülemez mi olduğunu seçer ve ayarlar.

Söz Dizimi

object.Visible [= Boolean]

Width

Bu özellik herhangi bir denetim veya formun genişliğini kalıp denetiminin birim ölçüsü olarak kullanır, seçer ve ayarlar.

Söz Dizimi

object.Width [= number]

Line(Şekil) Denetimi

X1, Y1, X2, Y2 Özellikleri


X1 ve Y1 başlangıç noktaları ile ve  X2 ve Y2 bitiş noktaları ile herhangi bir şekil denetimi seçer ve ayarlar. Yatay koordinatlar X1 ve Y2, dikey koordinatlar Y1 ve Y2'dir.

Söz Dizimi

object.X1 [= value]

object.Y1 [= value]

object.X2 [= value]

object.Y2 [= value]

X1, Y1, X2 ve Y2 söz dizimi özellikleri bu parçalardan oluşur.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 04:00:25
Image (Görüntü nesnesi)

GÖRÜNTÜ (IMAGE)

Bir resmi görüntüleyebilen grafik tipte bir kontrol nesnesidir. Bu açıdan resim kutusuna (picture box) benzer. Fakat, resim kutusuna oranla daha az sistem kaynağı kullanılır. Mouse ile clicklendiği zaman, komut butonuna benzer özellik gösterir. Örneğin bir firma, firmanın logosunu görüntü nesnesi içine yerleştirerek, resim üzerine mouse ile click işlemi gerçekleştirildiğinde firma hakkında bazı bilgiler listeleyen bir tanıtım yazılımı oluşturabilir.


Görüntü Nesnelerinin Kullanılması

Görüntü denetimi (ön takısı genellikle img olur),ilerleyen bir kısımda açıklanacak olan resim kutusu hafif bir eşdeğeridir. ancak , resim kutusu denetiminin aksine görüntü denetimi başka nesneler için bir konteyner görevi göremez.
Bazı başka özellikleri de o kadar kapsamlı olmasadabir form üzerinde sadece bir resim görüntülemek istiyorsanız iyi bir tercihtir. görüntü denetimleri resim denetimlerine oranla çok az miktarda hafıza tüketir. Visual Basic ile gelen görüntü denetimi artık bitmap(BMP),simge (ICO),metafile (WMF),jpeg(JPG),ve gif(GIF) dosyalarını görüntüleyebilir. buda World Wide Web grafiklerinin olduğu gibi başka populer grafik programlarının grafiklerinin görüntülenmesini kolaylaştırır.

Görüntü Denetimi Özellikleri

görüntü denetimi çok sayıda özelliğe sahiptir,

Align
Appearance
Autosize
BorderStyle
Container
DataField
DataFormat
DataMember
DataSource DragIcon
DragMode
Enabled
Height
Index
Left
MouseIcon
MousePointer
Name
OleDragMode
OleDropMode
Parent
Picture
Stretch
Tag
Top
Visible
WhatsThisHelpID
Width


Align : Image'ın form üzerindeki yerini belirler
Autosize : Image boyutlarının resim boyutlarına göre otomatik ayarlanması
Stretch : Resmin Image boyutlarına otomatik olarak ayarlanması

Diğer çoğu grafik denetimindede olduğu gibi , grafiği picture özelliğinin değerini ayarlayarak eklersiniz . Herhalde buradaki en ilginç özellik strech'tir. Bu Boolen bir özelliktir , yani sadece True veya False değerlerini alır. strech özelliğinin değeri false yapıldığında (varsayılan değer), denetim için yerleştirilen resmin boyutlarını alır. Bu denetimin boyunu daha sonra değiştirirseniz, yüklenen resim yatay ve düşey boyut değişikliğinin oranlarına bağlı olarak ya kırpılır, ya etrafında boş bir alan kalır , yada bunların ikisi birden olur. ancak strech özelliğinin değeri true yaparsanız resmin boyutları denetimle birlikte değişir. bu şekilde resim yüklendikten sonra denetimin boyunu değiştirerek içindeki resmi daha büyük veya küçük , yada daha uzun veya basık hale getirebilirsiniz.bir resim denetiminin özelliği yoktur. buna en yakın özelliği Autosize'dir. bir resim kutusunun Autosize özelliğinin True ise denetim kendisini yüklenen resmin ebatlarına uyarlar. Ancak Strech özelliğin değeri True yapılmış ise görüntü denetiminin aksine, resim kutusunun boyu değiştirildiği zaman bile içindeki resim aynı kalır.

Görüntü Denetimi Olayları

Görüntü denetimi çok sayıda olay kullanmaz, olanlarında sadece birkaç tanesini belki kullanırsınız

Click
DblClick
DragDrop
DragOver MouseDown
MouseMove
MouseUp
OleDragDrop
OleDragOver
OleCompleteDrag
OleGiveFeedBack
OleSetData
OleStartDrag

Görüntü denetimleri bazen bir sürükleme-bırakma hedefi olarak kullanışlı olur. çünkü bunun içinde , denetimin üzerine bırakıldığında doğacak sonuç hakkında bir fikir veren bir resim bulundurabilirsiniz.

Görüntü Denetimi Yöntemleri

Drag
Move
OleDrag
Refresh
ShowWhatsThis
Zorder

Çalışma Anında Resim Eklemek
Private Sub Command1_Click()
Image1.Picture = LoadPicture("d:\depo\bjk.jpg")
End Sub


Çalışma Anında Resim Silmek
Private Sub Command1_Click()
Image1.Picture = LoadPicture("")
End Sub

Resmi Fare ile Küçültüp Büyütmek

(General)(Declalaration)
Private genisle As Boolean

Private Sub Form_Load()
Image1.Stretch = True
End Sub

Private Sub Image1_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
genisle = True
End Sub

Private Sub Image1_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Not genisle Then Exit Sub
If (X >= 0) And (Y >= 0) Then
Image1.Move 0, 0, X, Y
End If
End Sub

Private Sub Image1_MouseUp(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
genisle = False
End Sub
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 04:01:28
OLE – Nesne Bağlama ve Yerleştirme Aracı

OLE İSTEMCİSİ (OLE CLİENT) (NESNE BİRLEŞTİRME)
(Object Linking and Embedding)

Nesneyi bağlama ve yerleştirme yöntemi, Windows işletim sistemince kullanılan bir teknolojidir. Bu teknoloji sayesinde, bir windows uygulama programı (Visual Basic 6.0) ile geliştirilen bir proje içine başka bir windows uygulama programından nesneler aktarmak mümkündür.

Kullanıcı Formu

Bu form programa ait kullanıcı arabiriminin oluşturulduğu yerdir. Yani tüm denetimler öncelikle bu form üzerüine yerleştirilir ve yerleştirilen denetimler bu forma ait birer nesne olarak çalışırlar. Burada oluşturulan form görüntüsü program çalıştığı zaman ekranda görülür. Bu form görsel dillerin özelliğidir. Bilindiği gibi aynı ekran görüntüsünü görsel olmayan program dillerinde oluşturmak çok zordur. Ayrıca programın ekran görüntüsünü program çalışırken de değiştirebiliriz. Projelerimizde birden fazla form kullanmak mümkündür. Formlar projelerimizin ana elemanlerıdır. Herhangi bir denetim elemanını form üzerine eklemek için öncelikle denetim araç çubuğundan ekleyeceğimiz elemanı fare ile seçeriz. Bu işlemden sonra elemanın konumu belirlenip fare yardımı ile elemanın görüntüsü belirlenen yere çizilir.


OLE (NESNE BAĞLAMA ve GÖMME ELEMANI)

OLE teknolojisini destekleyen iki program arasında bağlantı kurmayı sağlar. Bağlantının sonucunda veri transferi yapmak yada verileri kullanmak mümkün olmaktadır.

Data-OLE Örneği

Nesne Özellik Ayar

Data1 Connect Access
DatabaseName C:\DERS_2\Yetenek.mdb
RecordSource Artists

Text1 DataSource Data1
DataField Name

Text2 DataSource Data1
DataField Adress

Text3 DataSource Data1
DataField City

Text4 DataSource Data1
DataField State

Text5 DataSource Data1
DataField WorkPhone

.

Private Sub OLE1_Updated(Code As İnteger)
Command1 Caption
Private Sub Command1_Click()
End
End Sub

OLE örneği için bir OLE nesnesi ekleyelim. Nesne ekle diyalog kutusunda uygulamamıza bağlayabileceğimiz nesnelerin listesi görünmektedir.

Dosyadan Oluştur'u seçelim, Bağlayı seçelim, Gözat kutusundan C:\DERS_2\Satışlar_01xls dosyasını bulalım, Tamam'a tıklayalım.

Şimdide sağ alt köşeye yeni bir OLE nesnesi çizelim. Nesne ekle kutusunu iptal ile geçelim. C:\DERS_2 dizinindeki excel dosyasını açıp grafiği kopyalayalım. VB de forma yeni eklediğimiz OLE nesnesine sağ tıklayıp Paste Special diyelim. Özel yapıştır kutusunda Bağlantı Yapıştır 'ı seçelim
OLE2.Update
End Sub



OLE teknolojisini destekleyen iki program arasında bağlantı kurmayı sağlar. Bağlantının sonucunda veri transferi yapmak yada verileri kullanmak mümkün olmaktadır.


Action Özelliği

Nesne üzerinde çeşitli işlemlerin yapılmasını sağlar.

nesne.Action = değer

İşlemin alabileceği değerler şunlardır:

Değer İşlevi Metot

0 Gömülü nesne yaratır. CreateEmbed

1 Bir dosyada bağlı nesne yaratır. CreateLink

4 Nesneyi panoya kopyalar. Copy

5 OLE kontrolüne panodan veri yapıştırır. Paste

6 OLE kontrolü içindeki veriyi günceller. Update

7 Nesneyi üzerinden işlem yapmak için açar. DoVerb

9 Nesneyi kapatır. Close

10 Belirtilen nesneyi siler. Delete

11 Nesneyi veri dosyasına kayıt eder. SaveToFile

12 Nesneyi dosyadan yükler. ReadFromFile

14 İnsert Object iletişim kutusunu görüntüler. İnsertObjDlg

15 Paste Special iletişim kutusunu görüntüler. PasteSpecialDlg

17 Nesnenin desteklediği işlemleri günceller. FetchVerbs

18 Bir nesneyi OLE 1.0 formatında kayıt eder. SaveToOle1File


OLE DRAG & DROP

OLEDragMode

Taşıma işleminin nasıl yapılacağını belirler.
0, vbOLEDDragAutomatic : Bu modda sürükleme işlemi otomatik olarak başlatılır.
1, vbOLEDDragManual : Bu modda sürükleme işlemini başlatmak için OLEDrag metodu kullanılmalıdır.


OLEDropMode

Bırakma işleminin nasıl yapılacağını belirler.
0, vbOLEDropNone : Nesne bırakma işlemini desteklemeyecek.
1: vbOLEDropManual : Bırakma işlemi program kodu ile yapılacak.
0 : vbOLEDropAutomatic : Bu modda hiçbir koda gerek kalmadan bırakma işlemi gerçekleştirilebilir.

Eğer bir kontrolün hem OleDragMode ve hem de OleDropMode özellikleri otomatik değerleri destekliyorsa bu kontrollere hiçbir kod yazmanız gerekmez. Sadece bu iki özelliğe Automatic değerlerini vermeniz yeterlidir.

ÖRNEK: Örnek olarak programınıza iki tane text kutusu yerleştirin ve her ikisinde de bu özelliklerini Automatic olarak ayarlayıp programı çalıştırın. Bu iki kutu arasında seçtiğiniz kısmı taşıyabileceğiniz gibi bu kutulardan seçip OLE Drag&Drop işlemlerini destekleyen diğer uygulamalara da taşıyabileceğinizi veya oradan bu kutulara taşıyabileceğinizi göreceksiniz.

Formunuzun üzerine bir FileListBox koyup OleDragMode özelliğini Automatic yaparsanız artık buradaki dosyalardan seçip istediğiniz bir yere taşıyarak oraya kopyalayabilirsiniz. Örneğin masa üstüne veya Explorer de bir dizine bırakarak oraya kopyalanmasını sağlayabilirsiniz. Hatta FileListBox'un MultiSelect özelliğini 1 veya 2 yaparak birden fazla dosyayı aynı anda istediğiniz yere kopyalayabilirsiniz.

Aynı şekilde bie PictureBox'un bu iki özelliğine Automatic değerini vererek diğer uygulamalardaki resimleri getirip PictureBox üzerine bırakabilirsiniz. Bu işlemler sırasında Ctrl tuşuna basılı tutarsanız sürüklediğiniz şey karşı tarafa kopyalanır, bu tuşa basılı tutmadan sürüklerseniz oraya taşınır.

Methods

OLEDrag( )

Eğer OleDragMode özelliği otomatik olarak belirlenmişse taşımaya başlama işlemi bu metodla yapılır.

Events

OLEStartDrag (Data As DataObject, AllowedEffects As Long)

Sürükleme işlemi başladığında bu olay meydana gelir.

OLECompleteDrag (Effect As Long)

Drag-Drop işlemi tamamlandığında veya iptal edildiğinde bu olay meydana gelir.
Effect parametresi ile sonuç hakkında bilgi alınabilir. Örneğin bilgi karşı tarafa kopyalandı mı, taşındı mı bu bilgi Effect parametresi ile öğrenilir. Effect parametresinin alacağı değerler şunlardır:

1 : vbDropEffectCopy
2 : vbDropEffectMove
3 : vbDropEffectNone

OLEDragDrop (Data As DataObject, Effect As Long, Button As İnteger, Shift As İnteger, X As Single, Y As Single)

OLEDropMode özelliğine Manual verilmişse bırakma işlemi gerçekleştiğinde bu olay meydana gelir.

OLEDragOver (Data As DataObject, Effect As Long, Button As İnteger, Shift As İnteger , X As Single, Y As Single, State As İnteger)

OLEDropMode özelliğine Manual verilmişse sürükleme işlemi gerçekleşirken bu olay meydana gelir.

OLEGiveFeedback (Effect As Long, DefaultCursors As Boolean)

Bu olay, OLE kaynağının sürükle ve bırak işlemi esnasında fare şeklinin değişmesi gerektiği durumlarda meydana gelir.

DataObject

OLE Drag&Drop olayında sürüklenen bilginin formatı aşağıdaki değerlerden biri olabilir.

Sayısal Sembolik Anlamı

-16640 vbCFLink Bağlantı bilgisi, DDE bağlantı bilgisi
-16639 vbCFRTF RTF metni, formatlı metin bilgisi
1 vbCFText Text, formatsız metin bilgisi
2 vbCFBitmap BMP, bitmap türü resim bilgisi
3 vbCFEMetafile WMF, windows metafile türü resim bilgi
8 vbCFDIB DIB, DIB formatlı resim bilgisi
9 vbCFPalette Palet bilgisi
15 vbCFFiles Windows explorer dosya adı


Properties

Count,Files (İndex)

Sürükleme işlemindeki Datalar dosya isimleri ise, yani vbCFFiles formatında ise bu özelliklerle sürüklenen dosya sayısı ve her bir dosyanın ismi öğrenilip değiştirilebilir.

Methods

Clear ( )

Datanın içeriği silinir.

GetData (Format As İnteger)

Format parametresi ile belirlenen bilgiyi öğrenmek için kullanılır.

GetFormat (Format As İnteger) As Boolean

Datanın format parametresi ile belirlenen formatı destekleyip desteklemediği bu özellikle öğrenilir. Geriye dönen değer True ise o bilgi formatttadır.

SetData ([Bilgi], [Format)]

Taşınacak bilgi ve bu bilginin formatı bu metodla belirlenebilir.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 04:02:34
CommonDialog – Genel Diyalog Penceresi

COMMON DIADLOG
The following notes are meant to help you use the Visual Basic® CommonDialog Control. More complete details concerning this contraol can be found in the Visual Basic Help Topic ComonDialog Control.
The CommonDialog Control presents a standard program interface for common operations such as
• Opening and Saving files,
• Setting print options,
• Selecting colors and fonts, and
• Displaying help
Adding the Common Dialog Control to the ToolBox
The Common Dialog Control must be added to the ToolBox before it can be used. In design mode, select the Object View for your project. Either right click the ToolBox with your mouse and choose Components or select the Menu command Project Components. This will open a dialog box similar to that in Figure 1,

Figure 1 -- Selecting Components
Scroll through the list of compnents until finding the Microsoft CommonDialog Control. Check the CheckBox for this control as shown in Figure 2 and click the Okay Button. This will add the CommonDialog Control icon to the ToolBox.

Figure 2 -- Selecting the Common Dialog Control Component
You may now add one or more CommonDialog Controls to your form in the same manner as any other control. As CommonDialog Controls are added to a form, they will have the default name ComonDialog1, ...
Something Unusual
When you execute a project, you expect to be able to see your controls unless their Visible property has been set to False. But, you won't see a CommonDialog Control when you execute a project. And, if you look at its properties, you won't see any Top, Left, Height, Width, Visible properties. That's because the CommonDiialog Control is not a visible control. You won't see anything until you execute one of its methods. When it is used, you will see a Dialog Box that you can interact with.
By the way, the CommonDialog Control is also unusual in that it does not have any events.
Using the CommonDialog Control
The CommonDialog provides a set of standard interfaces to control certain common tasks. Figures 1 and 2 are examples of a Dialog Control that, in this case, is designed to allow you to determine which components should be a part of a Visual Basic project. The CommonDialog Control provides Dialog boxes for six specific types of activities. How a CommonDialog Control is used is determined by which of its methods you invoke. So, first, the CommonDialog Control methods.
Method Purpose
ShowOpen used to display a Dialog Box designed to allow the user to select one (or more) files from among those accessible to a spacific computer. Typically, your program will use the selected file(s) for input purposes.
ShowSave used to specify the name and location of a, possibly new, file on your sytem. Generally used to identify the file that will be used to store program outputs.
ShowColor presents the user with a palette of colors from which a selection can be made.
ShowFont Presents the user with a selection of the fonts on the system, the sizes supported for these fonts and the ability to indicate a combination of styles such as Bold or Italic.
ShowPrinter allows the user to select from the primnters known to this sysstem and to set certain properties of the selected printer.
ShowHelp runs WinHelp32.exe and displays the specified help file. This allows you to bring up specific portions of Windows help or even dsign your own help system.
Let's build a small project to illustrate using the CommonDialog Control. Open Visual Basic. Add the Microsoft CommonDialog Control to the project using the method outlined above. Put one Text Box and One Command button on the form. Your form should look like Figure 3

Figure 3 -- The Form
Finally code the Command Button Click event as
Private Sub Command1_Click()
CommonDialog1.ShowColor ' Display Color Dialog
Text1.BackColor = CommonDialog1.Color ' Change Text background
End Sub
When you run the project and click on the Command Button, the CommonDialog Control's Color Dialog Box will be presented as in Figure 4.

Figure 4 -- The Color Dialog Box
Click on any of the colors and then click the Color Dialog Box Okay button. The background of the Text box should change to the selected color.
What Happens?
The CommonDialog Control allows you to make a number of different selections when a Dialog Control is invoked with one of the six methods above. The selection(s) that you make change one or more of the CommonDialog Controls properties. In the case of the ShowColor Method, the selected color is returned as the value of the property Color. This property may then be used in your program. In this case, we use the selected color to define a new value for the background of the Text Box.
CommonDialog Control Properties
Each of the CommonDialog Control methods presents you with a standard interface to accomplish certain objectives. Once your selection(s) have been made, these are returned using one or more of the CommonDialog Control's properties. Thus, the properties are used to return the selections to your program, where they can be used as appropriate. Certain properties of the CommonDialog Control can also be used to change the behavior/appearance of the Dialog Controls. For example, add a second Command Button to your form and code its Click event as
Private Sub Command2_Click()
CommonDialog1.ShowFont ' Pop up Font Dialog
Text1.FontName = CommonDialog1.FontName ' Change Text font
Text1.FontSize = CommonDialog1.FontSize ' Change size
Text1.FontBold = CommonDialog1.FontBold ' Bold?
Text1.FontItalic = CommonDialog1.FontItalic ' Italicize
End Sub
When you try to run this program, what happens? As written, you will get a run-time error message telling you that no fonts are installed on your PC. Don't despair. You have fonts installed. After all, you're looking at this. If you were to look at the VB Help screen for the ShowFont Method, you would see the following remark
Before you use the ShowFont method, you must set the Flags property of the CommonDialog control to one of three constants or values: cdlCFBoth or &H3, cdlCFPrinterFonts or &H2, or cdlCFScreenFonts or &H1. If you don't set Flags, a message box is displayed advising you that "There are no fonts installed," and a run-time error occurs.
You have to tell the CommonDialog Control whether to display Printer fonts, Screen fonts or both types of fonts before you execute the ShowFont method. Change the second Command Button's Click event to
Private Sub Command2_Click()
CommonDialog1.Flags = cdlCFBoth ' Printer & Screen fonts
CommonDialog1.ShowFont ' Pop up Font Dialog
Text1.FontName = CommonDialog1.FontName ' Change Text font
Text1.FontSize = CommonDialog1.FontSize ' Change size
Text1.FontBold = CommonDialog1.FontBold ' Bold?
Text1.FontItalic = CommonDialog1.FontItalic ' Italicize
End Sub
Now, what happens to the text box when you click Command Button 2? Try several different font, size, italic and/or bold combinations. (Some of the more unusual fonts are Webdings and Wingdings. )
Remember
You use a CommonDialog Control Method to display one of the Dialog Boxes. You set the values of one or more CommonDialog proerties before invoking the method to control the behavior of the Dialog Box. And, the selections made are returned to you as the value(s) of one (or more) properties of the CommonDialog Control. Unless/until you use these changed properties, nothing happens beyond displaying the Dialog Box.
Some of the More Important Properties
Color This is a 4-byte (32 bit) value of type Long which identifies the color selected in response to the ShowColor method. If you look up the VB Help topic Color Constants, you can get a feeling for some of these values. One value you might want to remember is &H8000000F, which is the default gray background color used by VB for forms, Label Boxes, Command Buttons, etc. (See below for a note about Hexadecimal values.)
FontBold
FontItalic
FontStrikethru
FontUnderline These four properties are Boolean values (i.e., each is either True or False). They are set when the ShowFont method is invoked. Most VB controls that display text have similarly named properties. So these CommonDialog Control properties can be used to change the manner in which text is displayed.
FontName The name of the font that was selected using the ShowFont method.
FontSize The size selected when using the ShowFont method.
DialogTitle Used in conjunction with the ShowOpen and ShowSave methods to determine the text displayed in the Title Bar of the Dialog Box. Must be set prior to executing the method.
Flags This property is used to determine how a Dialog Box will be configured/behave when executed. It must be set prior to invoking the method. For example, setting Flags to one of the constant values cdlCFBoth, cdlCFPrinterFonts or cdlCFScreenFonts prior to executing the ShowFont method determines whether you may select from both the installed printer and screen fonts, only the installed printer fonts or only the installed screen fonts. The prefix cdl indicates this is a CommonDialog Control constant. CF means it applies to the ShowFont method.
Setting the Flags property to cdlCCFullOpen prior to executing the ShowColor method displays a Color Dialog Box that displays a section for defining Custom Colors.
I recommend you look at the VB Help Topic CommonDialog Control Constants to see the full range of possible values for the Flags property.
Some Notes on Hexadecimal Values
At this point, take a couple of seconds and bring up the VB Help Topic CommonDialog Control Constants. You'll see these constants are grouped according to the CommonDialog Control method they apply to. Take a look at the constant cdlCFEffects. The table shows you that its value is the hexadecimal numer &H100. (The prefix &H denotes this is a hexadecimal value. The 100 is the hexadecimal value.) So, why use hexadecimal numbers? Because they are a convenient representation of Binary values - the values that computers use and understand. The following table shows the 16 hexadecimal digits their binary and decimal equivalents.
Hexadecimal
Digit Binary
Value Decimal
Value
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
A 1010 10
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15
Having memorized the information in the preceeding table, you can easily convert hexadecimal numbers to their binary equivalents and back again. (Yes, if you want to be a serious progammer, you should memorize the table.) For example, the value &100 is the binary number 0001 0000 0000. All you need to do is replace each hexadecimal digit by its four digit binary equivalent. The reverse process can be used to convert binary numbers to hexadecimal. For example, the binary number 100111011 is converted by first appending three leading zeros to it to get 000100111011. (You want the number of digits to be a multiple of four.) Then, group it four bits at a time to get 0001 0011 1011. Finally use the table above to convert it to &13B as the equivalent hexadecimal value.
We now know the CommonDialog Control constant cdlCFEffects is equal to &100 or the binary number 0001 0000 0000. When the CommonDialog Flags property is set to cdlCFEffects (&100), then Font dialog box will include options for Strikethrough, Underline and Color. Now let's use this to our advantage. A second CommonDialog Control Constant is cdlCFScreenFonts whose value is &1 hexadecimal or 0001 binary. When it is set, the Font Dialog displays only screen fonts. What we would like to do is display a Font Dialog Box that displays only screen fonts and allows for these effects. So, first build a new form that is similar to Figure 5, which contains a Command Button, a Text Box and a CommonDialog Control.

Figure 5 -- A Simple Form
Next, code the Command Button Click event as:
Private Sub Command1_Click()
CommonDialog1.Flags = cdlCFScreenFonts Or cdlCFEffects
CommonDialog1.ShowFont
Text1.FontName = CommonDialog1.FontName
Text1.FontSize = CommonDialog1.FontSize
Text1.FontBold = CommonDialog1.FontBold
Text1.FontItalic = CommonDialog1.FontItalic
Text1.ForeColor = CommonDialog1.Color
Text1.FontStrikethru = CommonDialog1.FontStrikethru
Text1.FontUnderline = CommonDialog1.FontUnderline
End Sub
Finally, run the project and click the Command Button. Select the Courier font and some combination of the other properties. What happens to the text box? Try some other combinations using the Font Dialog Box. If you got a run-time error, most likely it is because you did not select a font. Try again and make certain you select a font first.
The key to what just happend is the statement
CommonDialog1.Flags = cdlCFScreenFonts Or cdlCFEffects
which sets the Flags property prior to executing the ShowFont method. Or is a boolean operator. It performs a bitwise logical Or of the two operands. The following table shows what Or does.
Or Operand
Operand 0 1
0 0 1
1 1 1
The above statement says to Or the values &H1 and &H100. Doing this bit by bit yields
cdlCFScreenFonts &H1 0000 0000 0001
cdlCFEffects &H100 0001 0000 0000
Result &H101 0001 0000 0001
So the CommonDialog Control's Flag property is set to the hexadecimal value &H101. If you look it up, you will see that the Flag property is of type Long (i.e., occupies 32 bits or 4 bytes of memory. Each of those 32 bits can be set to either 0 or 1 to indicate that a certain option should or should not be set when the ShowFont method is executed. Numbering the bits from 0 on the right to 31 on the left, when bit 0 is set to 1, then the Font Dialog displays Screen Fonts. If bit 0 is set to 0, then the screen fonts are not displayed. When bit 8 is set to 1, the strikethrough, underline and color effects are enabled. When bit 8 is set to 0, they are not. In a similar manner, you can set other bit patterns to 0 or 1, as desired, by setting the Flags property to the logical Or of the appropriate constants. Or, you can simply execute a statement similar to
CommonDialog1.Flags = &H273
Which sets the Flags property to the 32 bit pattern 0000 0000 0000 0000 0000 0010 0111 0011 - enabling some combination of options. Do remember that the Flags property must be set prior to executing the method. And, the meaning of a specific bit changes dending on the method executed.
Show Open & ShowSave
The methods we are most interested in are ShowOpen and ShowSave, which are typically used to allow access to files. Let's assume you have written a program that opens a file and reads information from that file. Within your code, you might have code similar to the following:
Private Sub ReadFile_Click()
Dim FileNum As Integer
FileNum = FreeFile
Open "c:\temp\downloads\abc.dat" For Input As FileNum
'
' remainder of procedure
'
End Sub
The above will work as written. However, it does make an assumption that the file abc.dat resides in the folder c:\temp\downloads\ on whatever PC you are using. While hardcodign a file name into a program can be useful, it can also lead to problems. Should you move this code to a different PC, it is extremely unlikely that this file would be found in a folder named \temp\downloads. Indeed, there may be no such folder on the PC the code is moved to. What you would like is to allow the user to be able to specify both the name and the location of the file to be used by the program. One excellent way to do this is to use the CommonDialog Control ShowOpen method. We begin by taking a look at several properties of the CommonDialog Control and how they relate to the ShowOpen and ShowSave methods.
Name Explanation
Flags Setting the Flags property prior to executing either the ShowOpen or ShowSave method changes the behavior of the method. This property must be set before executing the ShowOpen or ShowSave method to be effective. Some of the more used CommonDialog Control constants for these methods are:
cdlOFNFileMustExist
(value = &H1000) If set, the user can enter only the names of existing files as the file name box for the Dialog Box.
cdlOFNHelpButton
(value = &H10) If set, the Dialog Box will display a Help button in addition to the default Okay and Cancel buttons.
cdlOFNPathMustExist
(value = &H800) If set, allows the user to enter only valid (existing) paths.
DialogTitle Changes the Title of the Dialog Box to whatever you specify. Can be particularly useful in establishing a context for the user.
FileName Has meaning both before and after executing the ShowOpen or ShowSave methods. If set before executing either method, it determines the directory and file displayed in the Dialog Box when the method is executed. After either method has been closed by clicking the Okay button, the FileName property is the complete drive, path and filename of the selected file. This can now be used in your code.
Filter Determines the types of files that will be displayed in the file list box of the Dialog Box. By default, all files are displayed. Setting the Filter to *.txt would display only those files with the extension txt. Setting the Filter to *.htm;*.html would display files with extension of either htm or html.
CancelError The default value for this property is False. When it is set to True, prior to executing a method, error number 32755 is returned if the user clicks the Cancel button of the Dialog Box. In conjunction with error trapping, this can be used to determine whether the user clicked the Cancel button or the Okay button.
Now, let's put all of this to productive use. Your program expects the input file to be named abc.dat and to reside in the folder c:\temp\downloads\. But, you recognize that it may be in some different folder and might even have a different name than abc.dat. So, you want your program to prompt the user for the file name and location. You also want to guard against the possibility of the user specifying the name of a non-existent file or clicking the Cancel button. We'll get there by steps.
In Visual Basic, create a new project. Add the CommonDialog Control to the ToolBox. Put a Command Button and a CommonDialog Control on the form. Change the Name of the Command Button to cmdOpenFile. Name the CommonDialog Control cdlOpenFile. Finally, switch to code view and paste the following into your program.
Option Explicit
Dim FileNum As Integer

Private Sub cmdOpenFile_Click()
FileNum = FreeFile
cdlOpenFile.ShowOpen
MsgBox cdlOpenFile.FileName
Open cdlOpenFile.FileName For Input As FileNum
End Sub
Now run the program and click the Command Button. Figure 6 shows what you should see on your screen - except that the names of the files and directories on your PC will not be the same as the one this was taken from.

Figure 6 -- The ShowOpen Dialog Box
Figure 6 shows that the current folder/directory is programs. Both the File Name and Filter Boxes are empty. Using your example, click on any file. The name of the file should now appear in the File Name Box. Click the Okay button and a message box showing the value of CommonDialog Control's Filename property will be displayed in a Message Box. Finally, that file will be opened by your Visual Basic program although it will not be obvious to you.
Now, let's deliberately generate an error. Run the project again and click the Command Button. When the Open File Dialog displays, click the File Name Box and type in a file name of xcvbassde.gtre or something else equally nonsensical. The important thing here is to choose the name of a non-existent file. Once that is done, click the Okay Button. The Message Box will pop up with the complete file name. Your program should then yield a run-time error number 52 Bad file name or number. The problem is that the Open statement can only successfully open files that exist. The attempt to open a non-existent file caused the run-time error. What we have to do is force the user to choose from among only those files that exist on her/his PC. Change your program's code for the Click event by adding the indicated line below:
Private Sub cmdOpenFile_Click()
FileNum = FreeFile
cdlOpenFile.Flags = cdlOFNFileMustExist ' new line just added
cdlOpenFile.ShowOpen
MsgBox cdlOpenFile.FileName
Open cdlOpenFile.FileName For Input As FileNum
End Sub
Run the program and click the command button. What happens when you try to select a file that does not exist? By setting the Flags property to cdlOFNFileMustExist, you are reconfiguring the ShowOpen method to only allow the user to select from among files that actually exist on the disk. Until one is chosen, the user cannot get out of the Open Dialog by clicking the Okay button.
Let's make the control a little fancier. Add the line marked below to your code: (Be careful! Blank spaces count in this example.)
Option Explicit
Dim FileNum As Integer

Private Sub cmdOpenFile_Click()
FileNum = FreeFile
cdlOpenFile.Flags = cdlOFNFileMustExist
cdlOpenFile.Filter = "All Data Files (*.dat)|*.dat|All Files (*.*)|*.*" ' new line
cdlOpenFile.ShowOpen
MsgBox cdlOpenFile.FileName
Open cdlOpenFile.FileName For Input As FileNum
End Sub
If everything worked correctly, you should see something like Figure 7.

Figure 7 -- Using a Filter
Figure 7 shows significantly fewer files than Figure 6. And, all of the files shown share the same extension of .dat. You see the message All Data Files (*.dat) in the Filter Box. These text characters are meant for human consumption. The control is displaying files according to the mask *.dat, which means display all files no matter what their name so long as the extension is dat. Since only four files satisfied this mask on my PC, I only saw four files in Figure 7. Now click on the Filter Box drop down arrow. You can choose either all data files (*.dat) or all files (*.*). Select all files and you should see something similar to Figure 6 above with many more files displayed. When you set the Filter property, you must provide Visual Basic with a text display to prompt the user and the mask that is to be matched. The text to be displayed and the match are separated from each other by | the "pipe" character. You can have as many different filter values as you wish so long as all are separated from each other by this "pipe" character.
Let's give the user a little prompt as to what the Open Dialog is meant to accomplish. So, add another line to your code as shown below:
Option Explicit
Dim FileNum As Integer

Private Sub cmdOpenFile_Click()
FileNum = FreeFile
cdlOpenFile.DialogTitle = "Open the Employee Data File" ' new line
cdlOpenFile.Flags = cdlOFNFileMustExist
cdlOpenFile.Filter = "All Data Files (*.dat)|*.dat|All Files (*.*)|*.*"
cdlOpenFile.ShowOpen
MsgBox cdlOpenFile.FileName
Open cdlOpenFile.FileName For Input As FileNum
End Sub
Run the program and click the Command Button. The value of the DialogTitle property determines what you will see displayed in the dark blue title bar of the Dialog Control. By changing it, you can provide the user with a visual prompt of what file she/he is trying to open.
Time for another error. Run the program, click the command Button and immediately click the Cancel button. The Message Box shows you that the value of the CommonDialog COntrol FileName property in the null string. And, the program dies with run-time error number 75 Path/File access error. It's time to correct that. This time, you need to add several statements to your program as shown below.
Option Explicit
Dim FileNum As Integer

Private Sub cmdOpenFile_Click()
FileNum = FreeFile
cdlOpenFile.DialogTitle = "Open the Employee Data File"
cdlOpenFile.Flags = cdlOFNFileMustExist
cdlOpenFile.Filter = "All Data Files (*.dat)|*.dat|All Files (*.*)|*.*"
cdlOpenFile.CancelError = True ' new line
On Error Resume Next ' new line
cdlOpenFile.ShowOpen
If Err.Number = cdlCancel Then ' new line
MsgBox "Cancel button clicked" ' new line
Exit Sub ' new line
End If ' new line
On Error GoTo 0 ' new line
MsgBox cdlOpenFile.FileName
Open cdlOpenFile.FileName For Input As FileNum
End Sub
The first new statement tells says that the CommonDialog Control should generate run-time error number 32755 if the Cancel button is clicked. Under normal circumstances, this is would be a fatal error. Visual Basic would report the error number and a descriptive error message to you and ask whther you wanted Help, to End the program ar to Debug the program. The second statement turns off Visual Basic's normal run-time error trapping by saying that, if a run-time error occurs, the program should resume at the statement immediately after the one which caused the run-time error. It now becomes your responsibility to "trap" run-time errors and determine what should happen. This error trapping is done by the If statement which come immediately after the ShowOpen method that might cause the run-time error to occur. Err is an object that is available to all Visual Basic programs. Its Number property is equal to zero so long as no run-time error occurs. When a run-time error does occur, the Number property is set to a predetermined positive value. The Desription property is set to a short text description of the error that may (or may not) be helpful. The program explicitly tests to see whether the error number is 32755. (Yes, that's the value of the CommonDialof Constant cdlCancel.) If it is, an appropriate message is displayed and the procedure is exited. Should Err.Number be any value other than 32755 (including zero), the progam continues. Finally, the last new statement above returns responsibility for error trapping to Visaul Basic. This should always be done whenever you use an On Error Resume Next statmeent in your program. Failure to do so may lead to catastrophic results.
That's it. You now have a fairly robust ShowOpen procedure.

COMMON DIALOG TÜRKÇESİ

Bu örnekte CommonDialog kullanımını ve aynı zamanda API'lerin kullanımını öğrenecegiz. Visual Basic'de bir proje yaratın. Form üzerine 3 tane Command button yerleştirin.
Bunlardan 1 cisinin yandaki özellikleri belirtilen şekilde degiştiriniz. Name:open Caption : open
2 cisinin Name:exit Caption : exit yapınız.
3 cüsünün Name:play Caption : play yapınız.
Form üzerine bir adet'te Commondialog yerleştirin ve Name:Cdialog1 yapınız.
Formun en altına bir Textbox yerleştirin ve text özelligini boş bırakınız.



Daha sonra kod penceresindenGeneral Declarationsalanına aşagıdaki kodu girin.

Private Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" _ (ByVal lpszSoundName As Any, ByVal uFlags As Long) As Long Dim SoundBuffer As Long


Butonların click eventlerinede aşagıdaki kodu giriniz.


Private Sub play_Click()
If CDialog1.filename <>"" Then
SoundBuffer = sndPlaySound(CDialog1.filename, &H2)
If SoundBuffer <>1 Then
MsgBox "File doesn't play.", , "Error"
End If
Else CDialog1.ShowOpen
Text1.Text = CDialog1.filename
End If
End Sub


Private Sub open_Click()
CDialog1.ShowOpen
Text1.Text = CDialog1.filename
End Sub


Private Sub exit_Click()
End
End Sub


Artık programımız çalışmaya hazırdır. Şimdi API kullanımını biraz anlatmaya çalışalım.
Aşagıdaki API Winmm.dll dosyasında bulunan bir fonksiyondur. Declare deyimi ile biz bu fonksiyonu programımızda kullanacagımızı belirtiyoruz. sndPlaySound bizim kullanacagımız fonksiyonun adıdır.
Lib "xxxx" alanı ise bu fonksiyonun kayıltı oldugu library'nin ismidir. Alias alanı ise bu fonksiyonun lib deki takma adıdır. Daha sonra gelen parantez içindeki alanlar ise bu fonksiyona geçilecek olan parametrelerdir. Parantezden sonraki ifade ise fonksiyonun geriye ne tip değer döndürecegini belirten bir parametredir.

Herhangi bir API kullanmak istersek bunu mutlaka Declare deyimi ile programda tanımlamalıyız.

Private Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" _ (ByVal lpszSoundName As Any, ByVal uFlags As Long) As Long

API kullanımı ile ilerliyen haftalarda bir ders anlatılacagı için burada fazla üzerinde durmuyoruz.

CommonDialog kullanılması için ise form üzerine bir commondialog nesnesini yerleştirmemiz gerekiyor.Program çalıştırılınca CommonDialog penceresi form üzerinde gözükmez. Biz istedigimiz zaman gösterebiliriz. CommonDialog nesnesi üzerinde aşagıdaki işlemlerden birini uygulayabiliriz.

Cdialog1.Showopen : Bu özellik ile kullanıcıdan açılmak üzere bir dosya seçmesini saglayabiliriz.
Cdialog1.Showsave : Bu özellik ile kullanıcıdan herhangi bilgilerin kaydedilebilecegi bir dosya seçmesini saglayabiliriz. Cdialog1.Showcolor: Bu şekilde kullanıcı önüne renk paletini getirerek kullanıcının bir renk belirtmesini sağlayabiliriz. Cdialog1.Showfont : Bu ifade ile ise kullanıcıdan sistemde yüklü herhangi bir font özelligini seçmesini sağlayabiliriz. Cdialog1.ShowPrinter : Bununlada kullanıcının yüklü olan printerlardan birini seçmesini sağlayabiliriz.

Common Dialog

Project-->Components-->Microsoft Commont Dialog Control `ü components`i seçin . CommonDialog1`i formunuza ekleyin .
Project-->Project1 Properties (? Hangi proje ismini vermişseniz )-->Help File Name `den hazırlamış olduğunuz *.hlp ( ? Hangi help dosya ismini vermişseniz ) dosyasını giriniz . App nesnemizin HelpFile özelliği tasarım aşamasında set edilmiş olur . Ayrıca setup hazırlarken help dosyalarını da otamatik olarak ekletmiş oluruz .

Forma Components
Sub Command1_Click()
With CommonDialog1
.HelpFile=App.HelpFile
.HelpCommand=11 'içindekiler sekmesini görüntüler
.ShowHelp
End With
End Sub
‘*******Herhangi bir konu sayfasına erişmek istersek
Sub Command2_Click()
With CommonDialog1
.HelpFile=App.HelpFile
.HelpContext=1
.HelpCommand=1 'HelpContext = 1 numaralı konu sayfasının görünmesi
.ShowHelp
End With
End Sub


Common Dialog (Diyalog Pencereleri)

Microsoft Common Dialog 6.0 Componenti seçilir. Aç, Kaydet, Renk, Help, Yazdır ve Font diyalog kutularının çıkartılmasını sağlar.

CommonDialog1.Action = 1 Aç
CommonDialog1.Action = 2 Yeni Adla Kaydet
CommonDialog1.Action = 3 Renk
CommonDialog1.Action = 4 Font
CommonDialog1.Action = 5 Yazdır
CommonDialog1.Action = 6 Help

CommonDialog1.Action = 1 Aç

CancelError

Dosya aç kutusunda iptal düğmesine basılınca uyarı vermez.

CancelError = False

Flags

Dosya açma özelliklerini etkiler.

Flags = 1 Aç kutusu üzerinde tek eleman seçilebilir ve salt okunur kutusu seçili.
Flags = 2 Aç kutusu üzerinde tek eleman seçilebilir ve salt okunur kutusu seçili değil.
Flags = 4 Aç kutusu üzerinde tek eleman seçilebilir ve salt okunur kutusu olmaz
Flags = 256 Aç kutusu üzerinde tek eleman seçilebilir.
Flags = 512 Aç kutusu üzerinde birden fazla eleman seçilebilir. Win 3.1 gibi olur.
Flags = 4096 Klasörde olmayan bir dosya açılırsa hata kodu verir.

DialogTitle

Dosya aç kutusunun ismini değiştirir.

DialogTitle = "Dosya Aç"





DefaultExt

Dosya uzantısı belirtilmezse bile otomatik olarak uzantıyı ekler.

DefaultExt = "dat"

FileName

Dosya aç kutusunda açılmasını istediğiniz dosyalar.

FileName = "*.txt"

Filter

Dosya aç kutusunda açılmasını istediğiniz dosyalar.

Filter= "Text dosyaları (*.txt)|*.txt|Bitmap(*.bmp)|*.bmp|Tüm resimler(*.jpg;*.wmf;*.ico)| *.jpg;*.wmf;*.ico|Tüm dosyalar(*.*)|*.*|"

Filterİndex

Dosya aç kutusunda açılmasını istediğiniz dosyalardan defult olarak gelmesini istediğinizi yazarsınız. İlk sıradaki 1 numaradır.

CommonDialog1.FilterIndex = 2

İnitDir

Dosya aç kutusunda default olarak açılmasını istediğiniz diyrectory.

CommonDialog1.InitDir = "c:\program files"

CommonDialog1.Action = 2 Kaydet

Flags = 2 Kaydet kutusunda aynı isimli dosyaları kaydederken uyarı verir.

CommonDialog1.Action = 3 Color

Flags = 2 Color kutusunda ayrıntılarda açılır.
Flags = 4 Ayrıntılar gizlenir.

CommonDialog1.Action = 4 Font

Flags = 1 Screen Fontslar gelir.
Flags = 2 Printer Fontslar gelir.
Flags = 3 Tüm Fontlar gelir.
Flags = 257 Font kuusunda özellikli gelir.
Flags = 258 Font kuusunda özellikli gelir.
Flags = 8192 Min-Max arasında bir değer girilmezse uyarı verir.
Flags =131074 Font kutusunda yalnız TTF fontlar gözükür.
Flags =131330 Font kutusunda yalnız TTF fontlar gözükür ve özelliklidir.

CommonDialog1.Min = Minimum değer
CommonDialog1.Max = Maxsimum değer

CommonDialog1.Action = 5 Print

PrinterDefault = True ise varsayılan printerin ayarları aktif olur.
Copies = Kopya sayısı verilir.

Flags = 1 Yazdır kutusunda Seçili seçili olur.
Flags = 2 Yazdır kutusunda sayfalar seçili olur.
Flags = 4 Yazdır kutusunda Seçili kısım pasif olur.
Flags = 8 Yazdır kutusunda Sayfalar pasif olur ve harmanla açılır.
Flags = 16 Yazdır kutusunda Tümü seçili olur ve harmanlama şekli açılır.
Flags = 32 Yazdır kutusunda Dosyaya yazdır seçili olur.
Flags = 64 Yazdır kutusunda Yazıcı ayarları görünür.
Flags = 2048 Yazdır kutusunda Help menüsüde görünür.
Flags = 524288 Yazdır kutusunda Dosyaya yazdır kutusu pasif olur.
Flags = 1048576 Yazdır kutusunda Dosyaya yazdır ekranda olmaz.

Orientation = 1 Dikey 2 Yatay olur.

Örnek 1

Aç,Kaydet, Renk , Print, Font

Private Sub ac_Click()
On Local Error Goto hata
Dim a
CommonDialog1.Filter = "metin|*.txt|"
CommonDialog1.ShowOpen
Open CommonDialog1.FileName For Input As #1
Text1.Text = ""

While Not EOF(1)
Line Input #1, a
Text1 = Text1.Text + a + Chr(13) + Chr(10)
Wend
Close #1
Exit Sub
Hata:
Exit Sub

End Sub

Private Sub font_Click()
CommonDialog1.FontName = Text1.FontName
CommonDialog1.FontSize = Text1.FontSize
CommonDialog1.FontBold = Text1.FontBold
CommonDialog1.FontItalic = Text1.FontItalic
CommonDialog1.FontUnderline = Text1.FontUnderline
CommonDialog1.FontStrikethru = Text1.FontStrikethru
CommonDialog1.Color = Text1.ForeColor
'Bu kodları font CommonDialog1 açıldığınıda
'Text kutusunun özelliklerinin otomatik olarak gelmesini sağlar.

CommonDialog1.Flags = 257
CommonDialog1.ShowFont

Text1.FontName = CommonDialog1.FontName
Text1.FontSize = CommonDialog1.FontSize
Text1.FontBold = CommonDialog1.FontBold
Text1.FontItalic = CommonDialog1.FontItalic
Text1.FontUnderline = CommonDialog1.FontUnderline
Text1.FontStrikethru = CommonDialog1.FontStrikethru
Text1.ForeColor = CommonDialog1.Color

End Sub

Private Sub color_Click()
CommonDialog1.Flags = cdlCCPreventFullOpen
CommonDialog1.ShowColor
Text1.BackColor = CommonDialog1.Color
End Sub

Private Sub print_Click()
CommonDialog1.Flags = &H40
CommonDialog1.ShowPrinter
Printer.Print Text1
Printer.EndDoc
End Sub

Private Sub kay_Click()
Dim a
CommonDialog1.DialogTitle = "Kaydet"
CommonDialog1.DefaultExt = "txt"
CommonDialog1.Flags = 2
CommonDialog1.ShowSave
Open CommonDialog1.FileName For Output As #1
a = Text1
Print #1, a
Close #1
End Sub

UYGULAMA 2
Windows ortamında kullandığınız programlarda sık sık kullandığınız iletişim
kutularının ve yine windows işletim sisteminin kullanıcıya büyük kolaylıklar sağlayan
"Drag-Drop" yani "Sürükle-Bırak" özelliğinin kullanımı Visual Basic ortamında oldukça
kolaydır. Şimdi gerçekleştireceğimiz uygulama, windowsun bu iki özelliğinin
kullanımında giriş yapma amacındadır.
Şekil 2.1
1. Visual Basic ‘de yeni bir proje çalışmasına başlandığında , şekil 2.1 de
görülen ve programımızın görünen yüzü olan "Form 1" projeye otomatik olarak
eklenir. Şekil 2.1 de görülen form bir standart Microsoft formudur.
Command1
Command2
Command3
Label1
Command4
Command5
TextBox1
Shape2
Image1
Frame1
Image3
Shape1
Common
Dialog1
Image2
Şekil 2.2
2. Toolbar penceresini kullanarak formumuza 5 tane "Command Button", 1
tane "Label", 1 tane "Textbox", 1 tane "Frame", 3 tane "Image" ve 2 tane "Shape"
nesnesi ekleyin.
Şekil 2.3
3. Ayrıca formumuza 1 tane "CommonDialog" kontrolü eklememiz gerekiyor.
Ancak bu kontrol toolbar pencerenizde bulunmayabilir. "CommonDialog" kontrolünü
toolbar penceresine eklemek için, öncelikle toolbar penceresine sağ kliklenmeli ve
açılan pencereden "Components" işlevi seçilmelidir. Bu seçim ile şekil 2.3 de görülen
pencere ekrana gelecektir. Components penceresinde bulunan ve kontrollerin
isimlerinin yer aldığı listeden, " Microsoft Common Dialog Control" seçeneğinin
yanında bulunan kutu işaretlenmesi ve daha sonra "Uygula" butonuna basılması ile
"CommonDialog" kontrolünün simgesi toolbar üzerinde yer alır.
Şekil 2.4 Şekil 2.5
Şekil 2.6
4. Formumuza eklediğimiz Shape1 ve Shape2 nesnelerinin geometrik
şekillerini "Properties" penceresini kullanarak değiştireceğiz. Shape1 nesnesinin
geometrik formunun çember olması için , shape1 seçili konumda iken properties
penceresindeki shape1 nesnesinin "Shape" özelliğini "3-Circle" olarak değiştirin.
(Şekil 2.4)
Shape2 nesnesi ise şekil 2.6 da görüldüğü gibi yuvarlak köşeli dikdörtgen
formundadır. Bunun için ise yine shape2 nesnesi seçili iken properties
penceresinden, nesnenin "Shape" özelliği "4-Rounded Rectangle" olarak değiştirilir.
5. Shape1 ve shape2 nesnelerinin iç kısımlarını herhangi bir renk ile
doldurabilmek için öncelikle her ikisi içinde properties penceresinden "BackStyle"
özelliklerinin "Opaque" olarak değiştirilmesi gerekir. Daha sonra yine properties
penceresinden "BackColor" özelliği kullanılarak istenilen renk seçimi yapılır.
Uygulamamızda paletten beyaz renk seçilerek nesnelerin şekil 2.6 daki
görünümleri kazanması sağlanmıştır. Ayrıca nesnelerin bu zemin renkleri üzerine
"FillStyle" ve "FillColor" özellikleri kullanılarak düz, desenli dolgular yapılabilir.
Şekil 2.7
6. Form üzerindeki formun, command butonlarının, label nesnesinin ve text
kutusunun başlıklarını şekil 2.7 de görüldüğü gibi değiştireceğiz. Bu işlem için daha
önceki uygulamamızda olduğu gibi yine properties penceresinin kullanacağız.
Command butonlarının,formun ve labellerin başlık özelliğini properties pencersinde
"Caption" özelliği kontrol eder.
Textbox kontrolü ise yazı girdi kontrolü olarak kullanıldığı için, textbox
içerisinde bulunan yazı, properties penceresinde yer alan "Text" özelliği ifade eder.
Şekil 2.7 de görülen başlıklar bu nesnelerin properties penceresindeki ilgili özellikleri
karşısındaki kutulara girilir.
7. Windows ortamında çok sık kullanılan command butonların zemin renginin
değiştirilmesi, başlığının yazı karekterinin değiştirilmesi gibi görsel işlemler Visual
Basic ‘de olanaklıdır. Örneğin bu uygulamamızda command1 nesnesinin properties
penceresinden "Style" özelliğini "1-Graphical" yapıp daha sonra "BackColor" özelliği
ile herhangi bir renk seçerek Şekil 2.7 de görüldüğü gibi değiştirelim. Ayrıca başlığın
yazı karekterini değiştirmek için "Font" özelliğini kullanılır.
Şekil 2.8
8. Command1 nesnesinin "Drag-Drop" özelliğinden yararlanmak için bu
nesnenin "DragMode" özelliğini properties penceresinden "1-Automatic" olarak
değiştirin.
9. Formumuzun oluşturulmasında son işlem basamağı olarak image1 ve
image2 nesnelerine resim ataması yapacağız. Image3 nesnesine ise bu basamakta
herhangi bir resim ataması yapmayacağız. Bunun nedeni ise aşağıda kod yazımında
anlaşılacaktır. İlk olarak image1 nesnesine atama yapalım. Bunun için properties
penceresinde image1 nesnesinin özellikleri arasında yer alan "Picture" özelliğine
tıklamalı ve daha sonra açılan diyalog penceresinden atanacak resim dosyası
seçilmelidir. Aynı işlemi image2 nesnesi içinde yapmalısınız. Uygulamada image1
nesnesine boş bir çöp kutusu, image2 nesnesine ise dolu çöp kutusu resmi
atanmıştır.(Şekil 2.8)
10. Artık programımızın kod yazım basamaklarını gerçekleştireceğiz. Bu
işleme command2, command3, command4, command5 nesnelerinin tıklama
olaylarını yazarak başlayacağız. Öncelikle önceki uygulamamızda olduğu gibi kod
yazım penceresini ekrana getirin.
Şekil 2.9
11. Kod penceresinin nesneler kısmından "Command2" ‘yi seçin. Kod
penceresinin olaylar kısmından ise "Click" olayını seçin. Bu seçim ile otomatik olarak
"Private Sub Command2_Click()" ve "End Sub " satırları görülecektir. Command2
nesnesinin klik olayı için kodlarımızı aşağıda görüldüğü gibi bu iki satır arasına
yazacağız.
Private Sub Command2_Click()
CommonDialog1.ShowColor
Command2.BackColor = CommonDialog1.Color
Form1.BackColor = CommonDialog1.Color
Text1.BackColor = CommonDialog1.Color
End Sub
Programımızın kullanıcısı command2 butonuna tıkladığında yukarıda
görülen satırlardaki işlemler, aşağıdaki gibi sırasıyla yerine getirilecektir.
"CommonDialog1.ShowColor" satırı, commondialog1 kontrolümüz
bünyesinde bulunan renk seçimi iletişim kutusu ekrana gelmesini sağlayacak. (Şekil
2.9)
Diğer 3 satır ise sırasıyla command2,form1 ve text1 nesnelerinin zemin
rengini, renk seçimi iletişim kutusundan seçilen renk yapacak.
Şekil 2.10
12. Command3 nesnesinin "Click" olayı için aşağıdaki kodlar yazılmalıdır.
Private Sub Command3_Click()
CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects
CommonDialog1.ShowFont
Label1.Font.Name = CommonDialog1.FontName
Label1.Font.Size = CommonDialog1.FontSize
Label1.Font.Bold = CommonDialog1.FontBold
Label1.Font.Italic = CommonDialog1.FontItalic
Label1.ForeColor = CommonDialog1.Color
Label1.FontStrikethru = CommonDialog1.FontStrikethru
Label1.FontUnderline = CommonDialog1.FontUnderline
End Sub
"CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects" satırı ile "Standart
İletişim Kutusu Bayrakları" terimi karşımıza çıkmaktadır. Bu bayraklar yardımıyla
iletişim kutularının çeşitli ayarlarını yapabiliriz. Örneğin bu satırla, yazı tipi iletişim
kutusunda, ekran ve yazıcı için kullanılabilecek yazı tiplerinin yer alması için
"cdlCFBoth" bayrağı kullanılmıştır. Eğer bu bayrağı kullanmamış olsaydık iletişim
penceresinde herhangi bir yazı tipi olmazdı. "cdlCFEffects" bayrağını ise yazı tipi
iletişim kutusunda çizgi, altçizgi ve renk efektlerinin yer alması için kullandık.
"CommonDialog1.ShowFont" komut satırı, yazı tipi iletişim kutusunun
ekranda görülmesini sağlayacak. (Şekil 2.10)
Diğer satırlar ise label1 nesnesinin sırasıyla yazıtipi, yazı tipi boyutu, kalın ve
eğik yazı stili, rengi, üstü çizili ve alt çizgi özelliklerini, iletişim kutusundan seçilen
özelliklere göre değiştirirler.
Şekil 2.11
13. Command4 nesnesinin "Click" olayı için aşağıdaki kodlar yazılmalıdır.
Private Sub Command4_Click()
CommonDialog1.ShowSave
End Sub
Yazdığımız bu tek komut satırı ile şekil 2.11'de görülen kayıt iletişim
kutusunun ekranda görülmesi sağlanır. Bu iletişim kutusu için ekrana getirilmesi
dışında herhangi bir kod yazılmadığı için iletişim kutusunda yapılan seçimlerin
program üzerine herhangi bir etkisi olmayacaktır.
14. Command4 nesnesinin "Click" olayı için aşağıdaki kodlar yazılmalıdır.
Private Sub Command5_Click()
CommonDialog1.ShowPrinter
End Sub
Bu satırda ise yazıcı iletişim kutusunun ekranda görülmesi amaçlanmıştır.
Ancak bilgisayarınıza yüklü bir yazıcı yoksa, program hata mesajı verecektir.
Yukarıda olduğu gibi bu iletişim kutusu için de ayrıca herhangi bir kod yazılmadığı
için iletişim kutusunda yapılan seçimlerin program üzerine herhangi bir etkisi
olmayacaktır.
15. Fare, form üzerinde gezdirilirken herhangi bir ektuşla yada ektuş
olmadan, farenin butonlarının birisine basıldığında devreye girecek olan kodlar,
aşağıdaki gibi form nesnesinin "Mouse Down" olayına yazılmalıdır.
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Shift = vbShiftMask Then
CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects
CommonDialog1.ShowFont
Text1.Font.Name = CommonDialog1.FontName
Text1.Font.Size = CommonDialog1.FontSize
Text1.Font.Bold = CommonDialog1.FontBold
Text1.Font.Italic = CommonDialog1.FontItalic
Text1.ForeColor = CommonDialog1.Color
Text1.FontStrikethru = CommonDialog1.FontStrikethru
Text1.FontUnderline = CommonDialog1.FontUnderline
End If
If Shift = vbCtrlMask And Button = vbLeftButton Then
CommonDialog1.ShowPrinter
End If
If Shift = vbAltMask And Button = vbRightButton Then
CommonDialog1.ShowColor
Command2.BackColor = CommonDialog1.Color
Form1.BackColor = CommonDialog1.Color
Text1.BackColor = CommonDialog1.Color
End If
End Sub
Yukarıda anlatılan olay gerçekleştiğinde, yukarıdaki 3 şart kontrolü
yapılacaktır.
If Shift = vbShiftMask Then ve End If satırları arasındaki komutlar eğer "Shift
= vbShiftMask " şartı sağlanmış ise gerçekleşecektir. "Shift = vbShiftMask" şartı ise
şudur: Fare tıklandığında, klavyede basılı olan tuş (Shift), klavyenin shift tuşu
(vbShiftMask) olmalıdır. Yani form üzerinde herhangi bir yerde shift tuşuna basarak
farenin herhangi bir butonuna basıldığında, bu iki satır arasında yazılı olan komutlar
gerçekleşecektir. Aradaki bu komutların işlevi ise işlem basamağı 12'dekilerle aynıdır.
If Shift = vbCtrlMask And Button = vbLeftButton Then ve End If satırları
arasındaki komut ise eğer "Shift = vbCtrlMask " ve "Button = vbLeftButton " şartları
sağlanmış ise gerçekleşecektir. Burada yukarıdaki satırdan farklı olarak iki şart
istenmiştir. Şartlar ise şunlardır: Fare tıklandığında, klavyede basılı olan tuş (Shift),
klavyenin ctrl tuşu (vbCtrlMask) ve farenin tıklanan butonu sol buton " Button =
vbLeftButton" olmalıdır. Yani form üzerinde herhangi bir yerde ctrl tuşuna basarak
farenin sol butonuna basıldığında, bu iki satır arasında yazılı olan komutlar
gerçekleşecektir. Aradaki bu komutun işlevi ise işlem basamağı 14' de anlatıldı.
If Shift = vbAltMask And Button = vbRightButton Then ve End If satırları
arasındaki komut ise eğer "Shift = vbAltMask " ve "Button = vbRightButton " şartları
sağlanmış ise gerçekleşecektir. Burada ise istenen şartlar şunlardır: Fare
tıklandığında, klavyede basılı olan tuş (Shift), klavyenin alt tuşu (vbAltMask) ve
farenin tıklanan butonu sağ buton " Button = vbRightButton" olmalıdır. Aradaki
komutun anlamı ise işlem basamağı 11' de anlatıldı.
16. Formun yüklendiğinde, shape nesnelerinin bazı özelliklerinin
değiştirilmesi için aşağıdaki kodları yazmalıyız. Kodlar form nesnesinin "Load"
olayına yazılmalıdır.
Private Sub Form_Load()
Shape1.DrawMode = 16
Shape2.FillStyle = 7
Set Shape1.Container = Frame1
Image2.Visible=False
Image3.Visible=False
End Sub
İlk satır ile shape1 nesnesinin çizim şekli yani "DrawMode" özelliği 16 ya
eşitlenerek "Whiteness" seçilmiştir. Böylece shape1 nesnemiz tamamen beyaz
görünecektir. İkinci satır ise shape2 nesnesinin içinin dolduruluş şeklini yani "FillStyle"
özelliğini 7 ‘ye eşitleyerek, nesnenin içini çapraz çizgilerle dolduracaktır. Bu iki işlemi
kod yazmaya gerek kalmaksızın properties penceresinden de yapabiliriz.
Üçüncü satırda ise shape1 nesnesinin frame1'e bağlı olduğu belirtiliyor. Bu
satırla artık frame1, shape1'i kapsar. Shape1, frame1 in dışına çıkamaz.
Son iki satırda, nedeni daha sonraki işlem basamaklarında anlatılacak olan
image2 ve image3 nesnelerinin görünmezliği sağlanmıştır.
17. Kod yazımında gerçekleşen son olay ise; fare form üzerinde
gezdirilirken, farenin x ve y koordinatlarına bağlı olarak nesneler üzerinde
gerçekleşecek olaylardır. Bunlar için aşağıdaki kodlar formun "Mouse Move" olayına
yazılmalıdır.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Shape1.FillColor = RGB(X / 10, Y / 10, 30)
Shape2.FillColor = RGB(Y / 10, X / 10, 30)
Shape1.Move X + 100, Y + 100
Frame1.BackColor = RGB(X / 10, Y / 10, 255)
If X > 3000 Then
Shape2.BorderWidth = X / 500
End If
End Sub
Öncelikle şu bilinmelidir ki, formumuzun şimdi kullanmış olduğumuz "Mouse
Move" olayında, farenin koordinatları "x" ve "y", kullanıldıysa fare butonu "Button" ve
kullanıldıysa ektuş "Shift" değişkenleriyle tanımlanmıştır ve bu değerler temsil ettikleri
olaya göre otomatik olarak değerlerini kazanırlar.
İlk iki satırla shape1 ve shape2 nesnelerinin dolgu renkleri farenin x,y
koordinatlarına bağlı kılınmıştır. RGB renk modu üç ana renkten oluşur. Bunlar
sırasıyla kırmızı, yeşil ve mavidir. Bütün renkler bu üç rengin çeşitli oranlarda karışımı
ile oluşur. Bu üç rengin her biri 0 ve 255 arası değerler alırlar. "255", O rengin en açık
tonunu; "0" ise en koyu tonu olan siyahı; ara değerler ise ara tonları verir. Bunun
sonucunda her üçü de 0'a eşit olduğunda ortaya çıkan renk siyah, her biri 255 olursa
ortaya çıkan renk beyaz olur.
Biz ilk satırda sahpe1 nesnesinin dolgu renginin; x koordinatının 10 da 1 i
tonunda kırmızı, y koordinatının 10 da biri tonunda yeşil ve 30 tonunda da mavi
olmasını istedik.
İkinci satırda ise sahpe2 nesnesinin dolgu renginin; y koordinatının 10 da 1 i
tonunda kırmızı, x koordinatının 10 da biri tonunda yeşil ve 30 tonunda da mavi
olmasını istedik.
X ve y ye bağlı değerler 255 i geçtiğinde, yine 255 gibi işlem görülür.
Üçüncü satırda shape1 nesnesinin move özelliği kullanılarak hareket
etmesini sağlıyoruz. Ancak burada dikkat edilmesi gereken konu, frame1 nesnesinin
shape1 nesnesini kapsamasıdır. Dolayısıyla shape1'in hareketi için için verdiğimiz
koordinatlar frame1 için geçerlidir. Örneğin "Shape1.move 0,0" komut satırını
kullansak, shape1 formun sol üst köşesine değil frame1'in sol üst köşesine gider. Bu
satırda x+100 ve y+100 kullandığımız için shape1 daima x ve y değerlerinin 100
fazlasında bulunacaktır. Yani fare işaretçisini programımız çalıştırıldığında formun sol
üst köşesine götürülse; shape1, frame1 ‘in sol üst köşesinden her iki koordinatta 100
kadar ileride olacaktır.
Frame1.BackColor = RGB(X / 10, Y / 10, 255) satırı ile yaptırılan işlem ilk iki
satırdakinin aynıdır. Bu satırda frame1'in zemin rengi x ve y ye bağlı olarak
değişecektir. Ancak burada farklı olan ise, daima en açık mavi tonunun zemin rengi
içinde bulunacağıdır.
If X > 3000 Then
Shape2.BorderWidth = X / 500
End If
Mouse move olayında kullandığımız bu son komut satırında, yine bir şart
sunuyoruz. Eğer farenin x değeri 3000'den fazla olursa shape2 nin çerçeve kalınlığı,
x koordinatının 500 de biri kadar olacaktır. Program ilk çalıştırıldığında çerçeve
kalınklığı 1 olacak, farenin x koordinatı 3000'i geçtiğinde kalınlık bu artışla orantılı
artacak ve azalacaktır. Eğer formunuzun genişliği 3000 den az ise, çerçeve kalınlığı
hiç değişmeyecektir.
18. Herhangi bir nesne image1 nesnesi üzerine sürüklenip bırakıldığında
aşağıdaki komutlar gerçekleşecektir. Ancak uygulamamızda yalnızca command1
nesnesi için "Drag-Drop" özelliğini aktif ettiğimizden dolayı, image1 üzerine
command1 bırakıldığında bu olay gerçekleşecektir. Bu komutları kod penceresinde
image1 nesnesi için "DragDrop" olayına yazacağız.
Private Sub Image1_DragDrop(Source As Control, X As Single, Y As Single)
Image3.Picture = Image1.Picture
Image1.Picture = Image2.Picture
End Sub
İlk durumda image1 nesnesinin resmi şekil 2.8 ‘de ki gibi boş bir çöp
kutusudur. Image2 nesnesinin resmi ise dolu çöp kutusudur. Image3'e başlangıçta
herhangi bir resim ataması yapılmadığı için boştur.
Yapmak istediğimiz command1 nesnesi image1 nesnesine (boş çöp
kutusuna) bırakıldığında, image1 nesnesine dolu çöp kutusu resmi atanmasıdır.
Bunun için ilk satırda daha sonra kullanılmak üzere image1 ‘in resmi(boş çöp
kutusu) image3 ‘e atanır.
İkinci satırda ise image1 nesnesine image2 nesnesinin resmi (dolu çöp
kutusu) atanır.
Böylece sürükle-bırak olayı gerçekleştiğinde image1 nesnesi şekil 2.12 ‘de
görüldüğü gibi dolu çöp kutusu görünümü alır. Program çalıştırıldığında Image2 ve
image3 nesneleri şekil 2.12'de görüldüğü gibi görünmezdirler. ("Visible" özellikleri
"False" dır.)

19. Son olarak image1 nesnesi üzerine çift tıklandığında, tekrar boş çöp
kutusu görünümü kazanmasını sağlayan kodu,image1 nesnesinin "DblClick" olayına
yazacağız.
Private Sub Image1_DblClick()
Image1.Picture = Image3.Picture
End Sub
Bu komut satırı ile yukarıda image3 nesnesine atadığımız dolu çöp kutusu
resmini image1 nesnesine geri atıyoruz.Böylece image1 tekrar şekil 2.8 de ki
görüntüsünü kazanır.
Şekil 2.12
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 04:05:10
Data kontrolu

DATA CONTROL NESNESİNİN KULLANIMI

2.1. Visual Basic 5 İle Yazılım Geliştirme

Bütün uygulamalar, çok değişik türlerdeki yapısal bilgilere ihtiyaç duyar. Bu uygulamalar, muhasebe uygulamaları, bilimsel hesaplamalar yapan programlar, müşteri bilgilerine erişen programlar v.b. olabilir. Microsoft Visual Basic içindeki Data Access kullanıcılara uygulamada kullanılan verileri yönetebilmek için kullanılması gereken yapısal veritabanı sistemlerini, uygulamaların içinden yaratmak ve kullanmak için gerekli araçları sağlar.

Bu araçlar şunlardır:

1. Microsoft Jet Database Engine (Jet veritabanı motoru)
2. Data Control (Veri Tabanı kontrol nesnesi)
3. Data Access Object (DAO) –veri erişim nesnesi- programlama arabirimi.

Veri erişim nesneleri kullanarak, veritabanı yaratan veya var olan bir veri tabanlarına değişik biçimlerde erişimi sağlayan programlar yapmak mümkündür. Aşağıdaki veri tabanı biçimlerine veri erişim nesneleriyle erişmek mümkündür;

Microsoft Access
Mtrieve
dBASE
Microsoft FoxPro
Paradox
Open Database Connectivity (ODBC) client/server veritabanları (örneğin Microsoft SQL server veritabanı)

Yapısal veri tabanı sistemlerini yaratabilme ve bunlara erişebilme olanağı kullanıcıya programlama yaparken birçok kolaylık ve avantaj sağlar. Bu avantajlar şunlardır:

• Var olan veritabanı sistemlerine erişen programlar yazmak
• Uygulamanın verilerini diğer programlarla paylaşmasını sağlamak
• Programı basitleştirmek ( Alt düzey kütük işlemleriyle uğraşmak zorunda olmamak)

Visual Basic'de Jet veri tabanı motoruyla iletişim kurmak için iki tane yöntem vardır: Data Control nesnesi ve veri irişim nesneleri. Data Control nesnesi veritabanına programlamaya gerek duymadan sınırlı bir erişim sağlar. DAO modeli ise veri tabanı üzerinde tam bir kontrol sağlamaya yardımcı olan bir programlama arabirimi sağlar. Bu iki yöntem birbirini dışlamaz. Yani bir uygulamada her iki yöntemin de kullanılması gereken durumlar oluşabilir.

DAO modeli ilişkisel veri tabanı sistemlerinin yapısını modelleyen bir nesne kümesinden oluşur. Bu nesneler, veritabanı yaratma, tablo tanımlama, alan ve indeks tanımlama, tablolar arasında ilişki tanımlama ve veritabanını sorgulama vb. gibi işlemleri gerçekleştirmey, sağlayan birçok özellik ve metot sağlar.

Jet veri tabanı motoru, yukarıda belirtilen işlemleri veri tabanı dosyaları üzerinde fiziksel işlemlere dönüştürür ve ayrıca desteklenen veritabanları ile iletişimi sağlar.

Visual Basic ile veritabanı programlama yapılırken veri erişim nesnelerinin yaratılması ön plana çıkar. Bu nesneler Database, TableDef, Fiels ve Index gibi nesneleridir. Bu nesnelerin özellik ve metotları kullanılarak veritabanı üzerinde işlemler yapılır. İşlemlerin sonuçlarını Visual Basic formları üzerinde görmek için de sınırlandırılmış (bound) ve sınırlandırılmamış(unbound) kontrol nesneleri kullanılır.

Bu yaklaşım kod yazmayı basitleştirir ve uygulamayı veritabanının içsel yapısından ve verilerin getirilme mekanizmalarından soyutlar. Böylece uygulamayı geliştiren kişiye büyük bir esneklik sağlanmış olur. Ayrıca veritabanının türü değiştiğinde bile yazılan kodun bunu destelemesi için çok küçük değişiklikler yapmak yeterli olacağından sağlanan esnekliğin boyutunun daha da büyük olduğu görülmektedir. Veri erişim nesneleri kullanarak farklı türden veri tabanlarından tabloların birleştirilmesi mümkündür.

Visual Basic tarafından DAO ve Jet veritabanı motoru kullanılarak erişim yapılabilen üç veritabanı kategorisi vardır:

1. Visual Basic veri tabanları: Bunlar Microsoft Access veritabanı ile aynı biçimi kullanır. Bu veritabanlarına erişim ve üzerinde yapılacak işlemler Jet veritabanı motoru aracılığıyla doğrudan yapılabilir. Jet veritabanı motoru bu veritabanları üzerinde önemli derecede bir esneklik sağlar.

2. Dış veri tabanları (External Databases): ISAM (Indexed Sequential Access Method) biçiminde olan veri tabanları üzerinde Visual Basic ile işlem yapmak mümkündür. Bu veritabanı biçimleri şunlardır: Btrieve, dBASE III, dBASE IV, Microsoft FoxPro 2.0 ve 2.5, Paradox 3.x ve 4.0, Microsoft Excel, Lotus 1-2-3.

3. ODBC veritabanları: Bunlar ODBC standardına uyan client/server yapısındaki veritabanlarıdır. Bu tür veritabanlarına bir örnek olarak Microsoft SQL Server verilebilir. Visual Basic ile client/server uygulamaları yaratmak için veri erişim nesnesinin ODBCDirect modunu kullanmak gerekir. Böylece komutlar doğrudan dış sunucuya (server) iletilir ve orada çalıştırılır. Yani Jet veritabanı motoru devreden çıkarılır.


2.2. Data Control Nesnesi Kullanarak Veritabanına Erişim.

Data Control nesnesi kullanarak, değişik türdeki çoğu veritabanındaki bilgileri görüntülemek, değiştirmek ve bu veritabanlarına yeni bilgiler eklemek mümkündür. Data Control nesnesi kullanılarak üzerinde işlem yapılabilen veri tabanları şunlardır: Microsoft Access, Btrieve, dBASE, Microsoft FoxPro®, ve Paradox. Bunların dışında Microsoft Excel, Lotus 1-2-3, ve standart ASCII metin kütüklerine de Data Control nesnesi kullanılarak erişmek mümkündür. Ayrıca Data Control nesnesi Microsoft SQL server veya Oracle gibi ODBC veritabanlarının verilerine uzak (remote) erişimi de sağlamaktadır.

Data Control nesnesi veri erişimini Jet veritabanı motoru kullanarak gerçekleştirir. Bu veritabanı motoru Microsoft Access ile eşdeğer bir veritabanı yönetimi sağlar. Data Control nesnesi kullanarak fazladan bir kod yazmaya gerek duymaksızın veritabanı erişimi mümkündür. Şimdi Data Control nesnesi kullanımını örneklerle açıklayalım.



Örnek: Data Control nesnesi kullanımı.

Bu örnekte hazır bir veri tabanına Data Control nesnesi kullanılarak nasıl erişim sağlandığı gösterilecektir. Şimdi bu işlemi adımlar halinde gösterelim.

ADIM 1:Visual Basic ile beraber gelen BIBLIO.MDB veritabanındaki Authors tablosunu kullanalım. Authors tablosunun alanları aşağıdaki gibidir.


Sütun
Veri Türü Tanımı
Au_ID Long Integer Asıl Anahtar
Author Text Yazarın Adı
Year Born Integer Yazarın Doğum yıl


ADIM 2 : Standart EXE türünden yeni bir proje yaratın. Formun alt kısmına bir Data Control nesnesi yerleştirin ve aşağıdaki özelliklere belirtilen değerleri verin.

Nesne
Özellik Değer
Form Caption Yazarlar Tablosu
Data Control Align 2-Align Bottom
Name datYazar

Data Control nesnesinin Connect özelliği data control nesnesinin kullanacağı veritabanının türünü belirler. Properties penceresinden bu özellik değiştirilmeye çalışıldığında bir uyumlu veritabanı listesi çıkar, bu listeden bağlanacak veritabanının türü seçilebilir. Bu örnek için Connect değerini Access olarak değiştirin (zaten başlangıç değeri de budur).

Data Control nesnesinin DatabaseName özelliği kullanılacak veritabanının fiziksel dosya ismini belirler. Bu özelliği değiştirmek için yanındaki düğmeye basın. Visual Basic ana dizininden BIBLIO.MDB veritabanı dosyasını seçin.

Data Control nesnesinin RecordSet özelliği kullanılacak veritabanının kayıtları birarada ne şekilde tuttuğunu belirler. Bu değer;

-Table, sadece bir tabloya dayanan kayıt türü
-Dynaset, birden fazla tabloyu kullanan sorgular
-Snapshot, birden fazla tabloyu kullanan sorgular(kayıtlar değiştirilemez)

Bu örnek için RecordSet değerini 0-Table olarak değiştirin.

RecordSource özelliği : kullanılacak tabloyu belirler. Bu özelliği Authors olarak seçin.

BOFAction özelliği : En baştaki tutanağa gelinmişse bundan sonra ne yapılacağını belirler. Alabileceği değerler şunlardır:

MoveFirst : Data Control nesnesinin en başta kalmasını sağlar.

BOF : Data Control nesnesinin en başta kalmasını, geri tuşunun kullanımını iptal etmesini ve Validation adlı olay yordamının çağrılmasını sağlar. (Burada bu özelliğin değerini MoveFirst olarak değiştirin.)

EOFAction özelliği: Eğer en sondaki tutanağa gelinmişse bundan sonra ne yapılacağını belirler. Alabileceği değerler şunlardır.

MoveLast : Data Control nesnesinin en sonda kalmasını sağlar.

EOF : Data Control nesnesinin en sonda kalmasını, ileri tuşunun kullanımını iptal etmesini ve Validation adlı olay yordamının çağrılmasını sağlar.

AddNew : Tabloya yeni bir tutanak ekler. Bu değer kullanılırken dikkatli olunmalıdır.Çünkü farkında olmadan bir çok boş tutanak eklemeye neden olabilir.(Burada bu özelliği MoveLast olarak değiştirin.)

ReadOnly özelliği : True olduğunda tabloda değişiklik yapılması engellenmiş olur. Eğer RecordType özelliği Snapshot seçilmişse bu özellik değiştirilemez.


ADIM 3 : Data Control nesnesi tarafından yaratılan kayıt kümesi herhangi bir kod yazmaya gerek duyulmadan dolaşılabilir. Bu işlem Data Control nesnesinin üzerindeki düğmelerle gerçekleştirilir.

Program çalıştırıldığında belirtilen tutanak kümesi (RecordSet) üzerinde dolaşılabilir, fakat sonuçları herhangi bir şekilde form üzerinde gösterilmediğinden bu kullanıcı tarafından fark edilmez.

ADIM 4 : Herhangi bir anda aktif olan tutanağı form üzerinde göstermek için formun üzerine verileri göstermek için kullanılacak olan nesnelerin konması gerekir. Form üzerinde veritabanı ile ilişkilendirilebilecek standart Visual Basic nesneleri şunlardır.

• TextBox
• ListBok
• CheckBox
• ImageControl
• Label
• PictureBox

Formun üzerine aşağıdaki gibi üç tane TextBox ve üç tane de Label yerleştirin.



Bu formdaki elemanların özelliklerini de aşağıdaki tabloya göre düzenleyin.

Nesne
Özellik Değer
TextBox DataSource datYazar
DataField Au_ID
Name txtYNo
TextBox DataSource datYazar
DataField Author
Name txtYAd
TextBox DataSource datYazar
DataField Year Born
Name txtDYil
Label Caption Yazar No
Name lblYNo
Label Caption Yazar ADI
Name lblYAd
Label Caption Dogum YILI
Name lblDyil

ADIM 5: Programı çalıştırın. Ekranda Yukarıdaki form görüntüsü çıkacaktır. Formda Görüleceği gibi tablonun ilk tutanağı ekrana gelmiştir. Şimdi Data Control nesnesi üzerindeki düğmelerle veritabanı tablosu üzerinde dolaşmak mümkündür.


2.3. Data Control Nesnesinin Olaylarını ve Metotlarını Kullanma

Data Control nesnesinin de tüm nesneler gibi olay yordamları, metotları ve özellikleri vardır. Bunlar veri tabanı üzerinde işlem yapan uygulama yazılımları geliştirmeyi kolaylaştırır. Data kontrol nesnesinin olay yordamlarının ve metotlarının kullanımı için aşağıdaki örneği gerçekleştirelim.

Örnek: Data Control Nesnesi kullanarak veritabanı üzerinde ekleme, silme, arama ve değiştirme işlemlerinin yapılması.

Bu örnekte önce VB Aplication Wizard (uygulama sihirbazı) kullanarak bir şablon uygulama yaratalım. Bunun için yine BIBLIO.MDB veritabanının bu sefer Publishers tablosunu kullanalım. İşlemler aşağıda adımlar halinde sıralanmıştır.

1. Add-Ins menüsünden Application Wizard seçeneğini seçerek sihirbazı çalıştırın.
2. SDI seçeneğini seçin.
3. Clear All düğmesine basarak menüleri kaldırın.
4. Resource File kullanılmadığını belirtin.
5. Internet erişimi istenmediğini belirtin.
6. Standart formların hiçbirini istemediğinizi belirtin.
7. Bu aşamada Yes, create forms from my database seçeneğini seçip veritabanı türünü ve kullanacağınız veritabanı türünü belirleyin. Bu örnekte, veritabanı biçimi, Access ve veritabanı dosyası ise Visual Basic dizinindeki BIBLIO.MDB olarak belirlenmelidir.
8. Listelenen tablolardan Publishers tablosunu seçin.
9. Projenin ismini de YAYINEVI olarak değiştirin.
10. Şimdi yeni yaratılmış olan projeden frmPublishers formu dışındaki formları silin.
11. FrmPublishers formundan Grid butonunu ve bu düğmeye ait cmdGrid_Click kodunu silin.
12. Project menüsünden Properties seçeneğini seçip başlangıç formu olarak frmPublishers formunu seçin. Üretilen kodu inceleyelim.

Ekleme:

Private Sub cmdAdd_Click()
Data1.Recordset.AddNew
End Sub

AddNew metodu veritabanına tüm alanları boş bir tutanak ekler. Veri eklemek için kontrolün en baştaki metin kutusuna geçmesini sağlamak için aşağıdaki satır bu yordamın sonuna eklenmelidir.

txtFields(0).SetFocus

Silme:

Private Sub cmdDelete_Click()
With Data1.Recordset
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
End Sub

Delete metodu tutanağı tablodan siler. Eğer silinen tutanak tek tutanak ise bir hata oluşur. Bu hata oluştuğunda Data1 nesnesinin Data1_Error olayı çağrılır. Bu olay aşağıdadır.

Private Sub Data1_Error(DataErr As Integer, Response As Integer)
MsgBox "Data error event hit err:" & Error$(DataErr)
Response = 0
End Sub

Veri erişimi sırasında bir hata oluştuğunda bu olay çağrılır.

Refresh:

Private Sub cmdRefresh_Click()
'sadece çok kullanıcılı uygulamalarda gereklidir
Data1.Refresh
End Sub

Bu metod da aktif olan tutanağın yeniden oluşturulmasını sağlar.

Değiştirme:

Private Sub cmdUpdate_Click()
Data1.UpdateRecord
Data1.Recordset.Bookmark = Data1.Recordset.LastModified
End Sub

UpdateRecord metodu aktif olan tutanağın bilgilerini kaydeder. Yukarıda görülen koddaki ikinci satır aktif tutanağın değişen tutanak olmasını sağlar. Bu satır yazılmazsa aktif tutanak tablonun ilk tutanağı olur.

Bulma:

Bulma işleminin yukarıdaki gibi hazır bir metodu yoktur. Bu yüzden bu kodu kendimiz yazmalıyız. Önce formu aşağı doğru bir miktar uzatın ve forma aşağıdaki nesneleri ekleyin.

TextBox Name txtFind
CommanButton Caption &Find
Name cmdFind

Bu nesnelerden txtFind, aranacak olan yayınevinin ismini girmek için kullanılacak ve cmdFind butonu da arama işlemini gerçekleştirmek için kullanılacaktır. Arama işlemini gerçekleştirmek için aşağıdaki kodu cmdFind_Click olayına girin.

Private Sub cmdFind_Click()
Data1.Recordset.FindFirst "Name = '" & txtFind & "'"
End Sub

Burada Data1 nesnesinin metotlarından olan FindFirst arama için kullanılmıştır. Bu kod bize tablodaki ilk tutanağı bulur. Aynı şekilde son tutanağı bulmak için FindLast, birsonraki tutanağı bulmak için FindNext, bir önceki tutanağı bulmak için FindPrevious metotlarını kullanmak mümkündür.

Yukarıdaki kodda FindFirst metoduna parametre olarak verilen kısmı arama kriterini belirler. Eğer arama kriteri adının içinde "Microsoft" geçen yayınevini bul gibi olursa bu aşağıdaki gibi belirtilmelidir.

Data1.Recordset.FindFirst "Name LIKE '*" & txtFind & "*'

Aranan nitelikte bir tutanak bulunmadığı takdirde Data1.Recordset.NoMatch adlı özellik True değerini alır.

Data Control Nesnesinin diğer olayları:

Private Sub Data1_Reposition()
Screen.MousePointer = vbDefault
On Error Resume Next
Data1.Caption = "Record: " & CInt( (Data1.Recordset.RecordCount * _ (Data1.Recordset.PercentPosition * 0.01)) + 1)
End Sub

Bu olay aktif olan tutanak değiştiğinde çağrılır. Bu yordamdaki son satır Data1 nesnesinin başlığını o andaki tutanağın numarasını gösterecek şekilde değiştirir.

Private Sub Data1_Validate(Action As Integer, Save As Integer)
Select Case Action
Case vbDataActionMoveFirst
Case vbDataActionMovePrevious
Case vbDataActionMoveNext
Case vbDataActionMoveLast
Case vbDataActionAddNew
Case vbDataActionUpdate
Case vbDataActionDelete
Case vbDataActionFind
Case vbDataActionBookmark
Case vbDataActionClose
Screen.MousePointer = vbDefault
End Select
Screen.MousePointer = vbHourglass
End Sub

Bu olay kodun içindeki Select deyiminde belirtilen veritabanı işlemlerinden sonra çağrılır. Parametre olarak verilen Action değeri hangi işlemden sonra çağrıldığını belirtir. Save parametresi de verinin değişip değişmediğini belirtir.

Programın çalışır haldeki son durumu aşağıdaki gibidir.

2.4. Activex Data Bound Kontrol Nesnelerini Kullanma
Visual Basic içinde veritabanı ile bağlanabilen birçok kontrol nesnesi bulunmaktadır. Bunların yanısıra birçok ActiveX kontrol nesnesi de mevcuttur. Veritabanı ile ilişkilendirilebilen içsel kontroller daha önce de sözkonusu edilen;

• Check box
• Image
• Label
• Picture box
• Text box
• List box
• Combo box

kontrolleridir.



ActiveX kontrol nesneleri ise

• Data-bound list box
• Data-bound combo box
• MSFlexGrid
• Apex Data-Bound Grid (DBGrid)
• MaskedEdit

kontrol nesneleridir.

Karmaşık kullanıcı arabirimlerinde, bu ActiveX kontrol nesneleri veritabanı kullanımını daha da fonksiyonelleştirir. Böylece kullanıcının, karmaşık bir veritabanı ile çalışırken daha kolay ve hatasız işlem yapması sağlanır. Sağlanan kolaylıklar, tutanak kümelerinin tümüne liste halinde erişim, verilerin gruplanması gibi veritabanının işlevselliğini arttırıcı işlemlerdir.

ActiveX kontrollerini kullanmadan önce form üzerine Data Control nesnesinin yerleştirilmiş ve Project menüsünün References seçeneği kullanılarak ihtiyaç duyulan ActiveX kontrollerinin seçilmesi ve ayrıca Data Access Object (DAO) kütüphanesinin de seçili olmasını sağlamak gerekir.

Bu genel açıklamalardan sonra, ActiveX kontrol nesnelerinin kullanımına örnekler verelim.

Data Bound ListBox ve Data Bound ComboBox kullanımı basittir. Daha önce kullanılan TextBox kullanımı ile benzerdir. ListBox ve ComboBox nesneleri ilişkilendirildikleri tablo alanı ile otomatik olarak doldurulur.

Örnek: Bir Data Bound ComboBox nesnesinin sorgu sonuçlarıyla doldurulması.
Yeni bir proje yaratın, forma aşağıdaki nesneleri ekleyin.

Form
Caption YAYINEVLERI
Name frmYEvi
DataControl Name datYEvi
Connect Access
Databasename BIBLIO.MDB
RecordsetType 2-Snopshot
Recordsource Select Name from Publishers
Visible False
DBCombo Name dbcYEvi
Style 2-Dropdown List
RowSource datYEvi
ListField Name



Yukarıda görüleceği gibi DataControl nesnesinin RecordSource özelliğine Select Name from Publishers ifadesi yazılmıştır. Bu ifade bir SQL sorgusudur. Bu ifadeyle Publisher Tablosundan Yayınevi adları alanı seçilir ve bir liste oluşturulur.

DBCombo kontrol nesnesinin RowSource özelliği ilişkilendirileceği Data Control nesnesini belirler. ListField özelliği ise listelenecek olan alanı belirler.

Program çalıştırıldığında aşağıdaki ekran görüntüsü belirecektir.



DBCombo nesnesinin üç farklı biçimi vardır. Bunlar;

Dropdown combo Metin kutusu ve listeden oluşur. Metin kutusuna listede olmayan elemanlar girilebilir. Yandaki ok düğmesine basıldığında aşağı doğru bir liste açılır.

Simple combo Listesi aşağı doğru açılan türden değildir. Listede olmayan elemanlar girilebilir.

Dropdown list Aşağı doğru açılan bir listesi vardır. Listede olmayan elemanlar metin kutusuna girilemez.

Örnek : İki Data Control nesnesinin aynı anda kullanımı ve DBCombo kontrol nesnesinin önemi.

DBCombo nesnesinin önemi birden fazla tablo ile işlem yapmak gerektiğinde daha da açık bir şekilde kendisini gösterecektir. Bir veritabanında iki ayrı tablo olduğunu düşünelim. Bunlardan 1. Tablodaki bir alan 2. Tablodaki bir alanı referans olarak gösteriyorsa, 1. Tabloya veri girileceği zaman referans gösteren alana girilecek veri 2. Tabloda olmak zorundadır. Bu bilginin var olup olmadığının kontrol edilmesi veya var olan bir bilginin girilmesi için bir listeye ihtiyaç duyulur.

Bu durumu örneklemek için daha önce de kullandığımız BIBLIO.MDB veritabanındaki iki tabloyu göz önüne alalım. Bu tablolar, Titles (kitaplar) ve Publishers (Yayıncılar) tablolarıdır. Kitap bilgilerinin tutulduğu Titles tablosunda yayıncılar tablosu olan Publishers tablosuna referans gösteren PubId (Yayıncı numarası) adlı bir alan mevcuttur. Bu alana girilecek olan değer var olmayan bir yayıncının numarası olamayacağından önce varlığı kontrol edilmelidir.

Bu durumu daha açık hale getirmek için yeni bir proje başlatın ve aşağıdaki nesneleri projeye ekleyin. Formun genel görünümü ileride verilmiştir. Nesnelerin yerleşim planı için ilerideki form görünümünü kullanın.

Form
Caption Kitap Adları
Name frmKitaplar
DataControl Name datYEvi
Connect Access
Databasename BIBLIO.MDB
RecordsetType 2-Snopshot
Recordsource Select PubID,Name
From Publishers Visible False
CommandButton Name cmdKapat
Caption &Kapat
CommandButton Name cmdDegistir
Caption &Değiştir
CommandButton Name cmdYenile
Caption &Yenile
CommandButton Name cmdSil
Caption &Sil
CommandButton Name cmdEkle
Caption &Ekle
DataControl Name datKitap
Align 2- AlignBottom
Connect Access
Databasename BIBLIO.MDB
Readonly False
RecordsetType 1-Dynaset
RecordSource Titles
DBCombo Name dbcYEvi
DataField PubID
DataSource datKitap
ListField Name
BoundColumn PubID
Text Yayinevleri
RowSource datYEvi
Style 2- Dropdown list
TextBox Name txtKAd
DataField Title
DataSource datKitap
TextBox Name txtYil
DataField Year Published
DataSource datKitap
TextBox Name txtISBN
DataField ISBN
DataSource datKitap
TextBox
Name txtTanim
DataField Description
DataSource datKitap
TextBox Name txtNotlar
DataField Notes
DataSource datKitap
TextBox Name txtKonu
DataField Subject
DataSource datKitap
TextBox Name txtYorumlar
DataField Comments
DataSource datKitap
Multiline 1-True
ScrollBar 2-Vertical

Bunlardan başka 8 tane de Label yerleştirin ve başlıklarını ileride verilecek olan form görüntüsünden yararlanarak değiştirin.

Şimdi aşağıdaki kodu frmKitaplar formuna ekleyin.

Private Sub cmdDegistir_Click()
datKitap.UpdateRecord
datKitap.Recordset.Bookmark = datKitap.Recordset.LastModified
End Sub

Private Sub cmdEkle_Click()
datKitap.Recordset.AddNew
End Sub

Private Sub cmdKapat_Click()
Unload Me
End Sub

Private Sub cmdSil_Click()
datKitap.Recordset.Delete
datKitap.Recordset.MoveNext
End Sub

Private Sub cmdYenile_Click()
datKitap.Refresh
End Sub

Private Sub datKitap_Error(DataErr As Integer, Response As Integer)
MsgBox "Hata: " & Error$(DataErr)
Response = 0
End Sub

Private Sub datKitap_Reposition()
Screen.MousePointer = vbDefault
On Error Resume Next
datKitap.Caption = (datKitap.Recordset.AbsolutePosition + 1) _
& ". TUTANAK"
End Sub

Programı çalıştırın. Aşağıdaki ekran görüntüsü çıkacaktır.

Şimdi, DBCombo kontrol nesnesinin özelliklerini tekrar inceleyelim

DBCombo
Name dbcYEvi
DataField PubID
DataSource datKitap
ListField Name
BoundColumn PubID
Text Yayinevleri
RowSource datYEvi
Style 2- Dropdown list

DataSource özelliği Varlığı kontrol edilecek verilerin alınacağı DataControl nesnesini belirler. Burada Kitaplar tablosu.

RowSource özelliği Listeye konacak olan verilerin alınacağı DataControl nesnesini belirler. Burada Yayıcılar tablosundan seçilen kısım.

ListField özelliği Listelenecek alanı belirler. Burada Yaınevinin adı.

BoundColumn özelliği Referans gösterilen tablo alanını belirler. Burada Yayıncılar tablosundan Yayıncı numarası.

DataField özelliği Karşılaştırılacak olan alanı belirler. Burada Kitaplar tablosundan Yayıncı numarası.

Tablolardan görüleceği gibi, Kitaplar tablosunda Yayıncı adı alanı bulunmamaktadır. Yayıncı adına erişmek için buradaki, Yayıncı numarası (PubID) alanından faydalanılmaktadır. Bu numaranın Yayıncılar tablosunda gösterdiği yayıncının adı alınıp listeye konmaktadır. Yeni bir kayıt eklenirken Yayıncı adını listeden seçmek, eklenecek olan kayda yayıncı numarası vermekle eşdeğerdir. Yayıncı numarası otomatik olarak kayda eklenecektir.

Örnek : Data Bound Grid kontrol nesnesinin kullanımı.

Data Bound Grid kontrol nesnesi, verilerin çizelgeler halinde gösterilebilmesini ve değiştirilebilmesini sağlar. Data Control nesnesi ile doğrudan bağlanabilir. Bu özellik tablo içeriğinin doğrudan çizelgeye aktarılmasını sağlar. Kullanımı en basit Data Bound Control nesnelerinden biridir. Çalışır duruma gelmesi için sadece yapılması gereken DataSource özelliğinin değiştirilmesi yeterlidir.

ADIM 1 : Yeni bir proje yaratın. Aşağıdaki nesneleri formun üzerine ekleyin.

Form
Caption Data Bound Grid
Name frmGrid
DataControl Connect Access
Databasename BIBLIO.MDB
Name datKitap
RecordSetType 1-Dynaset
RecordSource Titles
Visible False
Data Bound Grid DataSource datKitap
Name dbgKitap



ADIM 2 : Bir önceki örnekte kullanılan CommandButton nesnelerinin aynısını tekrar formun üzerine yerleştirin ve bunlara ait kodları da bir önceki örnekteki gibi yazın. Bu kodun yanısıra aşağıdaki kodu da forma ekleyin.

Private Sub datKitap_Error(DataErr As Integer, Response As Integer)
MsgBox "Hata: " & Error$(DataErr)
Response = 0
End Sub

Private Sub dbgKitap_HeadClick(ByVal ColIndex As Integer)
datKitap.RecordSource = "Select * From Titles Order By [" & _
dbgKitap.Columns(ColIndex).DataField & "]"
datKitap.Refresh
End Sub

Burada ilk yordam herhangi bir hata oluştuğunda hatanın pas geçilmesini, ikinci yordam ise çizelgedeki sütunlardan birine basıldığında çizelge içeriğinin o sütuna göre sıralı olmasını sağlar. Bunun için bir SQL sorgusu kullanılmaktadır. Sıralamayı sağlayan kısım SQL sorgusundaki Order By ile başlayan kısımdır.

Programın çalışması aşağıdaki gibi olacaktır.


Buradaki çizelge Kitap ismine göre sıralıdır. Bu Kitap adı(Title) yazan yere mouse ile basılarak sağlanmıştır.

Örnek : MSFlexGrid Control nesnesinin kullanımı.

Bu kontrol nesnesi Data Bound Grid nesnesinin sağladığı özelliklerin hepsini sağlar. Farklı bir özelliği, üzerinde değişiklik yapılamamasıdır. Bu nesne verilerin gösterilmesinde, gruplanmasında ve yönetiminde çok büyük avantajlar sağlar. Bu örnekte MsFlexGrid nesnesinin bazı özelliklerinin ve metotlarının kullanımı konu edilecektir.

Yeni bir proje çalıştırın. Aşağıdaki nesneleri bu projedeki formun üstüne yerleştirin. Nesneleri yerleştirirken ileride verilecek olan form görüntüsünü referans olarak kullanabilirsiniz.

Form
Caption Flex Grid
Name frmFlexGrid
DataControl Connect Access
Databasename BIBLIO.MDB
Name datYazar
RecordSource Authors
Visible False
MsFlexGrid Name MsFlexGrid1
DataSource datAuthors
AllowBigSelection False
GridLines 0-flexGridNone
GridLinesFixed 0-flexGridNone
AllowUserResizing 1-flexResultsColumns

Bunlardan başka 5 tane de CommandButton yerleştirin ve Caption özelliklerini sırasıyla; Grid Lines, Grid Lines Fixed, ForeColor, Font ve BackColor olarak değiştirin. Aşağıdaki kodu frmFlexGrid formuna ekleyin.

Private Sub Command1_Click()
If MSFlexGrid1.GridLines < flexGridRaised Then
MSFlexGrid1.GridLines = MSFlexGrid1.GridLines + 1
Else
MSFlexGrid1.GridLines = flexGridFlat
End If
End Sub

Private Sub Command2_Click()
If MSFlexGrid1.GridLinesFixed < flexGridRaised Then
MSFlexGrid1.GridLinesFixed = MSFlexGrid1.GridLinesFixed + 1
Else
MSFlexGrid1.GridLinesFixed = flexGridFlat
End If
End Sub

Private Sub Command3_Click()
Static iClicks As Integer
Select Case iClicks
Case 0: MSFlexGrid1.CellForeColor = &HFF&
Case 1: MSFlexGrid1.CellForeColor = &HFF00&
Case 2: MSFlexGrid1.CellForeColor = &HFF0000
Case 3: MSFlexGrid1.CellForeColor = 1: iClicks = -1
End Select
iClicks = iClicks + 1
End Sub

Private Sub Command4_Click()
Static iClicks As Integer
Select Case iClicks
Case 0: MSFlexGrid1.CellFontBold = 1
Case 1: MSFlexGrid1.CellFontItalic = 1
Case 2: MSFlexGrid1.CellFontBold = 0
Case 3: MSFlexGrid1.CellFontItalic = 0: iClicks = -1
End Select
iClicks = iClicks + 1
End Sub

Private Sub Command5_Click()
Static iClicks As Integer
Select Case iClicks
Case 0: MSFlexGrid1.CellBackColor = &HFF&
Case 1: MSFlexGrid1.CellBackColor = &HFF00&
Case 2: MSFlexGrid1.CellBackColor = &HFF0000
Case 3: MSFlexGrid1.CellBackColor = &HFFFFFF: iClicks = -1
End Select
iClicks = iClicks + 1
End Sub


Burada ilk iki yordam çizgi biçimini basıldıkça döngü halinde değiştirir. Diğer yordamlar da sırasıyla aktif olan hücrenin yazı rengini, font biçimini ve geri plan rengini yine döngü halinde değiştirir.

Programın çalışma sırasındaki görünüş örneği aşağıdadır.



Örnek: Şimdi yukarıdaki örnek üzerinde biraz değişiklik yapıp MSFlexGrid kontrol nesnesinin bir özelliğini daha görelim.

ADIM 1 : Yukarıdaki formu sağa doğru biraz genişletip ileride gösterilen biçime getirin. Bu forma bir CheckBox yerleştirin ve Caption özelliğini Merge Cells olarak değiştirin. Bu hücreleri birleştirmek için kullanılacak olan işaret kutusudur.

ADIM 2 : datYazar Data Control nesnesinin aşağıdaki özelliklerini değiştirin.

Name
datTKitap
RecordSource All Titles

ADIM 3 : Aşağıdaki kodu frmFlexGrid formunun sonuna ekleyin.

Private Sub Init()
Dim i As Integer
MSFlexGrid1.Row = 0
For i = 0 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Col = i
MSFlexGrid1.CellFontSize = 8
MSFlexGrid1.CellAlignment = 1
MSFlexGrid1.MergeCol(i) = True
Next i
MSFlexGrid1.MergeCells = 0
End Sub

Private Sub Check1_Click()
MSFlexGrid1.MergeCells = Check1
End Sub


Burada init diye adlandırılan yordam MSFlexGrid nesnesinin sütunlarının birleşmeye uygun hale getirilmesini ve görünümünün düzgün olmasını sağlar. Bu yordam Form_Load olay yordamında çağrılmalıdır.

Programın bu yeni haliyle çalışması aşağıdaki gibidir. Görüleceği gibi aynı olan değerler birleştirilmiş ve tek bir hücre haline getirilmiştir.

Bu özelliklerinden başka MSFlexGrid yapısında hücrelere resim yerleştirmek de mümkündür.

MSFlexGrid yapısı DataControl nesnesi kullanılmadan da kullanılabilir. Bu durumda hücreleri doldurmak için AddItem metodu kullanılır.



THE CONTROL DATA CORPORATİON

1957 founded by ex-ERA employees in Minneapolis, Minnesota
1958 Seymour Cray joins CDC
1959 CDC 1604 first shipment. This a 48-bit machine close to the von Neumann proposal, with added index registers. Related to the ERA 1103A.
1959 CDC 160 first shipment. This is a 12-bit computer, the first minicomputer. Strong influence on DEC PDP early models as well as all further minicomuters. Used either stand-alone or as frontend to the 1604.
1962 CDC 3000 family, not done by Seymour Cray (who is working on the 6600 together with Thornton and a design crew totaling 34, at Chippewa Falls). Upward compatible to 1604, with added functionality, speed, and system variants.
1964 CDC 6600 first shipment. Speed is 50 times the 1604, depending upon application somewhere around 1 MFLOPS, 60 bit words. Marks the starting point of Seymour Cray machines dominance in high performance scientific computation. Introduces larger working store (set of registers), peripheral processors (closely related to the 160) for I/O, very high bandwidth central memory (32 banks at 1000 nsec cycle supporting a CPU at 100 nsec cycle). RISC-type instruction set with 15-bit and 30-bit formats. A single instruction (exchange jump) saves and restores the full working store.
1965 CDC 6000 family. Comaptible slower and cheaper processors, dual processors, extended core storage (2MW)
1969 CDC 7600 first shipment, 4-5 times the speed of the 6600, largely compatible. The Cyber 960-31 operated by cray-cyber.org is of about 1/2 the performance of this machine, and software compatible to the 6600.
1972 Seymour Cray leaves CDC to found Cray Research, Inc.
1974 Cyber 70 family
1976 CDC Star-100 vector computer, first delivered to Lawrence Livermore Lab. Thornton is lead designer.
1978 Cyber 170 family
1980 Cyber 200 family, improved versions of the STAR-100
1982 Cyber 180 family, 64-bit virtual memory family, with 60-bit real memory (6000, 70, 170) compatibility mode
1987 ETA-10, successor to Cyber 200 family. Neil Lincoln chief designer.
on ETA systems
on the ETA-10
on the ETA closing
Cyber 17/18/1700 minicomuters
Advanced Flexible Processor, CyberPlus VLIW machines
peripherals
4xxx series
A table of CDC mainframe machines may be found here
More on CDC and ETA on CDC/ETA and others
on CDC including CyberPlus

In ASP.NET 2.0, the GridView and DetailsView controls are designed to work together. They don't merely provide complementary services, they also share a number of helper classes and components. The output of the GridView control consists of a sequence of rows, each with a fixed number of columns. Each table column maps to a data column in the bound data source. The DetailsView control has a fixed number of rows (one for each column in the bound data source) and a constant number of columns (header and value).
GridView and DetailsView can be used together to form master/details pages, as I demonstrated in my last column (see Cutting Edge: Flexible Custom Data Views). Both represent data columns in the bound data source. In fact, a GridView's column and a DetailsView's row are the same kind of object and are represented in ASP.NET 2.0 by the same class-DataControlField.
DataControlField is an abstract class and cannot be used for actual data binding. A bunch of child field classes are derived for binding data to GridView and DetailsView controls. In my last column I covered some of these field types. In particular, I showed how to use the TemplateField class to add validation and special editing user interface capabilities to bound fields. The TemplateField class works as a generic container of markup. It is ideal for rendering custom types of data and any combination of existing fields that you might need. The TemplateField type can also be used to render foreign-key columns through dropdown lists or dates through calendars.
But what if you wanted a specialized, more compact calendar field class-a CalendarField type that would render the bound data as a string in view mode and employ a more effective Calendar control in edit and insert mode? As I mentioned, you can achieve the same result using a TemplateField, but that would be like using late-bound versus early-bound objects. A data-bound page based on CalendarField will be easier to read and even a bit faster to process at run time.
I'll discuss the design and implementation of custom data field types and demonstrate how to actually code them using a few examples-CalendarField to render date values and DropDownField to render foreign key values defined on an external data source.

The Data Control Field Class

The DataControlField class in ASP.NET 2.0 is a parallel for the DataGridColumn type used extensively with DataGrid controls in ASP.NET 1.x and is used only by the GridView and DetailsView controls. However, if you happen to write a custom data-bound control that requires binding to columns of data, you can use the DataControlField type to bind data columns to your control's user interface.
As I mentioned, DataControlField is an abstract class that inherits directly from System.Object. It implements the IStateManager interface. Figure 1 lists the methods and properties on the class.
As you can see, the class supports a few style properties-ItemStyle, HeaderStyle, FooterStyle, and ControlStyle. In ASP.NET, style properties are not persisted in the view state through the usual ViewState container, as most simple type properties are. The Style class from which all style properties derive implements IStateManager to take care of view state persistence. To utilize this specific capability, classes that expose style properties typically implement IStateManager themselves to delegate view state persistence to the methods defined on the objects that represent style properties. I'll return to this later.
Types derived from DataControlField are listed in Figure 2. Although the DataControlField class is marked abstract, it contains a lot of code and many concrete members. The only abstract method is CreateField, defined as follows:
Protected MustOverride Function CreateField() As DataControlField
This method is expected to return an instance of the particular data control field object. Other methods should also be overridden in derived classes because their built-in implementation is empty (though not abstract). Those methods are ExtractValuesFromCell and InitializeCell. You must override them to create a significant new field type. Depending on what kind of new functionality you want to build into the field, overriding additional members might be required as well.
Back to Contents

Designing the CalendarField Component

The CalendarField component inherits from DataControlField and adds three new properties-DataField, ReadOnly, and DataFormatString. DataField is a string property and indicates the name of the data source column that will be bound to the field. ReadOnly is a Boolean property to indicate whether the contents of the field are editable. To control whether the field is to be added in the insert mode UI, you can use the base InsertVisible Boolean property. Finally, DataFormatString indicates the desired format of the date. The contents of the DataFormatString property will be passed to the ToString method of the DateTime class, meaning that {0:d} and similar expressions are invalid. Here's an example of the CalendarField persistence format:
HeaderText="Date" ShowHeader="true"
DataFormatString="dd MMM, yyyy" ReadOnly="False" />
The code that follows shows the implementation of the DataField property (keep in mind that the other custom properties follow the same implementation scheme):
Public Overridable Property DataField As String
Get
Dim o As Object = MyBase.ViewState("DataField")
If (Not o Is Nothing) Then Return CType(o, String)
Return String.Empty
End Get
Set(ByVal value As String)
MyBase.ViewState("DataField") = value
OnFieldChanged()
End Set
End Property
The OnFieldChanged method is a protected virtual method defined on the parent class DataControlField and meant to signal to the host control (the GridView) that the value of a property on the field has changed. Each control field component knows about its host control through the Control property defined on DataControlField. The Control property is protected and set when the host control initializes the field component.
The Initialize method (see Figure 1) is called by the host control (GridView or DetailsView) to initialize the field. The initialization takes place before the field is added to the Fields collection of GridView and DetailsView. GridView and DetailsView call the Initialize method from within their CreateChildControls method. The Initialize method is given its basic behavior in the DataControlField base class and there's no real need for you to override it in a derived class:
Public Overridable Function Initialize( _
sortingEnabled As Boolean, ctl As Control) As Boolean
Initialize receives a Boolean value that indicates if sorting is supported. It also receives a reference to the host control (GridView or DetailsView) to be stored in the internal Control property. The return value tells the host control if a call to DataBind is required to complete the initialization of the field type.
Another method on DataControlField that you might want to override in some cases is ValidateSupportsCallback. The default implementation of the method in DataControlField simply throws an exception that the field type doesn't intend to support script callbacks. In a derived class you can override this method to prevent the exception from being thrown in some or all cases. For example, you can supply an empty method implementation to say that a field supports callbacks or throws an exception based on the value of a field-specific property:
Public Overrides Sub ValidateSupportsCallback()
If Not SupportsCallback Then
Throw New NotSupportedException("Callbacks Not Supported")
End If
End Sub
InitializeCell and ExtractValuesFromCell will need overrides in any significant control. InitializeCell lets you take control of the contents of cell where the field value is displayed. ExtractValuesFromCell extracts values from the cell to pursue updates or insert operations. Before taking the plunge into these methods and their overrides for the CalendarField component, let's have a look at Figure 3 where other protected overridable methods are listed.
Back to Contents

Implementing CalendarField

The CalendarField class provides the three aforementioned properties-DataField, ReadOnly, and DataFormatString-and overrides InitializeCell, ExtractValuesFromCell, CopyProperties, and CreateField.
CreateField follows a common scheme and gets the same form of implementation in all built-in field types:
Protected Overrides Function CreateField() As DataControlField
Return New CalendarField()
End Function
Overriding this method is mandatory if you derive from DataControlField; it is optional, but recommended, if you derive from existing field types.
In InitializeCell you begin by calling the base method to import much of the logic that deals with header and footer rendering. Next, you add some code to customize the current cell, as shown here:
Sub InitializeCell(cell As DataControlFieldCell, _
cellType As DataControlCellType, _
rowState As DataControlRowState, rowIndex As Integer)

' Call the base method
MyBase.InitializeCell(cell, cellType, rowState, rowIndex)

' Initialize the contents of the cell
If cellType = DataControlCellType.DataCell Then
InitializeDataCell(cell, rowState)
End If
End Sub
The InitializeCell method receives four arguments: a reference to the cell object, the type of the cell, and the state and index of the row being rendered. Most of the existing field components delegate their rendering tasks to another internal method that is usually named InitializeDataCell. Figure 4 shows the implementation of InitializeDataCell for CalendarField.
At its core, the InitializeDataCell method determines which control to bind to data-the cell for view mode or a Calendar control for edit or insert modes. The control is then attached to a DataBinding event handler to actually retrieve and display data. In the handler, you determine the working mode, retrieve the value to display, and configure the control as appropriate.
In view mode, the LookupValueForView helper method determines the value to display. It takes a reference to the naming container of the control (table cell or calendar) that currently forms the field's UI. The naming container is passed to the DataBinder.GetDataItem method to obtain a reference to the row object:
Dim dataItem As Object = DataBinder.GetDataItem(container)
Dim dt As DateTime = _
CType(DataBinder.GetPropertyValue(dataItem, DataField), DateTime)
Next, DataBinder.GetPropertyValue extracts the requested field from the row object. For a CalendarField control, this value is a DateTime object and can be further formatted before display. In edit or insert mode, no significantly different behavior is required, except that you might want to distinguish between edit and insert and provide a default value in the latter case:
Protected Overridable Function LookupValueForEdit( _
container As Control) As DateTime
If Not _inInsertMode Then
Dim dataItem As Object = DataBinder.GetDataItem(container)
Dim value As Object = DataBinder.GetPropertyValue( _
dataItem, DataField)
Return CType(value, DateTime)
End If
Return DateTime.Now
End Function
GridView and DetailsView controls scan their own list of bound fields to collect input values when an update or insert command is selected. In doing so, they call the ExtractValuesFromCell method on the field types. Figure 5 details the implementation of ExtractValuesFromCell in the CalendarField component.
The ExtractValuesFromCell method is invoked when the field is in edit or insert mode. You locate the input control and capture any significant values it may contain. Based on the code shown in Figure 4, the CalendarField's input control is the first control in the Controls collection of the cell. (Note that the position of the input control is arbitrary and depends on the structure of the cell you create in InitializeCell.)
Once you hold the currently selected value of the input control, you add it to the dictionary object that was passed to the ExtractValuesFromCell method. The dictionary contains name/value pairs where the name entry is the name of the DataField property.
Back to Contents

Using the CalendarField Component

A custom data control field must be registered with the page (or the application) as any other custom server control. To do this, use the @ Register directive like so:

Add the following code to the element of a DetailsView or GridView:

Turn the page in design mode and work through the Visual Studio® 2005 menus and windows to get what's shown in Figure 6.
The sample DetailsView has two custom data fields: CalendarField, used for the Date row, and a DropDownField, used for the posted-by row. I'll say more about the DropDownField control shortly. As you can see, the two control fields have a slightly different user interface. This is due to the DataBinding event handler. Basically, you check the DesignMode property and output some markup if the output is going to be shown in Visual Studio 2005:
If DesignMode Then
Return "Databound Date"
End If

Figure 6 DetailsView
DesignMode is a protected property of the DataControlField class. It wraps the DesignMode property of the host control. The code you just saw returns a dropdown-like user interface and characterizes the custom control field. Although the custom data control fields have to be manually coded in the editor, you have full visual support as far as properties editing is concerned. Smart tags and the Properties dialog box show custom fields correctly.
Figure 7 shows a sample master/detail page in action. The DetailsView control uses the CalendarField component to display the date of a data-bound order.
From Wikipedia, the free encyclopedia
Jump to: navigation, search
Control Data Corporation, or CDC, was one of the pioneering süpercomputer firms. For most of the 1960s they built the fastest computers in the world by far, only losing that crown in the 1970s to what was effectively a spinoff. CDC was one of the eight major computer companies through most of the 1960s; along with CDC these were IBM, Burroughs, NCR, General Electric, Honeywell, RCA, and UNIVAC. CDC was well known and highly regarded throughout the industry at one time, but today is largely forgotten.
Contents
[hide]
" 1 Background, origins: WWII-1957
" 2 Early designs; and Cray's big plan
" 3 Peripherals business
" 4 The CDC 6600: defining süpercomputing
" 5 The CDC 7600 and 8600
" 6 The STAR and the Cyber
" 7 ETA Systems, hard disks, oblivion
" 8 References
" 9 External links
[edit]

Background, origins: WWII-1957

During World War II the US Navy had built up a team of engineers to build codebreaking machinery for both Japanese and German mechanical ciphers. A number of these were produced by a team dedicated to the task working in the Washington, DC area. With the post-war wind-down of military spending the Navy grew increasingly worried that the team would break up and scatter into various companies, and started looking for ways to covertly keep the team together.
Eventually they found their solution; the owner of a Chase Aircraft affiliate in St. Paul, Minnesota was about to lose all his contracts with the end of the war, and after several meetings with increasingly high-ranking Naval officers he eventually agreed to house the team in his glider factory. The result was Engineering Research Associates (ERA), a contract engineering company that worked on a number of seemingly unrelated projects in the early 1950s.
One of these was one of the first commercial stored program computers, the 36-bit ERA 1103. The machine was built for the Navy, who intended to use it in their "above board" code-breaking centers. In the early 1950s a minor political debate broke out in Congress about the Navy essentially "owning" ERA, and the ensuing debates and legal wrangling left the company drained of both capital and spirit. In 1952 the owner sold ERA to Remington Rand.
Although Rand kept the ERA team together and developing new products, they were most interested in ERA's drum memory systems. Rand soon merged with Sperry Corporation to become Sperry Rand, and in the process of merging the companies, the ERA division was folded into Sperry's UNIVAC division. At first this did not cause too many changes at ERA, as the company was used primarily as engineering talent to help support a variety of projects. However one major project was actually moved from Univac to ERA, the Univac II project, which led to lengthy delays and upset everyone involved.
As the Sperry "big company" mentality encroached on the decision-making power of the ERA founders, they eventually got fed up and decamped to form Control Data in 1957, setting up shop in an old warehouse down the road in Minneapolis at 501 Park Ave. Of the members forming CDC, William Norris was the unanimous choice to become CEO of the new company. Seymour Cray was likewise chosen to be the chief designer, but was still in the process of completing an early version of the 1103-based Naval Tactical Data System (NTDS) and did not leave to join CDC until this was complete.
[edit]

Early designs; and Cray's big plan

CDC started business by selling parts, mostly drum systems, to other companies. Cray joined the next year and immediately built a small transistor-based 6-bit machine known as "Little Character" to test his ideas on large-system design and transistor-based machines. Little Character was a success, and they soon released a 48-bit transistorized version of their 1103 redesign as the CDC 1604 in 1959, with the first machine delivered to the US Navy in 1960. The 1604 designation was chosen by adding their address (501) to Cray's former project, the 1103. A 12-bit cut-down version was also released as the CDC 160A in 1960, arguably the first minicomputer. The 160A was particularly notable as it was built into a standard office desk, a rather unusual packaging for that era. New versions of the basic 1604 architecture were re-built into the CDC 3000 series, which sold through the early and mid-1960s.
Cray immediately turned to the design of a machine that would be the fastest (or in the terminology of the day, largest) machine in the world, setting the goal at 50 times the speed of the 1604. This required radical changes in design, and as the project "dragged on" (it took about four years in total) management became increasingly upset and demanded ever-greater oversight. Cray eventually got fed up and in 1962 demanded to be set up in his own remote lab, or he would quit. Norris agreed, and after a short search the team moved to Cray's home town of Chippewa Falls, Wisconsin.
[edit]

Peripherals business

Through the 1960s, Norris became increasingly worried that CDC had to develop "critical mass" in order to compete with IBM. In order to do this, he started an aggressive program of buying up various companies to round out CDC's peripheral lineup. In generally they tried to offer a product to compete with any of IBM's, but running 10% faster and costing 10% less. This was not always easy to achieve.
One of their first peripherals was a tape transport, which led to some internal wrangling as the Peripherals Equipment Decision attempted to find a reasonable way to charge other divisions of the company for supplying the devices. If the division simply "gave" them away at cost as part of a system purchase, they would never have a real budget of their own. Instead a system was worked out in which they would share profits with the divisions selling their peripherals, a system that would go on to be used throughout the company.
The tape transport was followed by the 405 Card Reader and the 415 Card Punch, followed by a series of tape drives and drum printers, all of which were designed in-house. The printer business was initially supported by Holly Carburetor in the Rochester suburb outside of Detroit. They later formalized this by creating a jointly-held company, Holly Computer Products. Holly later sold their stake back to CDC, the remains becoming the Rochester Division.
Norris was particularly interested in breaking out of the punch card-based workflow, where IBM held a stranglehold. He eventually decided to buy Rabinow Engineering, one of the pioneers of optical character recognition (OCR) systems. The idea was to bypass the entire punch card stage by having the operators simply type onto normal pages with a "known" typewriter font, then read those pages in whole to the computer. Since a typewritten page contains much more information than a card (which is essentially one line of a page) this would offer savings all around. Unfortunately this seemingly simple task turned out to be much harder than anyone expected, and while CDC became a major player in the early days of OCR systems, it has remained a niche product to this day. Rabinow's Rockville plant was eventually closed in 1976, and CDC eventually left the business.
With the continued delays on the OCR project, it became clear that punch cards were not going to go away any time soon, and CDC had to address this as quickly as possible. Although the 405 remained in production, it was an expensive machine to build. So another purchase was Bridge Engineering, who offered a line of lower-cost as well as higher-speed card punches. all card handling products were moved to what became the Valley Forge Division after Bridge moved to a new factory, with the tape transports to follow. Eventually the Valley Forge and Rochester divisions were spun-off to form a new joint company with National Cash Register, Computer Peripherals Inc., in order to share development and production costs across the two companies. ICL later joined the effort. Eventually the Rochester Division was sold to Centronics in 1983.
Another side-effect of Norris' attempts to diversify was the creation of a number of service bureaus that ran jobs on behalf of smaller companies that could not afford to buy a computer for themselves. This was never very profitable, and in 1965 several managers suggested the unprofitable centers be closed immediately in a cost-cutting measure. Nevertheless Norris was so convinced of the idea he refused to accept this, and ordered an across-the-board "belt tightening" instead.
[edit]

The CDC 6600: defining süpercomputing

Meanwhile at the new Chippewa lab Seymour Cray, Jim Thornton and Dean Roush put together a team of 34 engineers (themselves included), and continued work on the new design. In 1964 this was released as the CDC 6600, outperforming everything on the market by roughly ten times. The 6600 had a CPU with multiple asynchronous functional units, and used 10 logical, external I/O processors to offload many common tasks. That way the CPU could devote all of its time and circuitry to processing data while the other controllers dealt with mundane tasks like punching cards and running disks. Using late-model compilers the machine racks up .5 MFlops, while hand-coded assembly can deliver about 1 MFLOPS. A slower version was released as the CDC 6400; a two processor version of the 6400 was called the 6500. Cray turned to an even faster machine built along different lines, then known as the 6800.
It was after the delivery of the 6600 that IBM took notice of the new company. At the time Thomas J. Watson, Jr. asked (paraphrased) how is it that this tiny company of 34 people (including the janitor) can be beating us when we have thousands of people?, to which Cray quipped you just answered your own question. In 1965 IBM started an effort to build their own machine that would be even faster than the 6600, the ACS. Two hundred people were assembled on the west coast to work on the project away from corporate prodding, in an attempt to mirror Cray's offsite lab. The project produced interesting architecture and technology, but was not compatible with IBM's very successful System/360 line. It was redirected to be System/360-compatible, but this compromised performance, and ACS was eventually cancelled in 1969 after producing no product.
In the short term IBM also went ahead and announced a new version of the famed System/360 that would be just as fast as the 6600, the Model 92. This machine didn't exist, but that didn't stop sales of the 6600 from drying up while people waited for its release (a tactic known today as FUD). Norris didn't take this lying down, and a year later filed an antitrust suit against IBM, eventually winning over 600 million dollars and picking up the Servi
Başlık: API - Uygulama Programlama Arabirimi
Gönderen: OG - 20 Mayıs 2006, 04:08:54
API - Uygulama Programlama Arabirimi

API - Uygulama Programlama Arabirimi
Api fonksiyonları DLL uzantılı Dynamic Link Libraries dosyalarından çağrılır. Fonksiyon olarak tanımlanan API'lerden geriye bir değer döner. Altprogram olarak tanımlananlardan bir değer geri dönmez. Form yada modüllerin (General) (Declaration) kısmında tanımlanırlar.

(General)Declerations)

Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" _

(ByVal hwnd As Long, ByVal baslik As String) As Long


Private Sub Command1_Click()

SetWindowText Form1.hwnd, "Yeni Başlık"

End Sub

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]

API doğru olarak tanımlandığı halde ilgili dosyada böyle bir API bulunmadığı mesajı alınıyorsa veya API ile aynı isme sahip bir VB komutu var ise bu durumda API isminin sonuna "A" ekleyerek Alias isimi kullanılır. Bunun sebebi Windows işletim sistemi farklı dilleri desteklemektedir. ANSI karakter setini destekleyen ülkeler için sonuna A harfi, UniCode veya iki karekter genişliğini kullanan ülke seti için ise sonuna W harfi eklemeniz gerekir.

Private/Public Declare Function/Sub isim Lib libname Alias "isim" [Parametreler] [As tip]

Alias kullanımı

Tanımlanacak bir yordama DLL kütüphanesi içindeki tanımından farklı bir isim verilmek istendiğinde yordamın DLL kütüphanesi içindeki adı Alias kısmında verilir.

(General)(Declaration)

Private Declare Function WindowsDiziniGoster Lib "kernel32" Alias _

"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long



Private Sub Command1_Click()

Dim n As Integer

Dim str As String

str = Space$(100)

n = WindowsDiziniGoster(str, 100)

Label1.Caption = Left$(str, n)

End Sub


API Fonksiyonları


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



API FONKSİYONLARI


Windows işletim sisteminin bazı fonksiyonlarının Visual Basic uygulaması içerisinde kullanılması istendiğinde API fonksiyonlarından yararlanılır. Böylece kullanıcı işletim sistemi ile karşı karşıya gelmeden sistemin bazı fonksiyonlarını VB uygulaması içerisinden yapabilmektedir. API (Application Programming Interface)'ler Windows'un dahili fonksiyonlarıdır.

API fonksiyonları hakkında bilgi almak için API Text Viewer kullanılır.
Başlat – Programlar – MS Visual Studio 6.0 – MS Visual Studio 6.0 Tools - API Text Viewer kullanılır.

veya

VB de Add-Ins menüsünden Add-In Manager kullanılabilir. VB 6 API Viewer seçilir ve Load Behaviors çerçevesinden Loaded/Unloaded ve Load On StartUp işaretlenirse VB her açıldığında Add-Ins menüsünden de erişilebilir.

API Viewer da File – Load Text File dan Win32api.txt dosyası seçilir.

Windows'u yeniden başlatma ve kapama
1- API Viewer dan ExitWindowsEx fonksiyonu seçilir.
2- Form tasarlanır.


3- Projeye bir modül eklenir.
4- Kullanacağımız ExitWindowsEx API fonksiyonunu tanımlamak amacıyla Declare satırı modüle yapıştırılır:

Option Explicit

Public Declare Function ExitWindowsEx Lib "user32" _
(ByVal uFlags As Long, ByVal dwReserved As Long) As Long

5- Private Sub Command1_Click()
Dim sonuc As Long
sonuc = ExitWindowsEx(2, 0)
End Sub

Private Sub Command2_Click()
Dim sonuc As Long
sonuc = ExitWindowsEx(1, 0)
End Sub








CD-ROM sürücüyü açıp-kapatan program
1- API Viewer dan mciExecute fonksiyonu seçilir.
2- Form tasarlanır.



3- Projeye bir modül eklenir.
4- Kullanacağımız mciExecute API fonksiyonunu tanımlamak amacıyla Declare satırı modüle yapıştırılır:

Public Declare Function mciExecute Lib "winmm.dll" _
(ByVal lpstrCommand As String) As Long

5- Program kodu yazılır:

Private Sub Command1_Click()
Dim sonuc As Long
sonuc = mciExecute("Set CDAudio door Open")
End Sub

Private Sub Command2_Click()
Dim sonuc As Long
sonuc = mciExecute("Set CDAudio door closed")
End Sub


Dosya kopyalama
1- API Viewer dan CopyFile fonksiyonu seçilir.
2- Form tasarlanır.


3- Projeye bir modül eklenir.
4- Kullanacağımız CopyFile ve DeleteFile API fonksiyonunu tanımlamak amacıyla Declare satırı modüle yapıştırılır:

Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _
(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" _
(ByVal lpFileName As String) As Long

5- Program kodu yazılır:

Private Sub Command1_Click()
Dim sonuc As Long, kaynakdosya As String, hedefdosya As String
kaynakdosya = InputBox("Kopyalanacak dosyanın adını ve yolunu giriniz")
hedefdosya = InputBox("Yeni dosyanın adını ve kopyalanacağı yeri giriniz")
sonuc = CopyFile(kaynakdosya, hedefdosya, 0)
End Sub

Private Sub Command2_Click()
Dim sonuc As Long, silinecekdosya As String
silinecekdosya = InputBox("Silinecek dosyanın adını ve yolunu giriniz")
sonuc = DeleteFile(silinecekdosya)
End Sub


DLL (DYNAMIC LINK LIBRARY – DEV_NGEN BAGLI KÜTÜPHANE)
KULLANIMI
Visual Basic tarafından saglanmayan bazı temel özellikleri kullanmak için DLL
kütüphanelerinde saklanan yordamları dogrudan çagırmak mümkündür. Bu yöntem
sayesinde Microsoft Windows isletim sisteminin belkemigi olan birçok yordamı ve
hatta baska dillerde yazılmıs baska kütüphanelere erismek ve bu yordamları Visual
Basic kodu içinde kullanmak mümkündür.
Adından da anlasıldıgı üzere DLL dosyaları birer kütüphanedir. Bu sebeple baska
uygulamalar tarafından da kullanılabilirler ve üzerine yapılan eklemelerden
programların çalısması etkilenmez. Microsoft Windows isletim sisteminin kendisi de
DLL dosyalarından yararlanır ve baska uygulamalar da bu DLL dosyalarını kullanarak
grafiksel islemleri, bellek yönetimini ve daha bir çok degisik islemi kolayca destekler.
Saglanan bu olanaklara Windows API (Application programming interface- Uygulama
programlama arabirimi) denir.
DLL kullanımından baska Visual Basic programları içinde kullanılabilecek bir özellik
de Otomasyon(Automation) olarak adlandırılan ve bir uygulamanın nesnelerini
dısarıdan (baska bir programın içinden) kullanabilme olanagını saglayan
mekanizmadır. Bu DLL kullanımından daha basittir ve hatalı durumlara düsme riski
daha azdır.
Bir DLL yordamını uygulamanın içinde kullanmak
DLL yordamları programın dısında olan ögeler oldugu için bunların program içinde
kullanılabilmesi için, içinde bulundukları dosyanın ve yordam parametrelerinin
program içinde tanımlanmaları sarttır. Bu islem bir Declare komutu sayesinde yapılır.
Herhangi bir DLL içinde bulunan bir yordam Declare komutu ile tanımlandıktan sonra
programnı içindeki diger yordamlar gibi kullanılabilir.
DLL kullanırken dikkat edilmesi gereken en önemli nokta, hatalı durumlara düsme
riskinin büyük oldugudur. Bu sebeple parametrelerine ve veri türlerine dikkat etmek
gerekir.
DLL kullanımına basit bir örnek olarak, USER32.DLL dosyasında bulunan ve bir
pencerenin baslıgını (Caption) degistiren SetWindowText yordamının kullanılısını
örnekleyelim. Bunun için önce asagıdaki Declare deyimi kullanılarak yordam
tanımlanmalıdır.
Bu örnek için yeni bir proje baslatın, formun üzerine bir CommandButton yerlestirin
ve asagıdaki kodu yazın.
Private Declare Function SetWindowText Lib "user32" _
Alias "SetWindowTextA" (ByVal hwnd As Long, _
ByVal baslik As String) As Long
Private Sub Command1_Click()
SetWindowText Form1.hwnd, "Degismis Baslik"
End Sub
Burada önce kullanılacak yordamın tanımı yapılmıstır. Tanım yapılırken
parametrelerin türüne dikkat edilmesi gerekir. Bu yordama yeni pencere baslıgı ikinci
parametre ile gönderilmektedir. Tanımlanan bu yordamın kullanılısı tıpkı normal bir
Visual Basic yordamının kullanılısına benzemektedir.
Microsoft Windows isletim sisteminin sagladıgı yordamların ve sabitlerin tanımları
Visual Basic ile birlikte gelen API text Viewer programı ile görülebilir. Bu program
sayesinde tanımlar Visual Basic programlarının içine kopyalanabilir.
Bu programın yukarıda tanımlanan yordamın tanımını kopyalarken durumu asagıdaki
gibidir.
Bu program kullanılarak Visual Basic ile birlikte gelen;
Apiload.txt
Mapi32.txt
Win32api.txt
Dosyaları içinde yer alan DLL yordamlarının tanımlarını programın içine kopyalamak
mümkündür.
Microsoft Windows API yordamlarına erisim
DLL dosyalarından programlar içinde en sık ihtiyaç duyulanları ve kullanılanları
Windows API olarak bilinen, Windows isletim sisteminin sagladıgı fonksiyon ve
yordamları içeren DLL dosyalarıdır.
Windows API binlerce yordam, tür tanımı ve sabit tanımlarını içerir. Bu yordamlar C
dilinde yazılmıstır, bu yüzden Visual Basic içinde kullanılırken dikkatli bir biçimde
yeniden tanımlanmaları gerekir. Visual basic bu islem için yukarıda da bahsedildigi
gibi API Text Viewer programını ve bu tanımların Visual Basic için yapılmıs halini
içeren bir metin dosyasını kullanıcılara sunmaktadır.
API Text Viewer programı metin kütüklerini, daha hızlı erisim ve kolay aramayı
saglamak için Jet Veritabanlarına çevirebilme özelligine de sahiptir.
Görüldügü üzere Windows API yordamlarının tanımlanmasında herhangi bir sorun
yoktur. Çünkü zaten hazır tanımları bulunmaktadır ve tek yapılması gereken bu
tanımları Visual Basic kodunun içine almaktır.
Windows API dısındaki bir DLL dosyasından yordamlar kullanılacagı zaman uygun
tanımı yapmak çok önemlidir. Aksi takdirde istenmeyen durumlar olusabilir.
DLL içindeki bir yordamın tanımlanması
Windows API dısındaki DLL dosyaları içinden yordam kullanmak veya win32api.txt
dosyası içinde yapılmıs olan tanımları kendi gereksinimlerimize göre degistirmek için
DLL içindeki bir yordamın nasıl tanımlanabilecegini ögrenmek gerekir.
Bir DLL yordamını tanımlamak için Declare deyimi kullanılır. Eger yordam bir deger
döndürüyorsa Function, döndürmüyorsa Sub olarak tanımlanır. Declare deyiminin
kullanısı asagıdaki biçimdedir.
Declare Function publicname Lib "libname" [Alias "alias"]
[([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])] As Type
Declare Sub publicname Lib "libname" [Alias "alias"]
[([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])]
Kütühane _smi (libname)
Windows kütüphaneleri için (User32, Kernel32 veya GDI32) dosyanın tam adını ve
yolunu belirtmeye gerek yoktur. Örnegin;
Declare Function GetTickCount Lib "kernel32" Alias _
"GetTickCount" () As Long
Diger DLL dosyaları kullanılırken tam yol ve dosya adı verilmek zorundadır
Declare Function Topla Lib "c:\hesap.dll" _
(ByVal sayi1 As Integer, ByVal sayi2 As Integer) As Long
DLL dosyasının yolu verilmezse bu dosya için;
o Programın .EXE dosyasının bulundugu yere,
o Aktif dizine,
o Windows'un System dizinine,
o Windows dizinine,
o PATH degiskeninde tanımlı dizinlere
bakar.
Parametre türlerini belirlemeden önce sık kullanılan bazı DLL dosyalarının tanımlarını
verelim.
Advapi32.dll Advanced API services library supporting numerous APIs
including many security and Registry calls
Comdlg32.dll Common dialog API library
Gdi32.dll Graphics Device Interface API library
Kernel32.dll Core Windows 32-bit base API support
Lz32.dll 32-bit compression routines
Mpr.dll Multiple Provider Router library
Netapi32.dll 32-bit Network API library
Shell32.dll 32-bit Shell API library
User32.dll Library for user interface routines
Version.dll Version library
Winmm.dll Windows multimedia library
Winspool.drv Print spooler interface that contains the print spooler
API calls
String kullanan Windows API yordamları
String kullanan Windows API yordamlarını kullanmak için karakter kümesini belirtmek
gerekir. Bu karakter kümesi ANSI veya Unicode olabilir. Windows 95 için kullanılan
karakter kümesi ANSI karakter kümesidir. Windows API içinde bu durum için bir
yordamın genelde iki tanımı birden olur. Bunlardan biri ANSI kodunu destekler, diger
Unicode kodunu destekler. Yukarıda verilen örnekteki SetWindowsText yordamı için
USER32.DLL dosyasında, SetWindowsTestW ve SetWindowsTextA olarak
adlandırılmıs iki ayrı tanım sözkonusudur. Bu tanımlardan hangisinin kullanılmak
istendigi Alias kısmında verilen isim ile belirtilir.
Parametreleri deger ile veya referans ile gönderme
Visual Basic yordamlarında eger belirtilmemisse parametre geçis yöntemi referans ile
göndermedir. Bunun anlamı parametre olarak verilen degiskenin degeri yerine bellek
adresinin gönderilmesidir.
Çogu DLL yordamı parametrelerinin degerle aktarılmasını öngörürler. Bu tür
yordamlara referans ile parametre gönderilirse hatalı bir veri gönderilmis olur.
Örnegin yukarıda bir formun baslıgını degistiren örnekte ilk parametre olan HWND
parametresi tanımı yapılırken referans ile gönderme türünden tanımlanmıs olsaydı bu
bir hata olurdu. Çünkü bu yordamın DLL kütüphanesi içindeki tanımında bu
parametre deger ile gönderilen bir parametredir.
Bir parametreyi deger ile göndermek için ByVal, referans ile göndermek için de
ByRef sözcükleri kullanılır.
Herhangi bir DLL kütüphanesinin C dilindeki tanımından yararlanarak bir tanım
yapılırken, diziler dısındaki degiskenlerin ByVal olarak gönderildigi dikkate
alınmalıdır.
Alias kullanımı
Tanımlanacak bir yordama DLL kütüphanesi içindeki tanımından farklı bir isim
verilmek istendiginde yordamın DLL kütüphanesi içindeki adı Alias kısmında verilir.
Örnek olarak, önce bir proje yaratın ve formun üzerinde bir CommandButton ve bir
Label yerlestirin. Daha sonra asagıdaki kodu ekleyin.
Private Declare Function WindowsDiziniGoster Lib "kernel32" _
Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
Private Sub Command1_Click()
Dim n As Integer
Dim str As String
str = Space$(100)
n = WindowsDiziniGoster(str, 100)
Label1.Caption = Left$(str, n)
End Sub
Bu program çalıstırılıp form üzerindeki butona basıldıgında bilgisayardaki windows
dizini form üzerindeki Label nesnesine yazılır.
Esnek parametre türleri
Bazı DLL kütüphaneleri aynı parametre degiskeni için birden fazla türün
kullanılmasına izin verir. Eger farklı türlerden veriler bu tür yordamlara
gönderilecekse parametre tanımları Any türü olarak tanımlanmalıdır.
Buna örnek olarak asagıdaki tanım verilebilir.
Declare Function MapWindowPoints Lib "user32" Alias _
"MapWindowPoints" (ByVal hwndFrom As Long, _
ByVal hwndTo As Long, lppt As Any, _
ByVal cPoints As Long) As Long
Bu yordam bir nokta dizisinin bir penceredeki konumunu verilen bir baska pencere
üzerindeki bir konuma çevirir. Sonuç, yordamın 3. Parametresi içinde döndürülür. Bu
parametre POINT türünde veya RECT türünde olabilir. Bu türler sırasıyla 2 ve 4 Long
türünde sayı içeren türlerdir.
As Any kullanımı her ne kadar esneklik saglıyorsa da kullanılırken dikkatli
olunmalıdır. Yanlıs veri türleriyle kullanılınca ancak çalısma esnasında bu fark
edilebilir.
Parametre olarak String gönderme
Genelde string türü degiskenler ByVal olarak gönderilir. Visual Basic içinde string türü
BSTR olarak bilinen bir yapıyı belirtir. Bu yapı string uzunlugu ve içerigi hakkında
bilgiler tutar. Bu yapı parametre olarak bir yordama gönderildiginde yordamın bu
yapıdaki içerik bilgisini degistirmesine olanak verilir.
WinAPI yordamlarında genellikle LPSTR olarak adlandırılan C string yapıları
kullanılır. Bu parametrelere karsılık olarak Visul Basic içinde kullanılan BSTR
verilebilir.
Bu kullanımı yukarıda Windows dizinini almak için kullanılan örnekten görmek
mümkündür. Windows dizini ByVal olarak tanımlanmıs olan String türündeki bir
degisken içinde döndürülmektedir.
Genel olarak LPSTR türü string bekleyen yordamlara String türü degiskenler
parametre olarak verilebilir.
Bir DLL yordamına BINARY verilerden olusan bir karakter dizisi parametre olarak
verilecekse, String yerine Byte dizisi gönderilmelidir.
Parametre olarak dizi gönderme
Dizinin herhangi bir elemanını parametre olarak göndermek dizinin türü ile aynı
türden olan bir degiskeni göndermekten farksızdır. Ancak bazen tüm diziyi parametre
olarak göndermek gerekebilir. Bu durumda dizi tıpkı Visual Basic yordamlarında
oldugu gibi bos parantezlerle göderilir.
Sayı içeren bir dizinin ilk parametresini ByRef olarak göndermek, bütün diziyi
göndermek anlamına gelir. Bu yaklasım string dizileri için de geçerlidir. C dilinde
string dizileri gösterge içeren diziler olarak algılanır ve Visual Basic ile aynı sekilde
kullanılır.
Kullanıcı tarafından tanımlanmıs türlerin kullanımı
Bunu örneklemek için asagıdaki örnegi inceleyin.
Private Type RECT
sol As Long
ust As Long
sag As Long
alt As Long
End Type
Private Declare Function RenkleriTersCevir Lib "User32" Alias "InvertRect"
_
(ByVal hdc As Long, lpRect As RECT) As Long
Dim rect1 As RECT
Private Sub Form_Load()
ScaleMode = 3
End Sub
Private Sub Form_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button And 1 Then
rect1.sol = X
rect1.ust = Y
rect1.sag = X
rect1.alt = Y
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Not (Button And 1) Then
rect1.sag = X
rect1.alt = Y
RenkleriTersCevir hdc, rect1
End If
End Sub
Bu program mouse basılı tutularak seçilen bir alandaki renkleri ters çevirir. InvertRect
yordamına parametre olarak program içinde tanımlanan RECT türü gönderilmistir.
Burada dikkat edilmesi gereken önemli bir husus gönderilen türün yordamın ihtiyaç
duydugu tür ile aynı yapıda olmasına dikkat edilmelidir.
DLL yordamlarına fonksiyon göstergelerini parametre olarak gönderme
Fonksiyon göstergesi, kullanıcı tarafından tanımlanmıs fonksiyonların adreslerini
belirtir. Bu göstergeler, bir DLL yordamı kullanıcı tarafından tanımlanmıs bir yordamı
kullanacagı zaman kullanılır. Fonksiyon göstergelerini kullanmak için Address of
fonksiyon_adı deyimi kullanılır.
Diger türlerin parametre olarak gönderilmesi
•String türü bir degiskene bos gösterge göndermek gerektiginde vbNullString
sabiti kullanılır.
Örnegin FindWindow yordamı belli bir pencereyi baslıgı sayesinde bulur ve bu
pencereye bir gösterge döndürür.
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Bu yordamın kullanılısı asagıdaki gibi olabilir.
hWndExcel = FindWindow(vbNullString, "Microsoft Excel")
Bu yordamda ilk parametre bos bir string olarak gönderilmektedir.
•Nesne özellikleri de yordamlara parametre olarak gönderilebilir. Özellikler
parametre olarak gönderilirken ByVal olarak gönderilmelidir. ByRef olarak
kullanmak için ara bir degiskene ihtiyaç duyulur.
•Nesne göstergelerini parametre olarak göndermek mümkündür. Örnegin bir
formun hWnd ve hDC göstergelerini bir yordama parametre olarak göndermek
mümkündür.
•Variant türündeki bir degiskeni Variant olmayan bir degiskenin yerini tutması
için göndermek gerektiginde ByVal olarak gönderilir.
C tanımlarını Visual Basic tanımlarına dönüstürme
DLL dosyaları içindeki yordamlara ait dokümanlar genelde C diline uyumlu olarak
yazılmıstır. Bunları Visual Basic içinde kullanabilmek için tanımları çevirmek gerekir.
Bu çevirinin bir parçası da C dilindeki türler için uygun Visual Basic veri türlerini
kullanmak ve parametre geçis yöntemini belirlemektir.
Bu çeviri islemi için asagıdaki tablo kullanılabilir.
C veri türü Visual Basic içinde tanımıNe tür degerlerle çagrılabilecegi
ATOM ByVal variable As Integer Integer
BOOL ByVal variableAs Long Long
BYTE ByVal variable As Byte Byte
CHAR ByVal variable As Byte Byte
COLORREF ByVal variable As Long Long
DWORD ByVal variable As Long Long
HWND, HDC, HMENU,
etc. (Windows
handles)
ByVal variable As Long Long
INT, UINT ByVal variable As Long Long
LONG ByVal variable As Long Long
LPARAM ByVal variable As Long Long
LPDWORD variable As Long Long
LPINT, LPUINT variable As Long Long
LPRECT variable As type
Kullanıcı tarafından
tanımlanmıs herhangi
bir tür
LPSTR, LPCSTR ByVal variable As String String
LPVOID variable As Any
Herhangi bir degisken
(string türü için
ByVal)
LPWORD variable As Integer Integer
LRESULT ByVal variable As Long Long
NULL
As Any or ByVal Nothing, ByVal
0 & ByVal variable As Long
vbNullString
SHORT ByVal variable As Integer Integer
VOID Sub procedure Desteklenmez
WORD ByVal variable As Integer Integer
WPARAM ByVal variable As Long Long
Örnek: Windows'u kapatan program.
Bu örnek için yeni bir proje yaratın ve içindeki formu silip yerine bir module ekleyin.
Bu modülün içine asagıdaki kodu ekleyin.
Option Explicit
Private Declare Function WindowsKapat Lib "user32" Alias _
"ExitWindowsEx" (ByVal uFlags As Long, ByVal dwRes As Long) As Long
Private Sub Main()
If MsgBox("Windows'u kapatmak " & vbCrLf & "istiyor musunuz", _
vbYesNo, "Windows Kapaniyor") = vbYes Then WindowsKapat &H41, 0
End Sub
Bu programı çalıstırmadan önce projeyi kaydedin. Daha sonra File menüsünden
proje için bir .EXE dosyası olusturun. Bu program çalıstırıldıgında Windows kapanır.
Burada uFlags parametresi için gönderilen deger, tüm programların kapatılıp
windows'un kapatılması anlamına gelmektedir.



Library Container API Kütüphane Container API'si

The BasicLibraries ve DialogLibraries com.sun.star.script.XLibraryContainer'dan türetilen com.sun.star.script.XLibraryContainer2'i tarafından desteklenir ki buda com.sun.star.container.XNameContainer servisinden gelir. Basic geliştiricileri bir metot kullanabilmek için yerleşimi bilmek zorunda değildir. Fakat API referanslarındaki metotlara incelenirken bilinmesi yararlıdır.
XLibraryContainer2 varolan kütüphane bağlantılarını ve yazma korumalarını kontrol eder. Kütüphanelerin isminin değiştirilmesi içinde kullanılır Metotlar ilerleyen kısımda ayrıntılı olarak anlatılmıştır :
boolean isLibraryLink( [in] string Name)
string getLibraryLinkURL( [in] string Name)
boolean isLibraryReadOnly( [in] string Name)
void setLibraryReadOnly( [in] string Name, [in] boolean bReadOnly Sadeceoku)
void renameLibrary( [in] string Name, [in] string NewName)
XLibraryContainer kütüphane ve kütüphanne yollarını syaratır veya siler. Buna ilaveten bir kütüphanenein yüklü olup olmadığını test eder veya gerekliyse, yükler.
com::sun::star::script::XNameContainer createLibrary( [in] string Name)
com::sun::star::script::XNameAccess createLibraryLink( [in] string Name,
[in] string StorageURL, [in] boolean ReadOnly)
void removeLibrary( [in] string Name)
boolean isLibraryLoaded( [in] string Name)
void loadLibrary( [in] string Name)
XNameContainer metotlarıyla container'lardaki kütüphanelere erişim ve yönetimi sağlanır:
void insertByName( [in] string name, [in] any element)
void removeByName( [in] string name)
any getByName( [in] string name)

void replaceByName( [in] string name, [in] any element)

sequence < string > getElementNames()
boolean hasByName( [in] string name)
type getElementType()
boolean hasElements()
UNO API'sinde bu metotlarla erişim sağlanır. 3.4.3 Profesyonel UNO - UNO dili ile bağlanma - OpenOffice.org Basic. bölümünde açıklandığı gibi UNO API kullanılır. Not: Bu arabirimler sadece OpenOffice.org Basic ile kullanılabilir.diğer ortamlarda kaullanmak mümkün değildir.
Kütüphaneler container'lara iki farklı yol ile eklenir:
Creating a New Library Yeni kütüphane yaratarak
CreateLibrary() metodunun kullanımı ile yeni bir kütüphane yaratılır. Bu metotla yaratılmış kütüphane Yöntemin çağrılmış olduğu Container'a aittir. hod. A library created with this method belongs to the library container where createLibrary() has been called. Kütüphane container'ı uygulaması bu kütüphanenin yüklenmesi ve saklanması için sorumludur.Bu işlev şu an için arabirimler tarafından sağlanmaz. Onun için uygulama nerede ve nasıl olacağını belirlemelidir. createLibrary() kütüphane elemanlarına erişim ve kütüphane düzenlenmesi için bir Standard com.sun.star.container.XNameContainer arabirimiyle döner .
İlkin, böyle bir kütüphane boştur ve yeni kütüphane elemanları yerleştirilir. Kütüphaneyi değişikliklerden korumak için setLibraryReadOnly() metotu da kullanılabilir. Sadece oku kütüphanelerine yeni elemanlar eklenip silinemez ve Basic modülleri ile formlar değiştirilemezler. Ek bilgi için 11.2 OpenOffice.org Basic and Dialogs - OpenOffice.org Basic IDE kısımına bakın.Sedece oku statüsü API üzerinden değiştirilebilir..
Creating a Link to an Existing Library Varolan kütüphaneye bağ oluşturulması
Varolan kütüphaneye bir bağ oluşturulması createLibraryLink() metodunun kullanılmasıyla sağlanır. StorageURL parametresi kütüphane ile kütüphane .xlb dosyası yolu verilir. Bu konu için Ekstra bilgi 11.7 OpenOffice.org Basic and Dialoglar - Kütüphane dosyası yapısı konusuna bakın. Bir kütüphane bağı Kütüphane containeri da dahil olarak refere edilebilir. onun için kütüphane deposu dosyanın saklanmasından sorumlu değildir. Bu sadece StorageURL parametresi ile tanımlanır.
ReadOnly parametresi Kütüphane bağının statüsünü sadece oku'ya çevirir. Bu durum bağlanmış Kütüphanenin statüsünden bağımsızdır. Bağlanmış kütüphane kütüphane ile bağ statüsü read only ise değiştirilebilir. Örneğin, bu mekanizma network sürücüsünde bulunan bir kütüphaneyi read-only yapmaya gerek kalmaksızın read-only olarak erişim imkanı sağlar, böylece yetkili kişiler tarafından kolaylıkla değiştirilebilir.
Library container'ları tarafından desteklenen metotlar İlişik tablolarda kısaca belirtilmiştir:
Selected Methods of com.sun.star.script.XLibraryContainer2

isLibraryLink()
boolean. mantıksal Bir kütüphanenin Container'a bağ olarak eklenip eklenmediği sorgulanaır. Geri dönen değer doğru veya yanlıştır.
getLibraryLinkURL()
string. metin Bağlanmış kütüphanenin StorageURL yolunu gösteren dize ile geri döner. createLibraryLink(...) metodundaki parametresine karşılık gelen dizedir. Sonuç GUI üzerinden kullanıcıya gösterilebilir.
isLibraryReadOnly()
boolean. kütüphaneyi sadece oku durumunu getirir. Kütüphane bağlantısı ise false olarak döner. Böylece bağ yada bağlanmış kütüphane read-only değilse değiştirilebilir.
renameLibrary()
Kütüphane adını değiştirir. Kütüphane bağ olarak eklenmişse sadece yol adı değiştirilir.

Selected Methods of com.sun.star.script.XLibraryContainer

loadLibrary()
void. Bir kütüphane yükler
isLibraryLoaded()
boolean. Kullanıcının bir kütüphanenin daha önceden yüklendiğini öğrenmesini sağlar.
removeLibrary()
void . Kütüphane deposundan bir kütüphaneyi siler. Şayet bu bir bağ ise bağ silinir..




API NEDİR?

İş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
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 20 Mayıs 2006, 04:11:33
TreeView nesnesi

TreeView denetiminin kullanılması

treeview denetimi,ağaç tarzında şık bir biçimde organize edilebilen klasör veya başka öğelerin hiyerarşik bir görünümünü sunar. Bu denetim genellikle treeview denetiminde seçili olan klasörün içeriğini görüntülemek için kullanılan bir list view denetimini ile bir arada kullanılır.

Tree view özellikleri (properties)
tree view denetiminin çok sayıda özelliği vardır,üstelik bunların çoğu oldukça değerlidir:

Appearange
BorderStyle
CausesValidation
CheckBoxes
Container
DragIcon
DragMode
DropHighLight
Enabled
Font
FullRowSelect
Height HelpContextID
HideSelection
HotTracking
HWnd
ImageList
Indentation
Index
LabelEdit
Left
LineStyle
Nodes
Object
OleDragMode
OleDropMode
Parent
PathSeparator
Scroll
MouseIcon
MousePointer
Name
SelectedItem
SingleSel
Sorted
Style
TabIndex
TabStop
Tag
ToolTipText
Top
Visible
WhatsThisHelpID
Width

standart özelliklerin yanı sıra,bu denetimin gücünden faydalanmak için tanımanız gereken yeni birkaç özelleğide vardır. name özelliği,bu denetimle çalışırken değerini
atamanız gereken ilk özelliktir.standart isimlendirme konvansiyonu ön takısı tvw'dur.örneğin sabit sürücünüzün dizin yapısınıiçeren bir ağaç görünümünüz olursa ona tvwdirectories ismini verebilirsiniz.

General sekmesi

style özelliği denetimin form üzerinde nasıl görüneceğini ve davranacağını belirlemenizi sağlar. Bu özelliğe verebileceğiniz olası değerler aşağıdadır:

0-tvwtextonly: bu ayar düğümünün sadece metnini gösterir.
1-tvwpicturetext: Bu ayar düğümlerin simge ve metinlerini gösterir.
2- tvwplusminustext: Bu ayarı açık/kapalı sembolü (artı ve eksi işaretleri) ile düğümlerin simge ve metinlerini istiyorsanız kullanın.
3- tvwpluspicturetext: Bu ayarı açık/kapalı sembolünümetnin sol tarafından küçük bir simge ve metnin kendisini görüntüler.
4-tvwtreelinestext: Ağacın hiyerarşisinde ilgili olan düğümleri birbirine bağlayan çizgiler olmasını isterseniz,bu ayarı düğümün çizgileri ve metninin göstermek için kullanırız.
5-tvwtreelinespicturetext: Bu ayarı metnin sol tarafında küçük bir simge görüntüler ve ilgili düğümleri birbirine bağlar.
6-tvwtreelinesplusminustext: Bu ayarı açık/kapalı sembolü,bağlantı çizgilerini ve düğüm metnini göstermek için seçin.
7-tvwtreelinesplusminuspicturetext: Her şeyin gösterilmesi için bu ayarı seçin.

LineStyle özelliği Düğümler arasında görüntülenen çizgilerin stillerini ayarlamak için kullanılır. olası değerler aşağıdadır:
0-treelines
1-rootlines

labeledit, denetiminin otomatik etiket düzenleme özelliğini açıp kapatmanızı sağlayan boolean bir özelliktir. Windows explorer bu özelliği bir klasör veya dosya tek tıkladığımızda sergiler. Bu isim kendisini değiştirmenize olanak veren minyatür bir metin kutusuna dönüşür. Etiket düzenlemeyi devreye sokmak için bu özelliğin true yapın, devreden çıkartmak için ise false yapmanız yeterlidir.
tree view denetiminizde resimler olmasını isterseniz ImageList özelliğine eşitlemeniz yeterlidir.
borderstyle ve apperance özellikleri yeterince açıktır.
oledragmode özelliği denetimini elle veya otomatik sürüklemeyele konfigüre edilebilir. Bu özelliğe aşağıdaki değerlerden birini atayabiliriz:
0-oledragmanual
1-oledragautomatic
oledropmode özelliği tree view denetiminin ole bırakma işlemlerinin kabul veya ret edecek biçimde konfigüre eder. Bu özelliğin değeri aşağıdakilerden biri olabilir:

0-oledropnone: Bu değer atandığında hedef bileşen ole bırakmalarını kabul etmez ve nodrop imlecini görüntüler.

1-oledropmanual: Denetim programcının ole bırakma işlemini kod içinde yönetmesine olanak verecek biçimde ole bırakma olaylarını tetikler.

Indetation özelliği görünümdeki düğümler arasındaki yatay mesafeyi belirler. Bu sayı ne kadar küçük olursa düğümlerde de birbirine o kadar yakın olur. Daha sıkı görünen bir arabirimi tercih edreseniz 283 değerinin çalışma kipinde hoş göründüğünü söyleyebilirim.
pathseparatr özelliği bir düğümün fullpath özelliği tarafından döndürülen yol için kullanılan ayraç karakterini aşağıdaki biçimde atamanıza veya döndürmenize olanak verir.

private sub treeview1_nodecilik(byval node as node)
dim rc as string
rc=node.fullpath
mshbox rc
end sub

örneğin,sabit sürücünüz üzerindeki klasörün bir listesinigösteriyorsanız bu özelliğindeğerini ters bölü (*) yapabilirisiniz ya da LAN üzerindeki IP alt ağlarını eşlerken internet tarzı bir yol belirtmek için bu nokta(.) kullanabilirsiniz. tree view denetiminin kaydırma çubuklarının denetimini göstermesini isterseniz scroll özelliğinin değerini true yapın;tree view denetiminde bir seferde görüntülenemeyecek kadarçok sayıda düğüm olursa bu işlem gerekli olabilir. Kaydırma çubuklarını devreden çıkartmak için de bu özelliğin değerini false yapın.

Tree view olayları (Events)

Aşağıda tree view denetimi tarafından desteklenen olayların listesi yer alıyor:

AfterLabelEdit
BeforeLabelEdit
Click
Collapse
DblClick
DragDrop
DragOver
Expand
GotFocus
KeyDown
KeyPress
KeyUp
LostFocus
MouseDown
MouseMove
MouseUp
NodeCheck
Nodeclick
CodeClick
OleCompleteDrag
OleDragDrop
OleDragOver
OleGiveFeedBack
OleSetData
OleStartDrag
Validate

afterlabeledit() olayı,bir düğüm üzerindeki etiket düzenleme işlemi yapılmasında sonra tetiklenir. bu olay düğümün isminin geçerli olduğundan emin olmak için denetlemek isterseniz
faydalı olur.tamamlayıcısı olan beforelabeledit() olatı ise düğüm düzenleme kipine geçmeden önce tetiklenir.
collapse()olayı kullanıcı ağacın bir dalını kapttığında tetiklenir.bu olay bir ağacın kökü çift tıklandığında ya da bu dalın kökünün yanındaki eksi işareti tıklandığında gerçekleşebilir.hafızadan tasarruf etmek isterseniz.tree view denetiminden öğeler silmek için gereken kodu bu olaya yerleştirebiliriz.
Expand()olayı collapse() olayının tam tersidir.kullanıcı bir dalın kökünün yanındakiartımişaretine tılıyarak veya bu dalın köükne çift tıklıyarak bir dalı açtığında tetiklenir.bu olay düğüm açılırken denetime verileri dinamik olarak yüklemek amacıyla kullana bilirsiniz.
Nodeclick()olayı tree view denetiminin sunduğu en önemli olaylardan biridir.bu olaı tıklanan düğüm hakkında bilgi almak yada uygulamanın gerektiği başka her hangi bir işlev için kullanabilirsiniz.örneğin aşağıdaki kod tıkladığınız düğümün komple yolunu gösteren bir iletişim kutusu görüntülenir:

private sub tvwnodes_nodecilick(byval node as comctlib.node)
msgbox node.fullpath
end sub

pathseparator özelliğinde bir ters bölü karakteri kullanırsınız.kök düğüm adı C: ve tıklanan düğüm adıda windows olduğunda bu iletişim kutusu C:\windows ifadesi görüntülenir.
olecompletedrag()olayı ole verileri bu denetim üzerine bırakıldığında veya ole sürükleme bırakma işlemi iptal edildiğinde tetiklenir.
oledragdrop()olayı oledropmode özelliğinin değeri 1-manual yapıldığında ve denetim üzerine ole verileri bırakıldığında tetiklenir.bu nolaya veriler bırakıldığında denetimin ne yapması gerektiğini belirliyecek kodu yerleştiririz.bu olaya denetimin verileri taşımasını sağlayacak kodu da yerleştirebilirsiniz,ama kopyalamak için kullanılacakbir kod yerleştirmelisiniz.ya da verileri kopyalamasını sağlayabilirsiniz,ancak bu durumda da taşıtamazsınız.bu işlev uygulamanızın gereksinimlerine bağlıdır.
oledragover()olayı ole verileri denetimin üzerine sürüklendiğinde tetiklenir.
olegivefeedback()olayı her oledragover() olayından sonra tetiklenir.bu olay tree view denetiminin kullanıcıya fare imlecinin kullanıcı nesneyi bıraktığı taktirde ne olacağını gösterecek şekilde değiştirmek veya neler olacağını göstermek için seçim üzerinde görsel bir geri besleme sunmak gibi bir geri besleme sunması sağlar.
olesetdata()olayı bir hedef denetim getdata yöntemini kaynak denetim dataobject nesnesi üzerinde çalıştırıldığında tetiklenir.
son olarakda olestartdrag()olayı kullancı verileri bu denetimden başladığında tetiklenir.

tree view yöntemleri (methods)

aşağıda tree view denetimi tarafından desteklenen yöntemler yer alıyor:
Drag
GetVisibleCount
HitTest
Move
OleDrag
Refresh
SetFocus
ShowWhatsThis
StartLabelEdit
Zorder

getvisiblecount yöntemi belirli bir anda tree view içinde görünebilen düğüm sayısını elde etmek için kullanılır.
hittest yöntemi belirli bir düğümün bırakma hedefi olarak kullanılıp kullanılmayacağını belirtmek için kullanılır.
oledrag yöntemi bir ole sürükleme işleminin başlatılması için çağrılır.
startlabeledit yöntemi,bir düğümü etiket düzenleme kipine geçirdiğimizde kullanılır.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: Eagle_Tim - 24 Ağustos 2006, 16:22:06
çok güzel bir çalışma olmuş elinize sağlık keşke bunu doc olarak birde toplasaydınız. bende visual basic öğrenmeye çalışıyorum küçük çalışmalar yapıyorum ve böyle özellikle türkçe bilgiler pdf veya doc formatında toplanabilirse daha yararlı olur kanısındayım. indirip gerektiğinde incelemek amacıyla..
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 03 Ocak 2007, 17:25:49
Örnek Kodlardan

http://rapidshare.com/files/9316412/vbasic_oenemmliii.rar.html
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 03 Ocak 2007, 17:35:42
3D Robot

Alıntı Yap"3D Robot. (visual basicde neler yapılabileceğini görün !)"


Arkadaşlar açık kaynak kodlu bi süredir elimde olan 3D robot similasyonunun 2. verisyonunu
buldum ve gerçekten bir kez daha şaşırdım..

2. versiyonda 12 çeşit robot var ve
6 adet fonksiyonla kontrol edebildiğiniz , kaplamalarını değiştirebildiğiniz,
similasyon yaptırabiliyorsunuz..


aşşağıda kod sahibinin hakkını yememek için orjinal linklerin veriyorum ama
orjinal linkinden indireceğiniz 2 .versionu indirdiğiniz haliyle çalışmıyor
o yüzden benim verdiğim upload edilmiş örnekleri indirin, çalışıyorlar..


ikisi birden download linki = çalışan hali

http://www.gizliarsiv.com/v/7273901/3d_robot.zip.html


ORJİNAL linkleri..

versiyon 1 için download linki
http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=51247&lngWId=1

versiyon 2 için download linki
http://5axes.free.fr/devel_robot.htm ' çalışmıyor çalışması için


2. versiyonu çalıştırmak için klasör içindeki dat ve stl uzantısındaki tüm dosyları "Robot_def"
adlı bi klasöre taşımanız gerekmekte..
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 03 Ocak 2007, 17:50:26
PC bir ağa bağlımı?

Kod: http://rapidshare.com/files/10048212/kod.zip.html

Alıntı Yap" eğer bir ağa bağlıysanı bir ağdaki ip niz birde internetteki ipniz vardır eğer ağda değilseniz ağ ip niz ile internetteki ip niz eşittir bizde bundan yaralanarak pc nin routerlı modem kullandığını yada ağa bağlı oldununu anlayabilirz
"


şimdi formumuza
bir buton
bir inet
bir winsock ekleyin
ve aşağıdaki kodu C/P yapın

Private Sub Command1_Click()
Dim strkur, icip, dısip, sonuc
strkur = Inet1.OpenURL("www.whatismyip.com")
dısip = Mid(strkur, InStr(strkur, "Your IP Is") + Len("Your IP Is") + 1, 14)
icip = Winsock1.LocalIP
If dısip = icip Then
sonuc = "Ağ ip si ile internetteki Ip aynı olduğu içIn Pc bir ağa bağlı değil ve routersız modem kullanıyor yada dial-up"
Else
sonuc = "Ağ ip si ile internetteki Ip aynı olmadığı içIn Pc bir ağa bağlı yada Routerlı modem kullanıyor"
MsgBox "İç IP= " & icip & " Dış IP= " & dısip & " Sonuç: " & sonuc
End If
End Sub

burda inet nesenesi ile www.whatismyip.com dan intenetteki ip mizi öğrenip winsocktan öğrendiği ip ile karşılaştırıoyro aynıysa bize bildiriyor
 

Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: Eagle_Tim - 03 Ocak 2007, 18:55:52
Alıntı yapılan: "OG"Örnek Kodlardan

http://rapidshare.com/files/9316412/vbasic_oenemmliii.rar.html

Teşekkürler Hocam.. :D
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 03 Ocak 2007, 19:09:21
Alıntı Yapinternet explorer'in başlığında ki "Microsoft Internet Explorer" yazısını değiştirmek
forma 1 tane text,1 tane de buton koyun
aşağıdaki kodu kopyala yapıştır....



Private Sub Command1_Click()
Dim kayit As Object
Set kayit = CreateObject("wscript.shell")
kayit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\" & "Window Title", (Text1)
MsgBox "Internet Explorer Başlığı ( " & Text1 & " ) Olarak Değiştirildi", vbInformation, "H@s@nSoft - 2006"
End Sub

örnek  http://rapidshare.com/files/10056823/IE_degistir.exe.html
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 03 Ocak 2007, 19:24:28
EN ÇOK KULLANILAN MODEM KOMTLARI

Alıntı Yap
‘ AT ' ; bu komutu modeme gönderdiğinizde ekrana ‘OK' çıkması gerekmektedir.Aksi halde modem – program – bilgisayar üçlüsü arasında bir iletişim bozukluğu var demektir.
AT < ENTER > şeklinde kullanılır ve modem komutlarından bazıları bu ‘AT' komutuna eklenerek kullanılmalıdır.

‘ A ' ; modemin telefon hattınızı açmasını ve bir cevap sinyali göndermesini sağlar . Modem başka bir modem tarafından arandığında bağlantıyı kurmak için , telefon çalarken bu komutun verilmesi gerekir.
ATA < ENTER > şeklinde kullanılır.

‘ A/ ' ; modeme verdiğiniz son komutu tekrar eder.Sürekli kullanılan bir komut yada devamlı aranan bir telefon numarası olabilir , zamandan tasarruf etmek için bu komut kullanılır.
A/ < ENTER > şeklinde kullanılır.

‘ %C ' ; iletilen bilgilerin sıkıştırılmasını sağlar.Daha önce sıkıştırılmamış dosyaların transfer zamanlarını en aza indirir.Daha önce sıkıştırılmış dosyalar için kullanılırsa , transfer zamanında azalma beklerken tam tersi ile karşılaşabilirsiniz.Bu komut , ‘ N ' komutunun aldığı değerlerden etkilenmektedir.Bu seçenekler ;
0 = bilgi sıkıştırma aktif
1 = bilgi sıkıştırma pasif
AT%C [ seçenek ] < ENTER > şeklinde kullanılır.

‘ &C ' ; bağlantı durumunun belirtilmesinde kullanılır . Bazı iletişim yazılımları , modem bağlantı kurmadan önce bağlantı durumunun açık olmasını isterler. Gelişmiş iletişim yazılımları ise , bu opsiyonu bağlantı kurulduğunda açarak , kullanıcıya haber verir.Seçenekler ;
0 = bağlantı durumu her zaman açık
1 = sadece bağlantı kurulduğunda açık
AT&C < ENTER > şeklinde kullanılır.

‘ D ' ; telefon numarası çevirmek için kullanılır.Modem kullanımı , telefon hattı üzerinden telefon numarası çevrilerek , başka modemleri arama şeklinde gerçekleşir.Seçenekler ;
P— çevirmeli telefon modu
T— ton sesli telefon modu
R— aradıktan sonra cevap ver modu
W – ikinci bir çevir sinyali bekle
S – hafızadaki numarayı çevir
,  numara çevirirken bekleme yap
;  komut moduna geri dön
/  0.125 sn bekle
ATD [ seçenek ] [ seçenek ] [ telefon numarası ] < ENTER > şeklinde kullanılır.



‘ &D ' ; modemin DTR sinyalini kontrol eder ve bu sinyalin değişiminde modemin ne yapacağını belirler.Modem , DTR seçeneğini devamlı açık tutacak şekilde programlanabilir.Bir çok iletişim yazılımı , modemlerin hattı kapatmaları için bu komutu kullanır.( %D2 ) Seçenekler;
0 = DTR her zaman açık
1 = DTR kapandığı zaman modem komut moduna geçer , otomatik cevap verme kapalıdır.
2 = DTR kapandığı zaman modem telefon hattını kapatır., komut moduna geçer ve otomatik cevap verme kapalıdır.
3 = 2 ile aynı , fakat en sonunda modemin kendini sıfırlamasını sağlar( ATZ )
AT&D < ENTER > şeklinde kullanılır.

‘ E ' ;terminal programından modeme gönderilen bilgileri geriye terminale göndermeyi sağlar.Bazı terminal programları yazdıklarınızı ekranda göstermeyebilir.O zaman bu fonksiyonunuzu açık tutulmalıdır.Seçenekler ;
0 = fonksiyon kapalı
1 = fonksiyon açık
ATE [ seçenek ] < ENTER > şeklinde kullanılır.

‘ &F ' ; bu komut modemin tüm ayarlarını fabrika ayarlarına döndürür.Bazı durumlarda modem ayarları ile oynanmış olabilir, o zaman en başa dönebilmek için bu komut kullanılmalıdır.
AT&F < ENTER > şeklinde kullanılır.

‘ &G ' ; koruyucu ton ayarlamasını yapar.Ülkeler arası ayarlamalarda kullanımı gerekli olabilir.İngiltere ile yapılan görüşmelerde 1800 Hz' lik bir koruyucu ton sesi gerekmektedir.Bazı Avrupa ülkelerinde ise bu değer 550 Hz olmaktadır.ABD , Kanada ve Türkiye' de koruyucu ton uygulaması yoktur.Seçenekler ,
0 = kapalı
1 = 550 Hz
2 = 1800 Hz
AT&G <ENTER > şeklide kullanılır.

‘ G ' ; akış kontrolü ( XON / XOFF ) seçimi yapar.v.42 ve MNP kullanılmayan durumlarda modem ile bilgisayar arasında bir akış protokolü kullanmak , bilgi kaybını önlemek açısından yararlı olur.v.42 ve MNP kendi akış kontrol metotlarını kullandıkları için böyle bir durum söz konusu olduğu zaman bu komut dikkate alınmaz.Seçenekler ;
0 = kapalı
1 = açık
AT G [ seçenek ]< ENTER > şeklinde kullanılır.

‘ H ' ; modemin telefonu açıp kapatma görevini yapar.Bağlantıyı sona erdirmek için ( bağlantı halinde iken ) ya da telefonu meşgul durumuna almak için ( bağlantı halinde değilken ) kullanılır.Seçenekler ;
0 = bağlantıyı sona erdir.
1 = telefonu meşgul durumuna al
ATH [ seçenek ] <ENTER > şeklinde kullanılır.





‘ I ' ; modemin hızını ( bps ) , ROM değerini ve kayıt numarasını gösterir.Seçenekler;
0 = hızını gösterir
1 (3) = ROM testini yapar
4 (6) = ürün kayıt numarasını gösterir
ATI [ seçenek ] <ENTER > şeklinde kullanılır.

‘ Z ' ; o ana kadar ki tüm değerleri sıfırlar ve başlangıç değerine döndürür.
ATZ <ENTER > şeklinde kullanılır.

‘ L ' ; modemin sesini ayarlar.Seçenekler ;
0 = en düşük
3 = en yüksek
ATL [ seçenek ] < ENTER > şeklinde kullanılır.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 03 Ocak 2007, 19:27:12
Çalistigi makinanin mac adresini görüntüler

Alıntı Yap
'boş bir forma text1 adında geniş bir textbox ve
'CmdClose adında bir buton koyun
Option Explicit
Private Const NCBASTAT = &H33
Private Const NCBNAMSZ = 16
Private Const HEAP_ZERO_MEMORY = &H8
Private Const HEAP_GENERATE_EXCEPTIONS = &H4
Private Const NCBRESET = &H32

Private Type NCB
 ncb_command As Byte
 ncb_retcode As Byte
 ncb_lsn As Byte
 ncb_num As Byte
 ncb_buffer As Long
 ncb_length As Integer
 ncb_callname As String * NCBNAMSZ
 ncb_name As String * NCBNAMSZ
 ncb_rto As Byte
 ncb_sto As Byte
 ncb_post As Long
 ncb_lana_num As Byte
 ncb_cmd_cplt As Byte
 ncb_reserve(9) As Byte ' Reserved, must be 0
 ncb_event As Long
End Type

Private Type ADAPTER_STATUS
 adapter_address(5) As Byte
 rev_major As Byte
 reserved0 As Byte
 adapter_type As Byte
 rev_minor As Byte
 duration As Integer
 frmr_recv As Integer
 frmr_xmit As Integer
 iframe_recv_err As Integer
 xmit_aborts As Integer
 xmit_success As Long
 recv_success As Long
 iframe_xmit_err As Integer
 recv_buff_unavail As Integer
 t1_timeouts As Integer
 ti_timeouts As Integer
 Reserved1 As Long
 free_ncbs As Integer
 max_cfg_ncbs As Integer
 max_ncbs As Integer
 xmit_buf_unavail As Integer
 max_dgram_size As Integer
 pending_sess As Integer
 max_cfg_sess As Integer
 max_sess As Integer
 max_sess_pkt_size As Integer
 name_count As Integer
End Type

Private Type NAME_BUFFER
 name As String * NCBNAMSZ
 name_num As Integer
 name_flags As Integer
End Type

Private Type ASTAT
 adapt As ADAPTER_STATUS
 NameBuff(30) As NAME_BUFFER
End Type

Private Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
Private Declare Function GetProcessHeap Lib "kernel32" () As Long
Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long

Private Function EthernetAddress(LanaNumber As Long) As String
 Dim udtNCB       As NCB
 Dim bytResponse  As Byte
 Dim udtASTAT     As ASTAT
 Dim udtTempASTAT As ASTAT
 Dim lngASTAT     As Long
 Dim strOut       As String
 Dim X            As Integer

 udtNCB.ncb_command = NCBRESET
 bytResponse = Netbios(udtNCB)
 udtNCB.ncb_command = NCBASTAT
 udtNCB.ncb_lana_num = LanaNumber
 udtNCB.ncb_callname = "* "
 udtNCB.ncb_length = Len(udtASTAT)
 lngASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, udtNCB.ncb_length)
 strOut = ""
 If lngASTAT Then
   udtNCB.ncb_buffer = lngASTAT
   bytResponse = Netbios(udtNCB)
   CopyMemory udtASTAT, udtNCB.ncb_buffer, Len(udtASTAT)
    With udtASTAT.adapt
     For X = 0 To 5
       strOut = strOut & Right$("00" & Hex$(.adapter_address(X)), 2)
     Next X
   End With
   HeapFree GetProcessHeap(), 0, lngASTAT
 End If
 EthernetAddress = strOut
End Function


Private Sub CmdClose_Click()
Unload frmEthernetAddress
End Sub

Private Sub Form_Load()

 Text1 = "This machine is Ethernet Address: " & EthernetAddress(0)

End Sub


Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 09 Ekim 2007, 22:30:42
Ders notu

http://www.bote.gazi.edu.tr/boteabd/bto308/index.html
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 16 Mart 2009, 23:25:55
16F84 ILE SERI PORT http://rapidshare.com/files/210056574/16F84_ILE_SERI_PORT.pdf


Alıntı YapSeri porttan haberleşme
Visual Basic (VB), diğer dillerden farklı olarak seri port haberleşme için hazır bir
bileşen sunar. Microsoft Comm Control olarak adlandırılan bu bileşen seri portla ilgili bir
çok ayarı beraberinde getirmektedir.
Comm bileşenini form üzerine getirmek için aşağıdaki yol takip edilir.
· Projects menüsünden Components alt başlığı seçilir.
· "Controls" sekmesinden "Microsoft Comm Control 5.0 " yada VB sürümüne
bağlı olarak "Microsoft Comm Control 6.0 " seçilir.
Seçim yapıldıktan sonra alet kutusunun (toolbar) alt tarafında Comm bileşeninin
sembolü görünür. Üzerinde telefon resmi olan bileşen seri portla haberleşmede kullanılacak
Comm bileşenidir.
MsComm bileşeni MSCOMM32.OCX dosyasını kullanılır. Bunun \WINDOWS\
SYSTEM dizininde olması gerekiyor. VB, seri haberleşmesi sürücüsü olarak serialui.dll
dosyasını, MsComm'un arka planında kullanmaktadır.
Kullanılacak her bir seri port için form üzerine bir MsComm bileşeni konur.

Program satırlarında MsComm'un üç özelliği kullanıldı. PortOpen, Output ve Input.
PortOpen: "True" değeri verilerek geçerli port kullanıma açılır.
MsComm1.PortOpen=True
Output: Porta bilgi gönderir. Özellikler penceresinde görünmez.
MsComm1.Output=" MAVİ MENEKŞE"
Output özelliği verilerin hem metin hem de ikilik düzende gönderilmesini sağlar.
"String" tipinde tanımlanan bir değişkeni metin, bayt dizisi olarak tanımlanan bir değişkeni
ikilik düzende gönderir.
‘ İkilik olarak
Dim Talebe() As Byte
.....................................
MsComm1.Output=Talebe
‘Metin olarak
Dim Talebe() As String
MsComm1.Output=Talebe
‘Modeme bir komut göndermek için
MsComm1.Output="ATDT 123-87654"
Input: Belirtilen seri porttan bilgi okur. Okuma işlemi giriş tamponunu da boşaltır.
Text1.Text=MsComm1.Input
Burada iki özellik kullanılmasına rağmen esasında MsComm'un "özellikler"
(properties) kutusunda yazılı olan değerler geçerli kabul edilmişlerdir. İstenirse bu değerler
program satırlarında da değiştirilebilir.
CommPort: Kullanılacak seri port seçilir ve seçilen port numarası okunur.
MsComm1.ComPort=1 ‘Com1 seçilir
Port numaraları 1-99 arasında olabilir.
Settings: Geçerli port ayarları yapılır ve geçerli ayarlar okunur.
MsComm1.Settings="9600,N,8,1" ‘9600 baud hızı, Eşlik biti yok, 8 veri
biti, 1durdurma biti
MsComm'un kabul ettiği baud hızları: 110, 300, 600, 1200, 2400, 9600, 14400,
19200, 38400, 56000, 128000, 256000. Varsayılan değer 9600 dür.
Geçerli eşlik bitleri: E(Even), M(Mark), N(None), O(Odd), S(Space). Varsayılan
olarak None (yok) atanmıştır.
Geçerli bit sayıları: 4, 5, 6, 7, 8. Varsayılan değer 8.
Geçerli durdurma(stop) bitleri: 1, 1.5, 2. Varsayılan değer 1.
InputLen: Seri porta gelen bilgiler tampon belleklerde tutulur. Bu bilgiler okunurken kaç
karakterlik bloklar halinde okunacağını belirtir. 0 değeri atanırsa tek seferde bilgiler okunur.
InBufferCount: Kabul edilen her karakter bir alıcı tamponuna konulur ve InBufferCount
sayısı bir arttırılır. Tamponda bekleyen karakter sayısı, bu değer okunarak öğrenilir. 0 değeri
atanarak tampon boşaltılır.
Örnek kod:
If MSComm1.InBufferCount Then
Varna$ = MSComm1.Input
End If
OutBufferCount: Gönderici tampon alanında sırasını bekleyen karakter sayısını verir. 0
verilerek gönderici alan silinir.
OutBufferSize: Verici için tampon bellek miktarı. Ne kadar büyük bellek ayrılırsa programın
çalışmasına o kadar az yer kalır. Fakat günümüzde bellek kapasitesi yüksek olduğundan
programın ihtiyacına göre belirlenir. Varsayılan değer 512'dir. Bu değer azaltılabilir veya
arttırılabilir.

Alıntı YapVisual Basic İle Seri İletişim Portu Kullanımı.
'Serkan UCAR

'NightBLuex@hotmail.com

'24.11.2001 04:10:00

Selam Arkadaslar.
Bu makalemizin konusu Visual Basic MSCOMM nesnesi hakkında olacak.
Nedir bu MSCOMM ne işe yarar.
Mscomm seri iletişim kontrolüdür.
Bunu kullanmak için önce Toolbox'u ters tıklıyoruz.Menuden Components sekmesini tıklıyoruz.
Yine Menuden Microsoft comm kontrols 6.0 ı seciyoruz.Tamamı tıklıyoruz :).
Kullanılan .ocx windows\system\mscomm32.ocx dosyasıdır.

Simdi.Açtıgımız forma bir tane MSComm ilave edelim.
Ekledigimiz MSComm1 nesnesinin custom özelligine baktıgımızda General kısmında ilk olarak
hangi port'u kullanacagımız yazar.Oraya kullanacagımız port numarasını yazıyoruz.
Genel olarak seri portları Fare,modem ve ethernet kartları kullanır.
General menusunde setting kısmının karsısında 9600,n,8,1degerleri görecegiz.
9600 : yazan kısım Haberleşme için kullanılacak Hızı belirler.(bps cinsinden)
n :yazan kısım Hata kontrolu için ek bir bit ekler.'n=Parity YOk :)
8:Kullanılacak Bit sayısını ifade eder.
1:Ise Mesajın bittigini belirtmek için kullanılan bit sayısıdır.

Şimdi program kodu ile neler yapabilecegimiz üzerinde duralım.
Mscomm nesnesi hangi yöntemleri kullanır.Bir Bakalım.
MSComm1.commport = 1' Yukarda da anlattıgım gibi kullanılacak portun numarasını belirler.
MSComm1.settings ="9600,n,8,1" '9600 bps hızında,Parity biti yok,8 Bitlik veriler,1 bit stop biti seklinde ayarla.
MSComm1.portopen =True 'portu ac

Eger Porttan bilgi okumak istiyorsak kod su sekilde olur.TexBoxtan okutulan bilgiyi
mscomm1.input degerine eşitlenerek saglanır.
textoku.text=mscomm.input

Eger porta bir bilgi yazıdrmak istiyorsak yazdıracagımız degeri mscomm.output 'a eşitliyoruz.
mscomm1.output = " Hi Visual Basic"

Portu kullanıma kapamak içinde Yine mscomm1.portopen=False yazıyoruz.

Şimdi bunları ufak iki ornekle pekiştirelim.
İlk örnegimiz porta Bir mesaj göndermek olsun.

Bunun için formun üzerine bir tane textbox (txtmesaj) bir tane command (cmdgonder) bir
tanede mscomm (mscomm) nesnesi ilave ediyoruz.

Private Sub cmdgonder_Click()
On Error GoTo hata
Mesaj = txtmesaj.Text
MSComm.Output = Mesaj
Exit Sub
hata:
MsgBox "Mesaj Yollanamadı"
End Sub

Private Sub Form_Load()
MSComm.CommPort = 1
MSComm.Settings = "9600,N,8,1"
On Local Error GoTo hata
MSComm.PortOpen = True
Exit Sub
hata:
MsgBox "Port Acılamıyor"
End Sub



İkinci ornegimiz ise modeme "ATDT" modem komutu ile arama yaptırmak.
Bunun için öncelikle Bilgisayarım/Denetim Masası/ içindeki modem iconunu tıklıyoruz.
Modem özelliklerinden Baglantı noktası kısmına bakıyoruz modemimiz hangi portu kullanıyor.
Ornegin benim modemim Com 4'ü kullanıyor ve kodları ona göre yazıyorum.

Ewet bir form acıyoruz.
Yine bir tane textbox (txtnumara) bir tane command (cmdara) ve
bir tanede (konu başlıgı :) Mscomm(mscomm) ilave ediyoruz.



Private Sub cmdAra_Click()
On Error GoTo Hata
num = txtnumara.Text
MSComm.Output = "ATDT" & num & vbCr
Exit Sub
Hata:
MsgBox "Hata"
End Sub


Private Sub Form_Load()
MSComm.CommPort = 4
MSComm.Settings = "9600,N,8,1"
On Local Error GoTo Hata
MSComm.PortOpen = True
Exit Sub
Hata:
MsgBox "Port Acılamıyor"
End Sub

'F5 tusuna basınca textbox a girdigimiz numarayı aradıgını görüyoruz. :)"
'Konuyu Anladık Sanırım.Benden Bu Kadar.Geliştirmek size kalmış :).

Alıntı YapVB 6.0 İLE SERİ PORT KONTROLÜ
VB'de kontrolüne geçmeden önce seri iletişimden kısaca bahsedeyim: Seri iletişim bilgisayarın seri portundan RS232 protokolünce verinin ardarda 1 ve 0'lar biçiminde gönderilmesiyle yapılan haberleşme şeklidir. 9 ve 25 pinli olmak üzere 2 türlü seri port vardır. Yaygın olanı ise 9 pinli olanlarıdır ve biri 4, diğeri de 5 pinli olan 2 sıradan oluşur. 4 pinli olan sıra altta bulunacak şekilde bakıldığında 5 pinli olan sıranın ortadaki pini portun çıkış pini(TX), bu pinin sağındaki pin giriş pini(RX) ve o sıranın en solundaki pin ise toprak (referans) pinidir. Seri port 12V düzeyinde çalışır ve bu yüzden de 5V seviyesine düşürülmeden bir mikrodenetleyici ile doğrudan bağlantı kurulması mikrodenetleyici için sakıncalıdır. 5V seviyesindeki veriyi seri porta 12V ile ulaştıran ve seri porttan gelen 12V düzeyindeki veriyi 5V seviyesine düşüren MAX232 yongası bu sorunu çözmek için kullanılabilir.
Gelelim seri portun VB'de kontrolüne: Öncelikle seri port kontrolü için gereken RS232 protokolüne göre haberleşmemizi sağlayacak olan "mscomm32.ocx" dosyasına ihtiyacımız var. Bu dosya bileşenini formunuza eklemek için toolbox alanına sağ tıklayıp "components" tuşunu tıklayın, beliren menünün "Controls" sekmesinde "Microsoft Comm Control 6.0" kontrolünü seçip "Tamam" tuşunu tıkladığınızda bu dosya bileşeni eklenmiş olur ve toolbox alanında "MSComm" tuşu belirir. "MSComm" tuşunu sürükleyip formunuza bırakın. Şimdi ise forma eklediğiniz "MSComm" kontrolünün haberleşme ayarlarını yapmanız gerekli. Bunu da formda bulunan MSComm kontrolünü tıklayıp özellikler kısmından yapabilirsiniz. "Commport" bilgisayarın kaç numaralı seri portunun kontrol edileceğini gösterir. Settings kısmına da sırasıyla saniyede kaç bit gönderileceği(baud rate), parite biti kullanılıp kullanılmayacağı, verinin kaç bitten oluşacağı ve kaç stop biti olacağı sorularının cevapları yazılır. Örneğin: "9600,n,8,1" demek; Hız 9600bps, parite biti yok, 8 veri biti var, 1 stop biti var anlamına gelir. Burada belirlediğiniz ayarların bilgisayarınızın seri port iletişimi ayarlarıyla uyuşması gerekir. Bilgisayarınızın seri port iletişim ayarlarını da şu şekilde düzenleyebilirsiniz: "Bilgisayarım"a sağ tıklayın, "donanım" sekmesinde "aygıt yöneticisi"ne girin,"bağlantı noktaları"nı açın. Burada LPT paralel portu, COM ise seri portu temsil eder. Kontrol etmek istediğiniz seri portu sağ tıklayıp "özellikler"e girin, "Bağlantı Noktası Ayarları" sekmesinde "Saniyedeki bit sayısı" ile "BAUD RATE" değerini, "Veri bitleri" ile kaç veri biti kullanacağınızı, "Eşlik" ile parite biti kullanıp kullanmayacağınızı, "Dur bitleri" ile de kaç stop biti kullanacağınızı ayarlayabilirsiniz. Şimdi tekrar VB'ye dönelim: Forma 4 adet tuş ekleyin, biri seri portu açmak için "başlat", biri portu kapatmak için "bitir", biri gelen veriyi okumak için "verial", diğeriyse veri göndermek için "verigönder" olsun. Bu durumda aşağıdaki kodları kullanabilirsiniz. Hepinize iyi çalışmalar arkadaşlar.

Dim input, output As String
_____________________________________


Private Sub başlat_Click()
MSComm1.PortOpen = True
End Sub
_____________________________________


Private Sub bitir_Click()
MSComm1.PortOpen = False
End Sub
_____________________________________


Private Sub verial_Click()
input=MSComm1.Input
End Sub
_____________________________________


Private Sub verigönder_Click()
MSComm1.Output= output
End Sub

Alıntı YapSeri port kullanımının nekadar kolay ve basit olduğunu vereceğim ufak örneklerle sizlere göstermek istemekteyim. Formumuzda 1 command ve 1 adet label bulunmaktadır ve bunların görevlerini yazılımın üzerinde inceleyerek gidelim.

Private Sub Command1_Click()
Dim veri, L As String
MSComm1.Output = "SERI PORTTAN MERHABA"
veri = MSComm1.Input
Label1.Caption = veri
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 2
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
End Sub

Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub

Form_Load'da Mscomm1.Commport bilgisayarın hangi numaralı seri portunu kullanıcağımız belirtilmektedir. Bu numara form yüklenirken girilebileceği gibi daha sonradanda atanabilir ve değiştirilebilmektedir. Mscomm1.Settings ise Baud oranını 9600, veri bit sayısını 8, stop bit sayısını 1 ve paritisiz iletişim özelliklerini seçtik ve Portopen = True ilede portu aktif ettik. Eğerki bu portu herhangi bir mikrodeneteyici, bilgisayar veya bir başka bir cihaz tarafından kullanılıyor ise hata verecektir.

Butonumuza bastığımız zaman Mscomm1.Output= "..........." komuduyla beraber programımızdan veri gönderilecek ve daha sonra veri=Mscomm1.Input la ise gönderilen veri bittikten sonra karşıdan okunan veri, veri isimli değişkene atanacak ve label1 e yazılacaktır.

Burada dikat etmeniz gereken en önemli husus form kapanırken Mscomm1.Portopen= False demeyi unutmamanızdır. Unuttuğunuz taktirde porttak iletişim açık kalacak ve bir daha açışınızda hata ile karşılacaksınızdır.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 17 Mart 2009, 00:01:54
Alıntı YapVB60 - PIC16F628 2X16 LCD HABERLEŞMESİ

VB60 LCD KONTROL PROGRAMI İÇİN FORM OLUŞTURDUKTAN SONRA;

1 ADET CHECKBOX
1 ADET COMBOBOX
3 ADET COMMANDBUTTON
KOMPONENTLERDEN 1 ADET MSCOMM
3 ADET TEXTBOX
1 ADET Timer (Timer.INTERVAL=100 OLARAK AYARLANIR)

EKLEYİP FORMUNUZU DÜZENLEYİN. AŞAĞIDAKİ KODLARI EKLEYİNİZ.

----------------------------------------------------------------------------------------------------------
Private Sub Combo1_Click()
'COMBODAN PORT SEÇİMİ YAPILDI
MSComm1.CommPort = Combo1.ListIndex + 1

End Sub

Private Sub Command1_Click()
If Text1 = "" Then Text2 = "LÜTFEN MESAJ YAZINIZ.": GoTo ATLA


'CHECK BOX A İŞARET ATILIR.
Check1.Value = Checked
Text2 = "MESAJ GÖNDERİLİYOR......."
ATLA:

End Sub

Private Sub Command2_Click()
End
End Sub


Private Sub Command3_Click()
Text3 = "1" ' KARAKTER SAYACI BAŞA ALINIR.

MSComm1.Settings = "9600,N,8,1"
'rs232 ile ilgili ayarlar

MSComm1.PortOpen = True
'port açiliyor

MSComm1.Output = Chr(128)
'Text penceresine yazilan deger pic'e gonderiliyor

MSComm1.PortOpen = False
'port kapatiliyor
Text2 = "LCD SİLİNDİ."
End Sub

Private Sub Form_Load()
Combo1.AddItem "COM1"
Combo1.AddItem "COM2"
Combo1.ListIndex = 0
Text2 = "DEVREYİ COM1 PORTUNA TAKINIZ, TÜRKÇE KARAKTER KULLANMAYINIZ."
Text3.Text = "1"

End Sub

Private Sub Timer1_Timer()
If Check1.Value = Checked Then
If Text1 = "" Then Text3 = "1"
I = Val(Text3.Text)

DEVAM:
If Mid(Text1.Text, I, 1) = "" Then Text2 = "MESAJ GÖNDERİLDİ.": Text3 = "1": GoTo SON
MSComm1.Settings = "9600,N,8,1"
'rs232 ile ilgili ayarlar

MSComm1.PortOpen = True
'port açiliyor



MSComm1.Output = Mid(Text1.Text, I, 1)
' Text penceresine yazilan deger pic'e gonderiliyor

MSComm1.PortOpen = False


I = I + 1
If I = 33 Then I = 1: Text2 = "MESAJ GÖNDERİLDİ.": GoTo SON

Text3.Text = Str(I)
GoTo DEVAM

Else
End If

SON:
Check1.Value = Unchecked

End Sub

----------------------------------------------------------------------------------------------------------------

ŞİMDİ SIRA PIC 16F628 Lİ DEVYERİ KURMADA VE PROGRAMINI YÜKLEMEDE..

DEVRE ŞEMASI:
LCD D0 D1 D2------ D7= RB0 -RB1 RB2------- RB7
LCD E = RA0
LCD RW = GND
LCD RS = RA1

LCD VDD= +5V
LCD VSS= GND

LCD VEE = 10K POT ORTACU (POTUN DİĞER UCLARI +5V VE GND'YE BAĞLANIR)

SERİ PORT BAĞLANTI SOKETİ;

COMPIN9 TX (3) = RA3 'E SERİ 10K DİRENÇLE BAĞLANIR !....
COMPIN9 (5) = GND

PIC16F628 PIN 4 = +5V

PIC ASM KODLARI:


; LCD ekrana rs232 com 9pin tx veri gönderme

;*************************************************************************
   LIST P=16F628    
   INCLUDE "P16F628.INC"        
__CONFIG H'0030'


;------------------------------------
CNTL    EQU    0X20        ;zaman gecikme sayacı
CNTH    EQU    0X21        ;zaman gecikme sayacı
CX    EQU    0X22        ;genel amaçlı sayaç    
CY    EQU    0X23        ;SÜTUN SAYACI

S1    EQU    0X24
S2    EQU    0X25
S3    EQU    0X26
SN    EQU    0X27
;------------------RS232 DEĞİŞKENLERİ---------------
cycl_1     Equ    0x28        ; sayıcı
cycl_2    Equ    0x29        ; sayıcı
rs232in    Equ    0x2A        ;temp variable To pass its value To portb
Byte    Equ    0x2B        ;variable used To locate 8 bit
Temp    Equ    0x2C        ;temp variable For pause Time
In    Equ    2        ;RA2 Is Input
;--------------------------------------------------------
Text    EQU    0X2D        ;TEXTBOX 'TAKİ VERİ
D_LCD    EQU    0X2E
DX    EQU    0X2F
P_W    EQU    0X30
P_ST    EQU    0X31
KOM    EQU    0X32
;İLK SATIR 0X40--0X4F
;İKİNCİ    SATIR    0X50--0X5F

;--------------
#DEFINE    EN    PORTA,0        ;LCD ENABLE UCU
#DEFINE    RS    PORTA,1        ;LCD RS UCU
               ;RW UCU GND YE BAĞLANDI.

   ORG    0X00
   GoTo    INITIAL
   ORG    0X04
   GoTo    KESME

;----------------portlar hazırlanır-----------------
INITIAL
   BSF    STATUS,RP0
   CLRF    TRISB        ;PORTB --> DB0---DB7 ÇIKIŞLARI
   CLRF    TRISA    
   BSF    TRISA,2        ;RA2 --> RS232 COM PORT TX GİRİŞİ
           
   ;-----TMR0 KESME AYARLARI--------------
   MOVLW    b'10100000'    ;INTCON düzenleme bilgisi W'ye yazılır.TÜM KESME İPTAL
   MOVWF    INTCON        ;W'ye INTCON 'a aktarılır.
   MOVLW    b'10000101'    ;Option düzenleme bilgisi W'ye yazılır.
   MOVWF    OPTION_REG    ;W'ye Option 'a aktarılır.(PRESCALER=64) PULL-UP İPTAL D7.

   BCF    STATUS,RP0
;------LCD ÖN AYARLARI YAPILIYOR---
LCD_INI
   Call    LCD_RESET
   Call    TIMER_LOW
   MOVLW    0X01        ;CLEAR
   MOVWF    D_LCD
   Call    KOMUT

   MOVLW    0X38        ;TWO_LINE
   MOVWF    D_LCD
   Call    KOMUT

   MOVLW    0X0E        ;DISPLAY_ON KURSÖR On BLINK OFF
   MOVWF    D_LCD
   Call    KOMUT

   MOVLW    0X06        ;KURSÖR_INC DISPLAY
   MOVWF    D_LCD
   Call    KOMUT
   MOVLW    .16
   MOVWF    CY
   
   MOVLW    0X50
   MOVWF    FSR    
;------------------------------------------------------
   MOVLW    0X07
   MOVWF    CMCON        ;16F628 İN PORTLARI (PORTA) HAZIR..
;--------------------------------------------------------------------



;===================================================================================================



Loop
   
   
   Call    ser_RX        ; ser_RX dallan
   
   BTFSC    KOM,7
   GoTo    INITIAL

   Call    VERI_YAZ    
   DECFSZ    CY,F
   GoTo    Loop

   MOVLW    0XC0
   Call    KOMUT
   MOVLW    .16
   MOVWF    CY
   

LOOP2
   Call    ser_RX        ; ser_RX dallan
   
   
   BTFSC    KOM,7
   GoTo    INITIAL

   Call    VERI_YAZ    
   DECFSZ    CY,F        
   GoTo    LOOP2
       
   MOVLW    0X80
   Call    KOMUT
   MOVLW    .16
   MOVWF    CY        

   GoTo    Loop

   

;**********************************************************
;receive one Byte To 'Byte', 'rs232in' And w respectively

ser_RX
   clrf    Byte            ; Byte temizle
   movlw    5
   movwf    cycl_1            ; 5 times for5 bits
   btfss    PORTA, In        ; wait until Startbit
   GoTo    ser_RX            ; If no startbit GoTo ser_RX
   Call    Pause            ; pause For 1/2 Bit (48 usec)
   btfss    PORTA, In        ; test porta again
   
RX_2    
   Call    Wait            ; wait 1 Bit (94 usec)
   btfsc    PORTA, In        ;
   bcf    STATUS, C        ; high -> 0
   btfss    PORTA, In        ;
   bsf    STATUS, C        ; low -> 1
               ;
   rrf    Byte, f            ; pass carry flag To Byte reg.
   decfsz    cycl_1, f        ; 8 bits
   
   Call    Wait            ; wait 1 Bit (94 usec)
   btfsc    PORTA, In        ; Stop-Bit 1
   Call    Wait    
   btfsc    PORTA, In        ; Stop-Bit 2
   GoTo    ser_RX            ; If no StopBit 2

   movf    Byte, w
   movwf    KOM        ; Byte pass through rs232in
   Return



Wait    movlw    D'15'            ; 9600 / 4 MHz receive
   movwf    cycl_2            ;

Wait1    
   nop
   nop
   nop
                       ;
   decfsz    cycl_2, 1    
   GoTo    Wait1
   
   Return


Pause    movlw    D'15'            ; 9600 / 4 MHz
   movwf    Temp            ;    
Pause2    
   decfsz    Temp, f        ; Pause For 1/2 Bit    
   GoTo    Pause2            ;    
   Return                    ;

;**********************************************************


;===================================================================================================        

;------LCD ALT PROGRAMLARI-------------------------
;---------------------KOMUT GÖNDERME---------------
KOMUT
       
   MOVWF    PORTB        ;W --> PORTB = DB0-DB7
   BCF    RS
   ;BCF    RW        ;RW GND YAPILDI
   BSF    EN
   NOP
   BCF    EN
   Call    TIMER_LOW        ;LCD    İŞLEM GECİKMESİ
   
   Return
;---------------------VERI YAZMA---------------
VERI_YAZ
   ;DATA UÇLARINA VERİ HAZIRLA    
   MOVWF    PORTB        ;W --> PORTB = DB0-DB7
   BSF    RS
   ;BCF    RW        ;RW GND YAPILDI
   BSF    EN
   NOP
   BCF    EN
   Call    TIMER_LOW        ;LCD    İŞLEM GECİKMESİ
   
   Return

;----------------------------------------------
LCD_RESET

   MOVLW    0X03
   MOVWF    CX
NEXTI    Call    TIMER_LOW    ;bekle
   BCF    RS        ;RS=0 komut
   ;BCF    RW        ;RW GND YAPILDI

   MOVLW    0X30        ;resetleme komutu 30h
   MOVWF    PORTB        ;W --> PORTB = DB0-DB7    
   
   BSF    EN    
   NOP
   BCF    EN
   DECFSZ    CX,F        ;CX = CX -1
   GoTo    NEXTI
   Return

;----------------------------------------------------------
TIMER_LOW

   MOVLW    0X12
   MOVWF    CNTH

NEXT2    MOVLW    0XFF
   MOVWF    CNTL

NEXT1    DECFSZ    CNTL,F
   GoTo    NEXT1
   DECFSZ    CNTH,F
   GoTo    NEXT2
   
   Return
;-------------------------------------------------------

GECIKME

MOVLW    .2
MOVWF S1
DONGU1

MOVLW    .254
MOVWF S2
DONGU2

MOVLW .254
MOVWF S3
DONGU3

DECFSZ S3,1
GoTo DONGU3
DECFSZ S2,1
GoTo DONGU2
DECFSZ S1,1
GoTo DONGU1
Return

;----------------TMR0 KESME ALT PROGRAMI----------------
KESME
PUSH
   MOVWF    P_W    ;W --> P_W
   MOVF    STATUS,W
   MOVWF    P_ST    ;STATUS -->P_ST

   INCF    SN,F
   
   
   MOVLW    .61
   SUBWF    SN,W
   btfss    STATUS,Z
   GoTo    POP
   clrf    SN
   

   
POP
   MOVF    P_ST,W
   MOVWF    STATUS    ;P_ST -->STATUS
   MOVF    P_W,W    ;P_W --> W
   BCF    INTCON,2


   RETFIE

;----------------------------------
   End


;*************************************************************************


Not : TAKILDIĞINIZ YER OLURSA MRESAT42@HOTMAIL 'E GÖNDEREBİLİRSİNİZ.
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 17 Mart 2009, 00:04:54
Alıntı YapMscomm1 kullanarak porta binary veri yollama
Sevgili arkadaslar genellikle com portdan bir aygıt kontrol etmek istediğiniz zaman bu bilgiyi porta binary olarak göndermek gerekebilir. Umarım bu ipucu sizlere faydalı olur..
Burda porta sayısal Ascii değerler gönderiyoruz. (klavyede bastığımız tuşların karşılığını)
İsteyen bu ipucundan yola cıkarak programı dahada geliştirebilir..

Projeye eklemeniz gereken öğeler..

Combo1 (portu seçmek icin ama isterseniz textbox ta kullanabilirsiniz)
text1 (Gönderilen veri)
text2 (alınan veri)
command1 (data gönderme)
command2 (gönderilen datayı alma)
command3 (Port acma)

mscomm1 (comport bağlantısı için activex nesnesi)


Dim Ac As Boolean

Private Sub Command1_Click() ' Veriyi gönder
If Ac = False Then: MsgBox "Port acık değil", vbCritical, "": Combo1.SetFocus: Exit Sub

If Not IsNumeric(Text1.Text) Then
MsgBox "Sayısal Değer Giriniz", vbCritical, ""
Text1.Text = "": Text1.SetFocus
Exit Sub
End if

If Text1.Text > 255 Then
MsgBox "255 den küçük değer giriniz", vbCritical, ""
Text1.Text = "": Text1.SetFocus
Exit Sub
End if

Dim TransmitByte As Byte
TransmitByte = Text1.Text
MSComm1.Output = Chr(TransmitByte)
End Sub

Private Sub Command2_Click() ' veriyi al

If Ac = False Then
MsgBox "Port acık değil", vbCritical, ""
Combo1.SetFocus
Exit Sub
End if

Dim TmpStr As String
Dim StrLen As Long, I As Long
Dim FileData(100) As Byte

While MSComm1.InBufferCount > 0
TmpStr = MSComm1.Input
StrLen = Len(TmpStr)
For I = 1 To StrLen
FileData(I) = CByte(Asc(Mid(TmpStr, I, 1)))
Next I
Wend

Text2.Text = TmpStr

End Sub

Private Sub Command3_Click() ' portu aç
On Error GoTo PORTHATA

If Ac = False Then
MSComm1.CommPort = Combo1.Text
MSComm1.PortOpen = True
Ac = True
MsgBox "COM" & Combo1.Text & " ACILDI!.", vbInformation, ""
End If

Exit Sub

PORTHATA:
MsgBox Err.Description, vbCritical, ""

End Sub
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 17 Mart 2009, 00:07:54
Alıntı YapCom Port ile elektronik terazilerden bilgi okuma ve kullanma
' işlemlere baslamadan once
' Microsoft Common Dialog Control 6.0 (SP3)
' componnetinin eklenmiş ve form üzerine yerleştirilmiş olması gerekmektedir.

Private Sub terazi_tart_Click()
On Error Resume Next
' kantar portları açılacak
MSComm1.PortOpen = True
MSComm1.Output = "cpa0000000" + Chr(13)

MSComm1.Output = "rd" + Chr(13)
Do
'dummy = doevent()
Loop Until MSComm1.InBufferCount >= 5
okunan_sayi.Text = Val(MSComm1.Input)


HAM_DEGER = okunan_sayi
okunan_sayi = Left(okunan_sayi.Text, Len(okunan_sayi.Text) - 1)
ONDALIK_DEGER = Right(HAM_DEGER, 1)

okunan_sayi = okunan_sayi & "." & ONDALIK_DEGER


'******************* HESAPLAMALARLA ILGILI ISLEMLER

net_kilo = Val(okunan_sayi) - ((amb_adet * darasi) + ARAC_DARA)

net_kilo = Round(net_kilo, 3)

birim_agirlik = net_kilo / ADET

birim_agirlik = Round(birim_agirlik, 3)

'KANTAR PORTUNU KAPATACAK
MSComm1.PortOpen = False

'End If


'******************* HESAPLAMALARLA ILGILI ISLEMLER BITTI

End Sub
Başlık: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 17 Mart 2009, 00:10:28
Alıntı YapZEBRA BARKOD YAZICISINI SURUCU OLMADAN KULLANMAK
Bu kodlar ile Zebra S500 muadiri barkod/etiket yazıcılarından istediğiniz ebatta çıktı alabilirsiniz. Aşağıdaki kodlar yazıcı üzerindeki fontları kullanarak çıktı almanızı sağlar. Ancak bu kodlar ile türkçe karakterleri yazdıramazsınız.

'Fx = yazınn kağıt üzerinde yatay düzlemdeki yeri
'Fy = yazınn kağıt üzerinde dikey düzlemdeki yeri
'Fh=Font yüksekliği
'Fw=Font genişliği
'Fara = bir satırdaki harf sayısı, HARF SINIRI (FCH) nı aşdığında aşağıya geçer.Bu değişken iki satır arasındaki aralığın uzunluğudur.
'Fch bir satırdaki harf sayısı
Dim ZStr As String
Public Sub ZbrPrn(InWrd, Fx As Integer, Fy As Integer, Fh As Integer, Fw As Integer, Fara As Integer, FCh As Integer)
Dim Ad1 As String
Dim S As Integer
If Trim(InWrd) <> "" Then
Ad1 = ""
For S = 1 To Len(InWrd)
If S < Len(InWrd) And Len(Ad1) < FCh Then
Ad1 = Ad1 & Mid(InWrd, S, 1)
ElseIf S < Len(InWrd) And Len(Ad1) = FCh Then
Ad1 = Ad1 & Mid(InWrd, S, 1)
ZStr = ZStr & " ^FO" & Fx & "," & Fy & "^AON," & Fh & "," & Fw & "^FD" & Ad1 & "^FS"
Fy = Fy + Fara
Ad1 = ""
ElseIf S = Len(InWrd) Then
Ad1 = Ad1 & Mid(InWrd, S, 1)
ZStr = ZStr & " ^FO" & Fx & "," & Fy & "^AON," & Fh & "," & Fw & "^FD" & Ad1 & "^FS"
Ad1 = ""
End If
Next
End If
End Sub
Public Sub ZbrOut(MsComm1 As Object)
MsComm1.Output = ZStr
End Sub
Public Sub ZbrStr()
ZStr = "^XA"
End Sub
Public Sub ZbrEnd()
ZStr = ZStr & "^XZ"
End Sub
Public Sub ZbrClose(MsComm1 As Object)
MsComm1.PortOpen = False
End Sub
Public Sub ZbrOpen(MsComm1 As Object)
With MsComm1
.CommPort = Trim(UsrCfg.PortNo)
.Settings = Trim(UsrCfg.BpS) & "," & Trim(UsrCfg.Prt) & "," & Trim(UsrCfg.DBit) & "," & Trim(UsrCfg.SBit)
.PortOpen = True
.InputLen = 0
End With
End Sub

Private Sub Command1_Click()
ZbrOpen MsComm1
ZbrStr
ZbrPrn "BU BIR DENEMEDIR", 50, 50, 40, 20, 50, 30
ZbrEnd
ZbrOut MsComm1
ZbrClose MsComm1
End Sub
Başlık: Ynt: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: subram - 19 Nisan 2011, 23:06:19
hocam linki yenileme şansımız var mı acaba

Edit: düzelttim hocam. gerek kalmadı ama :)
Başlık: Ynt: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: gareven - 11 Haziran 2012, 12:11:55
bu kodlar çok iyi olmuş hocam bunlarla bir servo motor kontrol arayüzü de yapabilir miyiz acaba?
Başlık: Ynt: Visual Basic 6.0 Rehberi (Türkçe)
Gönderen: OG - 11 Haziran 2012, 12:32:55
Alıntı yapılan: subram - 19 Nisan 2011, 23:06:19
hocam linki dşansımız var mı acaba
Subram sorunu yeni gördüm ama anlamadım, "dşansımız" ne demek? Herhalde yanlış tuşladın.