DEĞİŞİK BİR MOUSE POINTER
Retro bilgisayarGelelim bir ikinci konuya. Mouse Pointer yani Mouse'un ekrandaki görüntüsü. Az önceki programla preferences'i çalıştırdık. Mouse Pointer'ın ve daha birçok özelliğin preferences programı ile değiştirilip kaydedilebildiğini biliyoruz. Şimdi isterseniz, preferences programının tekelinde olan bu konuya bir el atalım.
Her şeyden önce. Mouse Pointer Sprite adı verilen bir görüntü birimidir. 16 nokta genişlikte zorunlu olmasa da genelde 16 nokta yüksekliktedir ve dört renkten oluşur (Normal şartlarda). Mouse'un bir diğer özelliği ise. Hot Spot adı verilen bir hassas noktaya sahip olmasıdır. Mouse'un sol tuşuna basıldığında bu noktanın bulunduğu yere göre değerlendirme yapılır. Gelelim şekle: İkilik düzen hesaplarınızı hatırlayın bakalım. Her basamak ya 0 ya da bir olabiliyordu, iki basamak kullanarak 00, 01, 10, 11 gibi dört değişik sayı elde edebiliyorduk. Bu sayılar, istediğimiz görüntünün renklerini oluşturmamıza yetecek. Önemli konu bu iki basamağı yan yana yazmıyoruz. Önce 16 adet yani tam bir satır ikinci basamak yazılıyor sonra 16 adet birinci basamak. Genişliğin 16'yı geçemeyeceğini unutmayınız. Hemen bir örnek verelim, şu renk serisini saklamamızı inceleyelim.
0000 1111 2222 3333 Bu sayılara karşı düşen basamakları alt alta yazalım 0000 0000 1111 1111 00001111 0000 1111 Yukarıda olan satır ilk basamak, altında olan ise ikinci basamak. Görüntü işini de böylece hallettik. Kağıt üzerinde hesaplar sizi sıkıyorsa, basit bir program yazarak gerekli satırları oluşturmasını sağlayabilirsiniz.
Değişik renklerden bahsettik, ancak renk değerlerini anlatmadık. Alt renk zaten belirli, ekranın alt rengi (0 numaralı renk). Geri kalan renkler ise paletin 17, 18, 19 numaralı renkleri.
Aşağı yukarı her şey bitti. Pointer'ı değiştirmek için ne yapacağız. Ne kadar hoşunuza gitmese de, yine Library fonksiyonları kullanacağız. İlk olarak penceremize bağlı bir pointer yaratacağız. Yani pointer sadece kendi bizim penceremizde istediğimiz şekilde gözükecek. Prowrite'tan tanıdık gelmesi gereken bir özellik. Başka sefere tüm ekranda çalışan bir pointer yaparız olur biter.
Şimdi ihtiyacımız olan hafızada Pointer'ın görüntüsü için yer ayrılması, sonra görüntüyü oluşturacak dataların buraya kopyalanması, daha sonra ekrana getirilip en sonunda pointer'ın eski hale gelmesi.
Kullanacağımız fonksiyon SetPointer& adını taşıyor ve Intuition Library'sinin bir parçası. Bunun yanında hafıza ayırmak için AllocRemember& kullanılıyor. Şimdi programı görelim bakalım
DECLARE FUNCTION AllocRemember& LIBRARY
LIBRARY ":bmaps intuition.library"
RAMTipi&=2+65536&
Remember&=0
RemKey&=VARPTR(Remember&)
Memory&=AllocRemember& (RemKey&,66&,RAMTipi&)
IF Memory&=0 THEN FreeRemember& RemKey&.-i : END
FOR a&=0 TO 68 STEP 2
READ Dat
POKEW Memory&+a&,Dat
NEXT a&
DATA 0,0
DATA &H0001 .&H0001 ,&H0002.&H0002.&H3C3C.&H0004
DATA &H7E7C,&H0008,&H7FFE,&H0010,&H7FFE,&H0020
DATA &H7FFE,&H0040,&H3FFC,&H0000,&H1 FF8.&H0000
DATA&H0FF0.&H0000.&H07E0.&H0000.&H0BC0.&H0800
DATA&H5180.&H5000.&H6000.&H6000.&H5800.&H5800
DATA &H6000.&HE000.0.0
PALETTE 17,1,0,0
PALETTE 18,0,0,1
PALETTE 19,.7,.5,.6
SetPointer& WINDOW(7).Memory&. 16,16.0,-15
WHILE INKEY$="" : WEND
Ende:
ClearPointer& WINDOW(7)
FreeRemember& RemKey&,-1
LIBRARY CLOSE
END
Son olarak biraz SetPointer fonksiyonunun parametrelerini açıklayalım. İlk olarak pencerenin adresinin (kabaca) bulunduğu adres var. WINDOW(7) bunu veriyor. Daha sonra dataların adresi var. Dataların sonunda ve başında sıfırların olduğu dikkatinizi çekmiş olmalı. Bunlar normal Sprite'larda kontrol için kullanılıyor; ancak Mouse Pointer normal bir sprite gibi kullanılmıyor, bu yüzden buraları sıfır. Sonra sırasıyla yükseklik ve genişlik yer alıyor. Sonraki iki sayı ise Hot Spot denen noktanın yeri. Bu sayıları eksi vermeniz gerekiyor. ClearPointer& ise, bu pointer'ı ortadan kaldırıyor. Benden bu aylık bu kadar, görüşmek üzere.




