Yayınlama: 5 Ağustos 2020
Fare konumunu değiştirme
Çoğunlukla fare konumunu kullanıcı fareyi hareket ettirerek değiştirir ancak
gerekirse kodlarla da farenin konumunu değiştirilebilir.
Bu işlem için kesinti çağrılmadan önce yazmaçlara aşağıdaki değerler
aktarılır. Sonra kesinti çağrılır.
AX = &H4
CX = Farenin X konumu
DX = Farenin Y konumu
inreg.ax = &H4 inreg.cx = 100 'fare X konumu inreg.dx = 120 'fare Y konumu CALL INTERRUPT(&H33, inreg, outreg)Örnek 1:
' ©2020 Mesut Akcan ' mesutakcan.blogspot.com '$INCLUDE: 'qb.bi' DEFINT A-Z CONST goster = 1, gizle = 2 CLS DIM SHARED inreg AS RegType, outreg AS RegType inreg.ax = &H0 Kesinti IF outreg.ax = &H0 THEN PRINT "Fare yok ya da kurulu değil!": END END IF CLS FareIkonu goster FOR satir = 4 TO 20 STEP 4 FOR Sutun = 20 TO 60 STEP 20 LOCATE 1, 1: COLOR 7 PRINT USING "Fare konumu: Satır:## Sütun:##"; satir; Sutun LOCATE satir, Sutun - 2: COLOR 10: PRINT "->" x = (Sutun - 1) * 8 y = (satir - 1) * 8 FareKonumu x, y SLEEP 1 NEXT NEXT SUB FareIkonu (durum%) inreg.ax = durum% Kesinti END SUB SUB FareKonumu (x%, y%) inreg.ax = &H4 inreg.cx = x% inreg.dx = y% Kesinti END SUB SUB Kesinti CALL INTERRUPT(&H33, inreg, outreg) END SUBÖrnek 2:
' ©2020 Mesut Akcan ' mesutakcan.blogspot.com '$INCLUDE: 'qb.bi' DEFINT A-Z CLS CONST goster = 1, gizle = 2 CONST pi# = 3.1415926535# DIM SHARED inreg AS RegType, outreg AS RegType inreg.ax = &H0 Kesinti IF outreg.ax = &H0 THEN PRINT "Fare yok ya da kurulu değil!": END END IF SCREEN 12 COLOR 12 FareIkonu goster FOR n = 0 TO 360 STEP 60 radyan# = n * pi# / 180 x = 320 + SIN(radyan#) * 180 y = 220 + COS(radyan#) * 180 IF n = 0 THEN r = 0 ELSE r = 10 FareKonumu x, y FareIkonu gizle LINE -(x, y), r FareIkonu goster SLEEP 1 NEXT y$ = "ALTIGEN" FOR n = 37 TO 44 FareKonumu n * 8, 225 LOCATE 14, n: PRINT MID$(y$, n - 36, 1) SLEEP 1 NEXT SUB FareIkonu (durum%) inreg.ax = durum% Kesinti END SUB SUB FareKonumu (x%, y%) inreg.ax = &H4 inreg.cx = x% inreg.dx = y% Kesinti END SUB SUB Kesinti CALL INTERRUPT(&H33, inreg, outreg) END SUB
Fare Sınırlarını belirleme
Normalde fare ile ekranın her bir noktasına erişebiliriz. Yani farenin
sınırları ekranın kenarlarıdır ancak kodlama ile fare sınırları belirlenip
farenin ekrandaki kullanım alanı kısıtlanabilir.
Kısıtlama, ekranın X ve Y koordinatının minumum ve maksimum değerleri
verilerek yapılır.
X ve Y konum değerlerini belirlemek için iki ayrı kesinti çağırmak gerekir.
X konumu için yazmaçlara aşağıdaki değerler aktarılır. Sonra kesinti çağrılır.
AX = &H7
CX = Konum sınırı x1 değeri
DX = Konum sınırı x2 değeri
Y konumu için yazmaçlara aşağıdaki değerler aktarılır. Sonra kesinti
çağrılır.
AX = &H8
CX = Konum sınırı y1 değeri
DX = Konum sınırı y2 değeri
inreg.ax = &H7 inreg.cx = 50'x1 inreg.dx = 400'x2 CALL INTERRUPT(&H33, inreg, outreg) inreg.ax = &H8 inreg.cx = 50'y1 inreg.dx = 200'y2 CALL INTERRUPT(&H33, inreg, outreg)Örnek:
' Fare konum sınırlarını ayarla ' ©2020 Mesut Akcan ' mesutakcan.blogspot.com '$INCLUDE: 'qb.bi' DEFINT A-Z DIM SHARED FareX, FareY CLS CONST goster = 1, gizle = 2, Sol = 1 DIM SHARED inreg AS RegType, outreg AS RegType inreg.ax = &H0 Kesinti IF outreg.ax = &H0 THEN PRINT "Fare yok ya da kurulu değil!": END END IF SCREEN 12 COLOR 12 x1 = 50: y1 = 50 'Fare sınırı sol üst köşe x2 = 400: y2 = 200 'Fare sınırı sağ alt köşe LINE (x1 - 1, y1 - 1)-(x2 + 1, y2 + 1), 14, B FareSINIRI x1, y1, x2, y2 'Fare sınırlarını belirle FareIkonu goster DO FareXYal 'Fare koordinatını al tus = outreg.bx 'Fare tuş bilgisi IF tus = Sol THEN 'sol tuş basılı ise FareIkonu gizle LINE (px, py)-(FareX, FareY), 10 FareIkonu goster END IF px = FareX: py = FareY 'Fare önceki konumu LOOP UNTIL INKEY$ = CHR$(27) 'ESC: Çıkış SUB FareIkonu (durum%) inreg.ax = durum% Kesinti END SUB DEFINT A-Z SUB FareSINIRI (x1, y1, x2, y2) inreg.ax = &H7 inreg.cx = x1 inreg.dx = x2 Kesinti inreg.ax = &H8 inreg.cx = y1 inreg.dx = y2 Kesinti END SUB SUB FareXYal inreg.ax = &H3 Kesinti FareX = outreg.cx FareY = outreg.dx END SUB DEFSNG A-Z SUB Kesinti CALL INTERRUPT(&H33, inreg, outreg) END SUB
Fare hızını ayarlama
Fareyi zeminde kaydırdığımızda ekranda kaç karakter ya da kaç piksel
ilerleyeceğini fare hız ayarı ile yapılabilir.
Yazmaçlara aktarılacak değerler:
AX = &HF
CX = Yatayda fare hızı
DX = Dikeyde fare hızı
Fare hızı varsayılan değeri CX=8 ve DX=16 'dır.
CX ve DX yazmacına aktarılacak hız değeri hesaplanırken aşağıdaki formül
kullanılır.
Metin ekranda: 200 / farenin zemin üzerinde 1 inç(2.54 cm)
hareketinde ekranda kaç karakter ilerleyeceği
Örneğin: 200 / 25 karakter = 8
Grafik ekranda: 25 * farenin 1 inç hareketinde ekranda kaç piksel
ilerleyeceği
Örneğin: 25 * 200 piksel = 8
Örnek:
' Fare hızını ayarla ' ©2020 Mesut Akcan ' mesutakcan.blogspot.com '$INCLUDE: 'qb.bi' DEFINT A-Z CLS DIM SHARED inreg AS RegType, outreg AS RegType SCREEN 12 inreg.ax = &H1 'fare göster Kesinti FOR hiz = 0 TO 80 STEP 8 LOCATE 1, 1: PRINT "Fare Hız değeri:"; hiz inreg.ax = &HF inreg.cx = hiz inreg.dx = hiz Kesinti SLEEP 2 NEXT SUB Kesinti CALL INTERRUPT(&H33, inreg, outreg) END SUB
Fare hassasiyetini ayarlama
Farenin ekrandaki piksel başına fare koordinatlarının oranını ayarlayarak fare
hassasiyetini ayarlar.
Fare hızını ayarlamaya benzer bir etki oluşturur.
Kesintiden önce yazmaçlara aktarılacak değerler:
AX = &H1A
BX = Yatayda fare hassasiyeti
CX = Dikeyde fare hassasiyeti
DX = Çift hıza çıkmak için eşik değeri
Fare eşik hızına ulaştığında fare hızı iki katına çıkar (Bu değer AX=&H13
ve DX ile de ayarlanabilir)
Örnek:
' Fare hassasiyetini ayarla ' ©2020 Mesut Akcan ' mesutakcan.blogspot.com '$INCLUDE: 'qb.bi' DEFINT A-Z CLS DIM SHARED inreg AS RegType, outreg AS RegType SCREEN 12 inreg.ax = &H1 'fare göster Kesinti inreg.ax = &H1A inreg.bx = 20 'Yatay inreg.cx = 40 'Dikey inreg.dx = 30 'Eşik Kesinti SLEEP SUB Kesinti CALL INTERRUPT(&H33, inreg, outreg) END SUB
Önceki Bölüm: 20: Fare (mouse) kullanımı-1 | Sonraki Bölüm: 22: Fare (mouse) kullanımı-3 |
Hiç yorum yok:
Yorum Gönder