Yayınlama: 7 Ağustos 2020
Bilgisayarda girdi birimi olarak kullanılan donanımlardan en çok kullanılanı
klavye ve faredir.
QuickBasic ile kullanıcının klavye girdisi
sağlayabileceği gibi klavye tuş vuruşları da takip edilip kontrol edilebilir.
Klavye ile veri girişi
INPUT, LINE INPUT
Klavyeden girilen karakterleri değişken(ler)e aktarır. Ayrıntı için:
3: Değişkenlere veri aktarma
INKEY$
Klavyeden tuşlara basıldığında tuş bilgileri klavye ara belleğine(tampon)
aktarılır.
PLAY komutunda olduğu gibi tampondaki sıraya göre tuş vuruşları bilgisayara
iletilerek değerlendirilir.
Tamponda bekleyen bir karakter yoksa INKEY$ boş olacaktır.
Tek karakterlik bir dize, klavyeden okunan gerçek tuş karakteri içerirken, iki
karakterli bir dize, ilk karakteri 0 olan genişletilmiş bir kodu belirtir.
F1-F12, imleç yön tuşları, home, end... Nümerik klavye tuşları... vb.
Tek başına basılan CTRL, ALT, SHIFT, CAPS LOCK, NUM LOCK, SCROLL LOCK
tuşlarını algılamaz.
Aşağıdaki kodları deneyin.
' Bir tuşa basmasını bekletme DIM mesaj AS STRING CLS mesaj = "Devam etmek için bir tuşa basınız" PRINT mesaj WHILE INKEY$ = "": WEND PRINT mesaj DO: LOOP UNTIL INKEY$ <> "" PRINT mesaj DO: LOOP WHILE INKEY$ = "" PRINT mesaj DO UNTIL INKEY$ <> "": LOOP PRINT mesaj DO WHILE INKEY$ = "": LOOP PRINT mesaj a$ = INPUT$(1) PRINT mesaj SLEEP PRINT "Son"
Örnek 2:
' Klavyeden basılan tuşu, karakterini ve karakter kodunu yazar
' Tek başına CTRL ALT SHIFT tuşlarını algılamaz
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
DO
a$ = INKEY$
IF a$ <> "" THEN
g = LEN(a$)
PRINT "TUŞ: "; a$, "KOD:";
IF g = 2 THEN
PRINT ASC(LEFT$(a$, 1)); ASC(RIGHT$(a$, 1))
ELSE
PRINT ASC(a$)
END IF
END IF
LOOP
Örnek 3:' Yön tuşları ile basit yılan oyunu
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
DEFINT A-Z
CONST sol = "K", sag = "M", yuk = "H", asa = "P"
krktr$ = CHR$(219)
satir = 12
sutun = 40
CLS
COLOR 14
LOCATE satir, sutun, 1, 0, 8
DO
c$ = INKEY$
IF LEN(c$) = 2 THEN
SELECT CASE RIGHT$(c$, 1)
CASE sol
sutun = sutun - 1
IF sutun < 1 THEN sutun = 1
CASE sag
sutun = sutun + 1
IF sutun > 80 THEN sutun = 80
CASE yuk
satir = satir - 1
IF satir < 1 THEN satir = 1
CASE asa
satir = satir + 1
IF satir > 25 THEN satir = 25
END SELECT
LOCATE satir, sutun, 0
PRINT krktr$;
END IF
LOOP UNTIL c$ = CHR$(27)
Örnek 4: Yön tuşları ile kontrol edilen menü örneği
' Yön tuşları ile kontrol edilen menü örneği
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
DEFINT A-Z
DIM eleman(6) AS STRING
CONST azr = 4 'aktif menü elemanı zemin rengi
'menü elamanlarını aktar
FOR n = 0 TO 6
READ eleman(n)
NEXT
CLS
'Zemin hazırla
SCREEN 0, , 2, 0
COLOR 7, 1
FOR n = 1 TO 2000: PRINT CHR$(178); : NEXT
SCREEN 0, , 0, 0
'Hazır zemini ekrana aktar
PCOPY 2, 0
DO
r = RND * 12 + 2 'menü satır
c = RND * 40 + 1 'menü sütun
me = menu(eleman(), r, c, azr) 'menü elemanı
PCOPY 2, 0 'Hazır zemini ekrana aktar
LOCATE 1, 1
PRINT "Seçilen menü elemanı: "; eleman(me);
SELECT CASE me
CASE 0 'yeni
'..
CASE 1 'Aç
'..
CASE 2 'Kaydet
'..
'..
CASE 6 'çıkış
EXIT DO
END SELECT
LOOP
DATA Yeni,Aç,Kaydet,Farklı kaydet...,Yazdır,Baskı Önizleme,Çıkış
FUNCTION menu (elmn() AS STRING, r, c, azr)
'r: menü sol üst köşe satır no
'c: menü sol üst köşe sütun no
'azr: aktif menü elemanı zemin rengi
YukOk$ = CHR$(0) + "H" 'Yukarı yön tuşu
AsaOk$ = CHR$(0) + "P" 'Aşağı yön tuşu
mes = UBOUND(elmn) - LBOUND(elmn) 'menü eleman sayısı
'en çok karakterli elemanın uzunluğunu bul
FOR n = 0 TO mes
euz = LEN(elmn(n)) 'eleman uzunluğu
IF euz > g THEN g = euz 'eleman uzunluğu g den büyükse
NEXT
COLOR 0, 7
'PCOPY 0, 1
'Çerçeve çiz
LOCATE r, c
PRINT CHR$(218); STRING$(g + 2, 196); CHR$(191)
LOCATE r + mes + 2, c
PRINT CHR$(192); STRING$(g + 2, 196); CHR$(217)
FOR n = 0 TO mes
LOCATE r + n + 1, c
PRINT CHR$(179); SPACE$(g + 2); CHR$(179)
NEXT
'Gölge dikey
FOR a = r + 1 TO r + mes + 2
c1 = c + g + 4
z1$ = CHR$(SCREEN(a, c1)) 'zemin karakterini al
z2$ = CHR$(SCREEN(a, c1 + 1))
COLOR 8, 0
LOCATE a, c1: PRINT z1$ 'zemin karakterini yaz
LOCATE a, c1 + 1: PRINT z2$
NEXT
'Gölge yatay
FOR b = c + 2 TO c + g + 5
z1$ = CHR$(SCREEN(a, b))
COLOR 8, 0
LOCATE a, b: PRINT z1$
NEXT
GOSUB myaz 'menü elemanlarını yaz
DO
k$ = INKEY$
SELECT CASE k$
CASE YukOk$
akmen = akmen - 1 'aktif menü elemanı numarası
IF akmen < 0 THEN akmen = mes
CASE AsaOk$
akmen = akmen + 1
IF akmen > mes THEN akmen = 0
CASE CHR$(13) 'enter
menu = akmen 'aktif menü elemanı numarasını ver
'PCOPY 1, 0
EXIT FUNCTION
END SELECT
IF k$ = YukOk$ OR k$ = AsaOk$ THEN GOSUB myaz
LOOP
myaz:
FOR n = 0 TO mes
IF n = akmen THEN 'aktif menü elemanı numarası
COLOR 15, azr
ELSE
COLOR 0, 7
END IF
LOCATE r + n + 1, c + 2
PRINT elmn(n) + STRING$(g - LEN(elmn(n)), 32)
NEXT
RETURN
END FUNCTION
Bir başka menü örneği:
INPUT$(n)
Klavyeden n sayısı kadar karakter girişini bekler. a$=INPUT$(1) satırı
a$ = INKEY$ satırına benzer. INPUT$ tuş vuruşunu bekler, INKEY$ ise beklemez.
a$ = INPUT$(3) PRINT a$
KEY n
Kullanımı:
KEY n, string_ifadeKlavye fonksiyon tuşlarına string değerler atar. Atanan fonksiyon tuşuna basıldığında string değerlerde belirtilen tuşlara basılmış gibi olur.
Örnek 1:
CLS KEY 1, CHR$(219) 'F1 tuşuna 219 karakteri atandı KEY 2, CHR$(24) 'F2 tuşuna 24 karakteri atandı KEY 3, CHR$(13) 'F3 tuşuna ENTER karakteri atandı PRINT "F1-F3 deneyiniz" INPUT "Test: ", a$ PRINT a$n : Fonksiyon tuşu numarasıdır.
n için verilecek değerler:
1-10: F1-F10 fonksiyon tuşları
11: Yukarı yön tuşu(yukarı ok)
12: Sol yön tuşu
13: Sağ yön tuşu
14: Aşağı yön tuşu
15-25: Kullanıcı tanımlı tuşlar
30-31: F11-F12 fonksiyon tuşları
string_ifade: 15-25 dışındaki tüm n değerleri için tuşa
basıldığında girilen string dizedir.
15-25 için kullanılacak string_ifadesi sözdizimine sahiptir.
CHR$(klavye işareti) + CHR$(tarama kodu) şeklinde olmalıdır.
klavye işareti(keyboard flag): CTRL, ALT, SHIFT, CAPS LOCK, NUM LOCK
tuşlarının ASCII karakter karşılığı olmadığı için klavye işareti olarak bu
tuşların değerleri kullanılır.
Klavye işareti değerleri:
0: işaret yok. Tek tuş kullanımı
1: Sol Shift
2: Sağ Shift
4: Ctrl
8: Alt
32: Num Lock
64: Caps Lock
128: Genişletilmiş tuşlar.
Birden çok fonksiyon tuşu beraber basıldığını takip etmek için tuş
değerleri toplanır.
Örneğin: CTRL+SOL SHIFT için 4 + 1 = 5
Örnek 2:
KEY 15, CHR$(4) + CHR$(13) ' CTRL+ENTER KEY 15, CHR$(4) + CHR$(1) ' CTRL+ESC KEY 16, CHR$(128) + CHR$(72) ' Yukarı ok KEY 18, CHR$(128) + CHR$(80) ' Aşağı ok
tarama kodu: Her bir klavye tuşuna ait koddur. Kod listesi için
QuickBasic menüsü Help / Contents sayfasında
Keyboard Scan Codes sayfasını açın.
Çevrimiçi sayfa
Örnek 3:
' Klavye kısayolu kullanım örneği ' ©2020 Mesut Akcan ' mesutakcan.blogspot.com CLS PRINT "Num lock kapatın." PRINT "Kaydet: CTRL+S" PRINT "Yardım: F1" PRINT "Çıkış: ESC" ON KEY(1) GOSUB yardim 'F1 tuşu basıldığında KEY(1) ON KEY 15, CHR$(4) + CHR$(31) 'CTRL+S KEY(15) ON ON KEY(15) GOSUB kaydet 'CTRL+S tuşlarına basıldığında KEY 16, CHR$(0) + CHR$(1) 'ESC KEY(16) ON ON KEY(16) GOSUB son 'ESC tuşuna basıldığında DO: LOOP 'Sonsuz döngü kaydet: n = n + 1 PRINT "Kaydedildi... Sayı:"; n RETURN yardim: PRINT "Program yardımı: ...." RETURN son: PRINT "Program sonlandı !" END RETURN
KEY(n) ON | OFF | STOP
KEY(n) ON: n ile tanımlanan fonksiyon tuşu kullanımda olur.
KEY(n) OFF: n ile tanımlanan fonksiyon tuşu kullanım dışı olur
KEY(n) STOP: n ile tanımlanan fonksiyon tuşu kullanımı duraklatılır.
KEY(n) ON ile tekrar aktif edilir.
KEY LIST
Fonksiyon tuşlarını ve KEY n ile fonksiyon tuşlarına atanan string
ifadeleri listeler.
KEY ON
Ekranın en alt satırında fonksiyon tuş numaralarını ve atanan string
ifadeleri gösterir. KEY(n) ON ile karıştırmayın. Farklı işleve sahiptir.
KEY OFF
Ekranın en alt gösterilen fonksiyon tuşlarını gizler. KEY(n) OFF ile
karıştırmayın.
Örnek 1:
' Fonksiyon tuşları kullanım örneği
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS
KEY 1, "Yardım"
KEY 2, "Yeni"
KEY 3, "Aç"
KEY 4, "Kaydet"
KEY 5, "Yazdır"
KEY 7, "Gizle"
KEY 8, "Göster"
KEY 10, "Çıkış"
KEY LIST 'Fonksiyon tuşlarını listeler
KEY ON
ON KEY(1) GOSUB yardim 'F1 e basıldığında
KEY(1) ON
ON KEY(2) GOSUB yeni 'F2 ye basıldığında
KEY(2) ON
ON KEY(7) GOSUB gizle 'F7 ye basıldığında
KEY(7) ON
ON KEY(8) GOSUB goster 'F8 e basıldığında
KEY(8) ON
ON KEY(10) GOSUB son 'F10 a basıldığında
KEY(10) ON
DO: LOOP 'sonsuz döngü
END
yardim:
CLS : PRINT "Yardım sayfası"
RETURN
yeni:
CLS : PRINT "Yeni dosya"
RETURN
gizle:
KEY OFF
RETURN
goster:
KEY ON
RETURN
son:
PRINT "Program sonlandı !"
FOR n = 1 TO 10
KEY n, ""
KEY(n) OFF
NEXT
END
RETURN
ON KEY(n) GOSUB
Bir olay gerçekleştiğinde belirtilen alt rutini çalıştıran QuickBasic
komutlarından biriside ON KEY'dir. Diğerlerinin listesini görmek için
editörde imleç ON üzerinde iken F1 tuşuna basınız.
Adından da anlaşılacağı gibi ON KEY, n ile belirtilen tuşa
basıldığında belirtilen alt rutin çalıştırılır.
Kullanımı:
ON KEY(n) GOSUB {satır etiketi | satır numarası}
GOSUB'dan sonra çalıştırılacak alt rutinin satır numarası veya
etiketi belirtilir.
Örnek 1:
' Fonksiyon tuşları kullanım örneği
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS
DATA 1, "Yardım", 2, "Yeni", 3, "Aç"
DATA 4, "Kaydet", 5, "Yazdır", 10, "Çıkış"
FOR n = 1 TO 6
READ k
READ m$
KEY k, m$
KEY(k) ON
NEXT
ON KEY(1) GOSUB yardim
ON KEY(2) GOSUB yeni
ON KEY(3) GOSUB ac
ON KEY(4) GOSUB kaydet
ON KEY(5) GOSUB yazdir
ON KEY(10) GOSUB son
KEY LIST
DO: LOOP
END
yardim: 'F1
PRINT "Yardım"
RETURN
yeni: 'F2
PRINT "Yeni"
RETURN
ac: 'F3
PRINT "Aç"
RETURN
kaydet: 'F4
PRINT "Kaydet"
RETURN
yazdir: 'F5
PRINT "Yazdır"
RETURN
son: 'F10
PRINT "Son"
FOR n = 1 TO 10
KEY n, ""
KEY(n) OFF
NEXT
END
RETURN
INP
Kullanımı:
INP(port)
Bilgisayarın giriş/çıkış(I/O = Input/Output) bağlantı
noktasından(port) okunan bayt değerini verir.
Klavye donanımı da bir G/Ç bağlantısı oluşturduğundan klavyenin port
adresinden klavyeden basılan tuşun durumu hakkında bilgi alınabilir. Tek
olarak basılan CTRL, SHIFT, ALT tuşlarını da algılar.
Klavye port adresi &H60'dır.
INP ve OUT komutu donanıma doğrudan erişim sağladığı için
dikkatli kullanmak gerekir.
Örnek 1:
' INP fonksiyonu örneği ' ©2020 Mesut Akcan ' mesutakcan.blogspot.com CLS PRINT "Basılan tuş tarama kodu:" DO LOCATE 2: PRINT USING "###"; INP(&H60) '96 LOOPÖrnek 2:
' INP fonksiyonu örneği
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
DIM kod AS INTEGER
CLS
PRINT "Tuş basılı iken kod...:"
PRINT "Tuş bırakıldığında kod:";
DO
kod = INP(&H60) 'klavye portu: 96
IF kod < &H80 THEN '128
COLOR 10: LOCATE 1, 24: PRINT kod
END IF
IF kod > &H7F THEN '127
COLOR 12: LOCATE 2, 24: PRINT kod
END IF
LOOP
Örnek 3:' INP fonksiyonu ile tuşa basılma durumu
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
DIM kod AS INTEGER
CLS
DO
kod = INP(&H60) 'klavye portu: 59
IF kod < 128 THEN
COLOR 10: b$ = " basıldı..."
ELSE
COLOR 12: b$ = " bırakıldı..."
END IF
LOCATE 1, 1
SELECT CASE kod
CASE 72, 200: PRINT "Yukarı ok"; b$
CASE 29, 157: PRINT "CTRL"; b$
CASE 56, 184: PRINT "ALT"; b$
CASE 42, 170: PRINT "Sol SHIFT"; b$
CASE 28, 156: PRINT "ENTER"; b$
CASE 30, 158: PRINT "A"; b$
CASE 1: EXIT DO
END SELECT
LOOP
| Önceki Bölüm: 24: Ses, Müzik | Sonraki Bölüm: 26: Olay ile dallanma |




hocam iyi günler,
YanıtlaSilQ basic'te geri alma tuşu var mı ?
Editör için soruyorsanız var ama DOSBOX'ta sorunlu. Virtualbox altında çalışıyor
Sil