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

Örnek kod:
' Metin ekranda fare imleç görüntüsünü değiştir
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
'$INCLUDE: 'qb.bi'
DEFINT A-Z
DIM SHARED regs AS RegType
SCREEN 0: CLS
SatirDoldur 'satırlara rastgele renkte rastgele yazılar yaz
regs.ax = &H1 'fare göster
Kesinti

regs.ax = &HA 'Metin ekranda fare imleci değiştir
regs.bx = 0 'Yazılım imleci

'ÖRNEK 1
regs.cx = &HFF  'AND maskesi FF=Zemin karakterini al
regs.dx = &H4F00 'XOR maskesi
'4=Kahverengi zemin, F=Beyaz renk, 00=Zeminden gelen karakter
Durakla

'ÖRNEK 2
regs.cx = 0  'zemin rengini ve karakteri sıfırla
regs.dx = &HAE12
'A=10:Yeşil zemin, yanıp sönen yazı
'E=14:Sarı renk, &H12=18=karakter kodu
Durakla

'ÖRNEK 3
regs.dx = &H1F7F
'1=Mavi zemin
'F=15:Beyaz renk, &H7F=127=karakter kodu
Durakla

'ÖRNEK 4
regs.cx = &HFF00 'Zemin karakter rengini al
regs.dx = &H2A 'Zemin karakter rengiyle * karakteri
'&H2A=42=karakter kodu=*
Durakla

'ÖRNEK 5
regs.cx = &HFFFF 'Zemin karakteri ve rengini al
regs.dx = &H8000 'Açık renk yapmak için alınan zemin rengine 8 ekle.
'Aynı karakter ve renk ile yanıp sönen
Durakla

'ÖRNEK 6
regs.cx = &HFFFF 'Zemin karakteri ve rengini al
regs.dx = &H8800 'Alınan zemin ve yazı rengine 8 ekle
'Açıksa koyu, koyu ise açık renk ile yanıp sönen aynı karakter
Durakla

SLEEP
regs.ax = 0 'fareyi sıfırla
Kesinti

SUB Durakla
	STATIC n AS INTEGER
	COLOR 14: LOCATE 1, 1
	PRINT "İmleci değiştirmek için bir tuşa basınız."
	SLEEP
	n = n + 1
	PRINT "Örnek"; n;
	COLOR 10: PRINT ": CX=&H"; HEX$(regs.cx); ", DX=&H"; HEX$(regs.dx)
	Kesinti
END SUB

SUB Kesinti
	CALL INTERRUPT(&H33, regs, regs)
END SUB

SUB SatirDoldur
	LOCATE 3
	FOR n% = 1 TO 1680
		COLOR RND * 7 + 1
		PRINT CHR$(RND * 223 + 32);
	NEXT
END SUB

b) Donanım imleci

AX = &HA
BX = 1 ise;
CX = imleç şekli dolgu başlama satırı
DX = imleç şekli dolgu bitiş satırı

LOCATE komutunun 4. ve 5. parametresi klavye imlecini değiştir. CX ve DX yazmaçlarına aktarılan değerler ile LOCATE komutunda olduğu gibi fare imleci değişikliği yapılır.

LOCATE komutu için Bölüm 8: Karakter ve metinler ile ilgili işlemler sayfasına bakınız.

Not: Kendi bilgisayarımda yaptığım denemelerde bu fonksiyon fare imlecine;
DOSBOX altında ve VirtualBox'da kurulu Windows XP altında çalışan QuickBasic v4.5'te bir etki yapmamıştır.

VirtualBox'da kurulu DOS 6.22 altında çalışan QuickBasic v4.5'te ise fare imleci değişmiştir.
80x25 metin ekran için imleç satır sayısı 8'dir.
CX ve DX yazmaçlarına aktarılacak değer aralığı: 0-7
Diğer ekran modları için değer aralığı değişecektir.
Örnek:
' Metin ekranda fare imleç görüntüsünü değiştir
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
'$INCLUDE: 'qb.bi'
DIM SHARED regs AS RegType
SCREEN 0: CLS
regs.ax = &H1 'fare göster
Kesinti

regs.ax = &HA 'Metin ekranda fare imleci değiştir
regs.bx = 1 'Donanım imleci
regs.cx = 4 'dolgu başlama satırı
regs.dx = 7 'bitiş satırı
Kesinti
SLEEP
regs.ax = 0 'fareyi sıfırla
Kesinti

SUB Kesinti
	CALL INTERRUPT(&H33, regs, regs)
END SUB


Önceki Bölüm: 22: Fare (mouse) kullanımı-3 Sonraki Bölüm: 24: Ses, Müzik

Hiç yorum yok:

Yorum Gönder