Yayınlama: 15 Ağustos 2020
Güncelleme: 22 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.
İ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
00: Siyah
01: Beyaz
10: Şeffaf (Transparan)
11: Zemin zıt rengi
Etkin nokta: Fare imleç görüntüsündeki konum bilgisi için
kullanılacak nokta.
X için soldan, Y için üstten kaçıncı bir olacağı belirtilir.
X=0,Y=0 imlecin sol üst köşesidir.
X için soldan, Y için üstten kaçıncı bir olacağı belirtilir.
X=0,Y=0 imlecin sol üst köşesidir.
Örnek 1: Standart fare imleci görüntüsünü biraz değiştirerek aşağıdaki görüntüyü oluşturdum.
Büyütülmüş görüntüdür
' Fare imleç görüntüsünü değiştirme ' ©2020 Mesut Akcan ' mesutakcan.blogspot.com '$INCLUDE: 'qb.bi' DEFINT A-Z: DEFSTR S: DEFLNG L 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 FOR n = 240 TO 60 STEP -30 r = r + 1 CIRCLE STEP(0, 0), n, r PAINT STEP(0, 0), r NEXT PAINT (10, 10), 15, 1 inreg.ax = &H1 'fareyi göster Kesinti FOR m = 1 TO 32 READ StrSatir 'data satırları LngSayi = 0 ' 2 lik sayıyı 10 luk sayıya dönüştür FOR n = 16 TO 1 STEP -1 ' satırdaki karakter "." değilse ( .=0 ) IF MID$(StrSatir, n, 1) <> "." THEN 'Konumundaki sayı değerini hesapla ve topla LngSayi = LngSayi + 2 ^ (16 - n) END IF NEXT IF LngSayi > &H7FFF THEN LngSayi = LngSayi - &H10000 StrImlec = StrImlec + MKI$(LngSayi) NEXT inreg.ax = &H9 inreg.bx = 0 ' Etkin nokta X değeri (Hot Spot) inreg.cx = 0 ' Etkin nokta Y değeri inreg.dx = SADD(StrImlec) ' String değişkeninin bellek adresi Kesinti DO: LOOP UNTIL INKEY$ = CHR$(27) ' Desenin belirgin görünmesi için ' 1 yerine X ' 0 yerine . ' kullanılmıştır ' 16x16 AND maskesi DATA ..XXXXXXXXXXXXXX DATA ...XXXXXXXXXXXXX DATA ....XXXXXXXXXXXX DATA .....XXXXXXXXXXX DATA ......XXXXXXXXXX DATA .......XXXXXXXXX DATA ........XXXXXXXX DATA .........XXXXXXX DATA ..........XXXXXX DATA ...........XXXXX DATA ............XXXX DATA .............XXX DATA XXXX......XXXXXX DATA XXXX......XXXXXX DATA XXXXX......XXXXX DATA XXXXX......XXXXX ' 16x16 XOR maskesi DATA XX.............. DATA X.X............. DATA X..X............ DATA X...X........... DATA X....X.......... DATA X.....X......... DATA X......X........ DATA X.......X....... DATA X........X...... DATA X.........X..... DATA X..........X.... DATA XXXX....XXXXX... DATA ....X....X...... DATA ....X....X...... DATA .....X....X..... DATA .....XXXXXX..... SUB Kesinti CALL INTERRUPT(&H33, inreg, outreg) END SUBAynı imleç görüntüsünün ters renklisi istenirse (beyaz yerine siyah, siyah yerine beyaz) yukarıdaki kodlarda XOR maskesini aşağıdaki ile değiştirin.
Büyütülmüş görüntüdür
' 16x16 XOR maskesi DATA ................ DATA .X.............. DATA .XX............. DATA .XXX............ DATA .XXXX........... DATA .XXXXX.......... DATA .XXXXXX......... DATA .XXXXXXX........ DATA .XXXXXXXX....... DATA .XXXXXXXXX...... DATA .XXXXXXXXXX..... DATA ....XXXX........ DATA .....XXXX....... DATA .....XXXX....... DATA ......XXXX...... DATA ................Örnek 1'de fare görüntüsü için 2'lik sayı ile oluşturulan desendeki sayılar dönüştürülerek değişkene aktarıldı.
Aşağıdaki örnekte ise desen çizmeden 16'lık sayılar ile değişkene değerler aktarılır.
Örnek 2:
' Fare imleç görüntüsünü değiştirme ' ©2020 Mesut Akcan ' mesutakcan.blogspot.com '$INCLUDE: 'qb.bi' DEFINT A-Z: DEFSTR S: DEFLNG L DIM SHARED inreg AS RegType, outreg AS RegType SCREEN 12 WIDTH 80, 60 COLOR 15: PRINT "AND maskesi" COLOR 10 FOR m = 1 TO 32 READ lngSayi 'data verileri StrImlec = StrImlec + MKI$(lngSayi) strBinary = "" IF lngSayi < 0 THEN lngSayi = lngSayi + &H10000 lngHxSayi = lngSayi WHILE lngSayi <> 0 'onluk sayıyı ikilik sayıya dönüştür IF lngSayi MOD 2 = 0 THEN strB = "." ELSE strB = "X" strBinary = strB + strBinary 'ikilik sayı lngSayi = lngSayi \ 2 WEND IF m = 17 THEN COLOR 15: PRINT : PRINT "XOR maskesi": COLOR 12 PRINT RIGHT$(STRING$(16, ".") + strBinary, 16); " "; PRINT RIGHT$(STRING$(4, "0") + HEX$(lngHxSayi), 4) NEXT inreg.ax = &H9 inreg.bx = 4 ' Etkin nokta X değeri (Hot Spot) inreg.cx = 0 ' Etkin nokta Y değeri inreg.dx = SADD(StrImlec) ' String değişkeninin bellek adresi Kesinti inreg.ax = &H1 'fareyi göster Kesinti DO: LOOP UNTIL INKEY$ = CHR$(27) 'İnsan eli şeklinde imleç simgesi 'AND maskesi DATA &HF3FF,&HE1FF,&HE1FF,&HE1FF,&HE049,&HE000,&H8000,&H0000 DATA &H0000,&H0000,&H0000,&H8000,&HC001,&HE001,&HE001,&HE001 'XOR maskesi DATA &H0000,&H0C00,&H0C00,&H0C00,&H0C00,&H0DB6,&H0DB6,&H6DB6 DATA &H6FFE,&H6FFE,&H7FFE,&H3FFE,&H1FFC,&H0FFC,&H0FFC,&H0000 SUB Kesinti CALL INTERRUPT(&H33, inreg, outreg) END SUB
Fare imleci için birkaç örnek: Data kodlarını Örnek 2 deki ile değiştirin.
'Aşağıdaki fare imleç görüntü kodlarının kaynağı: 'Brian Roche. FidoNet QUIK_BAS Echo 'KumSaati DATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF DATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF DATA &HFFFF,&H2004,&H2004,&H2004,&H1008,&H990,&H420,&H240 DATA &H240,&H420,&H810,&H1008,&H2084,&H2144,&H22A4,&HFFFF 'Kronometre DATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF DATA &HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF,&HFFFF DATA &H3000,&H63E0,&HDC18,&H1004,&H2002,&H2602,&H4301,&H4181 DATA &H40C1,&H4081,&H4081,&H2082,&H2082,&H1004,&HC18,&H3E0 'El-1 DATA &HF3FF,&HEDFF,&HEDFF,&HEC7F,&HED8F,&HEDB1,&HEDB6,&H8DB6 DATA &H6DB6,&H6FFE,&H6FFE,&H7FFE,&H7FFE,&H7FFE,&HBFFD,&HC003 DATA &HC00,&H1200,&H1200,&H1380,&H1270,&H124E,&H1249,&H7249 DATA &H9249,&H9001,&H9001,&H8001,&H8001,&H8001,&H4002,&H3FFC 'El-2 DATA &HF3FF,&HE1FF,&HE1FF,&HE07F,&HE00F,&HE001,&HE000,&H8000 DATA &H0,&H0,&H0,&H0,&H0,&H0,&H8001,&HC003 DATA &H0,&HC00,&HC00,&HC00,&HD80,&HDB0,&HDB6,&HDB6 DATA &H6DB6,&H6FFE,&H6FFE,&H7FFE,&H7FFE,&H7FFE,&H3FFC,&H0
Fare imleci oluşturma programı: fgce100.zip
Pacal, c, Fortran, Basic dilleri için imleç data kodunu kaydeder. Bedava.
Önceki Bölüm: 21: Fare (mouse) kullanımı-2 | Sonraki Bölüm: 23: Fare (mouse) kullanımı-4 |
Hiç yorum yok:
Yorum Gönder