interrupt etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
interrupt etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

17 Ağustos 2020 Pazartesi

QuickBasic - 23: Fare (mouse) kullanımı-4

Yayınlama: 17 Ağustos 2020

2) Metin ekranda fare imleç görüntüsünü değiştirme

Metin ekranda (SCREEN 0) fare imlecini değiştirmek için yazmaçlara aktarılacak değerler:
AX = &HA
BX = imleç tipi:
0: Yazılım imleci,
1: Donanım imleci

a)Yazılım imleci

AX = &HA
BX = 0
CX = AND maskesi. Varsayılan değer = &HFFFF
DX = XOR maskesi. Varsayılan değer = &H7700
CX ve DX yazmaçlarına aktarılan INTEGER değerin(2 bayt);
alt baytı(low byte): Karakter kodu,
üst baytı(high byte): Zemin rengi ve karakter rengini ayarlar.

Üst baytdaki;
1. karakter: Zemin rengini,
2. karakter: karakter rengi içindir.

Zemin rengi için 7'den büyük sayılar imlecin yanıp sönmesini sağlar(blinking)
alt bayt: 16'lık sayıda sağdaki 2 karakter. örneğin &H2FA3 için alt byte A3 dür.
alt baytı elde etmek için formül: SAYI AND &HFF
üst baytı elde etmek için formül: SAYI AND &HFF00
üst bayt: 16'lık sayıda soldaki 2 karakter. örneğin &H2FA3 için üst byte 2F dir.

Örnek 1:
DX = &H2F58

Kodların açılımı:
2: Yeşil zemin. 2=Yeşil renk
F: Beyaz yazı rengi. &HF=15=Beyaz renk
58: &H58 = 88 = X karakteri

Örnek 2:
DX = &H9E18
9: Mavi zemin.1+8=9. 1=Mavi renk. 7'den büyük renk kodları yanıp sönen imleç içindir.
E: Sarı yazı rengi. &HE=14=Sarı renk
18: &H18 = 24 = Yukarı ok karakteri

15 Ağustos 2020 Cumartesi

QuickBasic - 20: Fare (mouse) kullanımı-1

Yayınlama: 29 Temmuz 2020
Güncelleme: 15 Ağustos 2020

Kötü haber: Qbasic ve QuickBasicte doğrudan fare(mouse) kullanmak için bir komut bulunmuyor.

Belkide Qbasic'in piyasaya sürüldüğü tarihlerde fare kullanımı yaygın değildi ya da fare standartları tam oturmamıştı.

İyi haber: QuickBasicte DOS kesintilerini(interrupt) çalıştırmak için ve assembly kodlarını belleğe aktarıp çalıştırmak için kodlar bulunuyor. Böylece dolaylı olarak da olsa fare kullanılabiliyor.

DOS kesintisi ile fare çalıştırma

DOS işletim sistemi yapısı gereği Windows gibi çoklu görev(multitasking) özelliği yoktur. DOS, kesinti denilen bir özelliği kullanarak sahte çoklu görev işlevini yerine getirir.

DOS/BIOS kesinti listelerine bakıldığında çok sayıda kesinti olduğu görülecektir.

Kesinti listesi: Link1, Link2, Link3, Link4, Link5, Link6

Bu yazının konusu olan ve bize gerekli olan kesinti &H33 (51)
&H33
kesintisi bilgisayar fare donanımı ile ilgi fonksiyonları içerir.
Kullanılacak fare fonksiyonunun numarası AX yazmacına(register) aktarılır.

QuickBasic - 22: Fare (mouse) kullanımı-3

Yayınlama: 15 Ağustos 2020
Güncelleme: 22 Ağustos 2020

Fare imleç görüntüsünü değiştirme

Varsayılan fare(mouse) imleç(cursor) görüntüsü grafik ekranda standart ok şeklinde(yandaki resim), metin(text) ekranda ise içi dolu dikdörtgen kutu karakteri(karakter kodu=219) şeklindedir.
İstenirse grafik ve/veya metin ekranda imleç görüntüsü değiştirilebilir.
İşlemler ve yazmaçlara aktarılacak değerler farklı olduğu için iki ayrı başlık altında açıklama yapılacaktır.

1) Grafik ekranda fare imleç görüntüsünü değiştirme

Yazmaçlara aktarılacak değerler:
AX = &H9
BX = Etkin nokta X değeri (Hot Spot)
CX = Etkin nokta Y değeri
DX = Görüntü bilgilerini içeren bellek adresi (64 bayt)

İmleç görüntüsü bilgileri 64 bayt uzunluğundadır. 32 baytlık 2 set halinde hazırlanır. Her set 16x16 bitlik bir desende oluşturulur. Örneğin 16 satır ve her satırda 2 baytlık(16 bit) veri.

İlk desen 32 baytlık veri AND maskesi içindir.
İkinci desen 32 baytlık veri XOR maskesi içindir.

Bu iki desen, iki grafik düzlemi oluşturur. İki grafik düzleminde oluşan grafik görüntü ekrana önce AND ile sonra onun üzerine XOR ile basılır. Böylece nihai fare imleci görüntüsü oluşur.

İlk ve ikinci desendeki 0 ve 1 bit değerlerin çakıştırılmasıyla ekranda 4 farklı durum oluşur.
00: Siyah
01: Beyaz
10: Şeffaf (Transparan)
11: Zemin zıt rengi

5 Ağustos 2020 Çarşamba

QuickBasic - 21: Fare (mouse) kullanımı-2

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: