Ekran Koruyucu yazma

Visual Basic & Action script Ekran Koruyucu yazma Programlama hakkında bilgi paylaş; Ekran Koruyucu yazma Aslında ekran koruyucu (screen saver) programların normal programlardan pek farkı yoktur. Ekran koruyucuları normal bir ...
Cevapla
 
Seçenekler
  #1  
Arama 24-12-2007, 12:14
Celebrian - ait Kullanıcı Resmi (Avatar)

Üyelik Tarihi: 19/11/07
Mesajlar: 3.307
 
     WS-Ticareti: (0)
Teşekkürleri: 0
31 Msg. 38 Tşkr.
Rep Gücü: 36 Celebrian rep gücü yükselmeye başladı

Ekran Koruyucu yazma

Ekran Koruyucu yazma Aslında ekran koruyucu (screen saver) programların normal programlardan pek farkı yoktur. Ekran koruyucuları normal bir program gibi yazılır ancak derlenirken uzantı yerine EXE değil de SCR verilir. Windows ekran koruyucuyu çalıştırırken bazı özel komut satırı parametreleri kullanır. Bu parametreleri programınızdan işlerseniz ekran koruyucu programı uygun şekilde çalıştırmış olursunuz.
Bir ekran koruyucu programda bulunması gereken işlemleri şu adımlarla özetleyebiliriz.
1. Ekran koruyucunun işlevini yerine getirecek kod. Örneğin ekrana rasgele çizimler yapacak kod. Bunu genellikle bir Timer kontrolünün Timer olayına yazabilirsiniz.
2. Ekran koruyucunun iki defa çalışmasını önleyecek kod.
3. Alt+Tab ve Ctrl+Alt+Del tuşlarını önleyecek kod.
4. Fare veya Klavyeden bir tuşa basıldığıdan ekran koruyucuyu sonlandırma.
5. /s, /p , /c parametrelerini işleyerek Windowstan gelen mesajlara göre ekran koruyucuyu çalıştıracak kod.
6. Formun tam ekran haline getirilmesi ve başlığının kaldırılması.
7. Ekran koruyucu uygulamasının SCR uzantısıyla derlenmesi ve Windows'a tanıtılması.
Şimdi bu adımları sırasıyla anlatarak bir örnekte uygulayalım.
1- Ekran koruyucunun işlevini yerine getirecek kod
--------------------------------------------------------------------------------

Bu kısım ekran koruyucunuzun ekranda yapacağı işlemleri içerir. Ekranda animasyonlar, müzik veya çizimler yaptırabilirsiniz.
Örnek olarak ekranda rasgele daireler çizecek bir ekran koruyucu yapalım. bunun için formumuza bir Timer yerleştirin ve Interval özelliğini 100 yaparak aşağıdaki kodu yazın.

Private Sub Timer1_Timer()
FillColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
FillStyle = 0
Circle (Rnd * Width, Rnd * Height), Rnd * Width, RGB(Rnd * 255, Rnd * 255, Rnd * 255)
End Sub

Bu kodumuz, form üzerine aşağıdaki gibi rastgele daireler çizecektir.

2- Ekran koruyucunun iki defa çalışmasını önleyecek kod.
--------------------------------------------------------------------------------

Ekran koruyucunun iki defa çalışmasını önlemek için VB'deki App nesnesinin PrevInstance özelliğini kullanabiliriz. Eğer uygulama zaten çalışıyorsa bu özellik true değerini alacaktır. Bu özelliği kontrol ederek, zaten çalışıyorsa tekrar çalışmamasını sağlayabiliriz.

Private Sub Form_Load()
Timer1.Interval = 100
If App.PrevInstance Then
Unload Me
End If
End Sub

3- Alt+Tab ve Ctrl+Alt+Del tuşlarını önleyecek kod.
--------------------------------------------------------------------------------

Ekran koruyucu çalışırken Alt+Tab ve Ctrl+Alt+Del gibi Windows'a ait özel tuşların görevlerini yerine getirmemesi gerekir. Bunu yapabilmek için SystemParametersInfo api'sini kullanabiliriz. Ekran koruyucu çalıştığında bu Api'yi kullanarak ekran koruyucunun çalışmaya başladığını Windows'a bilidirmemiz, ekran koruyucu çalışmasını bitirdiğinde de yine aynı Api ile uygulamanın sona erdiğini bildirmemiz gerekir.
Bu işlem için formun Load ve UnLoad olaylarında durumu Windows'a aşağıdaki gibi bildirebiliriz.

Option Explicit
Private Const SPI_SCREENSAVERRUNNING = 97
'Api tanımı
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any,ByVal fuWinIni As Long) As Long
Private Sub Form_Load()
Timer1.Interval = 100
If App.PrevInstance Then
Unload Me
End If
'Ekran koruyucunun çalışmaya başladığını bildir
SystemParametersInfo SPI_SCREENSAVERRUNNING, 1, ByVal 1&, False
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Ekran koruyucunun bittiğini bildir
SystemParametersInfo SPI_SCREENSAVERRUNNING, 0, ByVal 1&, False
End Sub

4-Fare veya Klavye hareketlerini işleme
--------------------------------------------------------------------------------

Ekran koruyucu çalışırken bir tuşa basıldığında, fare hareket ettirildiğinde veya fare tıklandığında ekran koruyucunun sona ermesi gerekir. Formun KeyDown, Click, DblClick ve MouseMove olaylarına aşağıdaki gibi çıkış için gerekli kodu yazmak gerekir.

Private Sub Form_Click()
Unload Me
End Sub
Private Sub Form_DblClick()
Unload Me
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Unload Me
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Unload Me
End Sub

Bu kodun normal çalışması beklenir ancak MouseMove olayında problem çıkacaktır. Çünkü form çalıştığı anda formun MouseMove olayı meydana gelir ve program sona erer. Ayrıca farenin en ufak hareketinde sona ermemesi için belli bir aralık konabilir. Mouse belli bir miktar hareket ettikten sonra programın sona ermesi istenir. Bu işlem için MouseMove olayı aşağıdaki gibi değiştirilmelidir.

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Static ox, oy
'İlk defa çalışıyorsa veya önceki koordiatlardan 5 birimden daha az hareket etmişse etkilenme
If ((ox = 0) And (oy = 0)) Or ((Abs(ox - x) &lt 5) And (Abs(oy - y) &lt 5)) Then
'koordinatları sakla
ox = x'
oy = y
Exit Sub
Else
Unload Me
End If
End Sub

5- /s, /p , /c parametrelerini işleyecek kod
--------------------------------------------------------------------------------

Windows bir ekran koruyucuya çalıştırırken bazı parametreler gönderebilir. Bunlar komut satırı parametreleridir ve ekran koruyucuya yapması gereken işi bildirir. Komut satırı parametrelerini VB'de Command fonksiyonuyla öğrenerek gelen parametreleri yorumlayabiliriz.
Windows'un göndereceği parametreler şunlardır:
/s : Ekran koruyucuyu normal çalıştır.
/c : Kullanıcı ekran koruyucu ayarlarını yapmak istemiştir. Varsa ayar formunuzu gösterin.
/p handle: Preview-Önizleme modunu çalıştır. Denetim Masasındaki Görüntü simgesini çift tıkladığınızda açılan pencerenin Ekran Koruyucu kısmına geçip bir ekran koruyucu seçerseniz penceredeki küçük ekranda ekran koruyucunun çalıştığını görürsünüz. İşte bu parametre ile o pencerenin handle numarası gelir. Bu handle numarasını kullanarak çiziminizi o pencere içine yaptırabilirsiniz.

/s parametresi
Command fonksiyonu ile komut satırında /s parametresi kullanılıp kullanılmadığını kontrol edebilirsiniz. Eğer /s parametresi kullanılmışsa ekran koruyucunun normal olarak çalışması gerekir.
Örneğimizde Timer1 kontrolüne yazdığımız kod ekran koruyucunun işlevini yerine getiriyordu. Fomun Load olayında /s parametresini kontrol ederek Timer'i aktif hale getirebiliriz.

Private Sub Form_Load()
Timer1.Interval = 100
Timer1.Enabled = False
If App.PrevInstance Then
Unload Me
End If
'Ekran koruyucunun çalışmaya başladığını bildir
SystemParametersInfo SPI_SCREENSAVERRUNNING, 1, ByVal 1&, False
If Command = "/s" Then Timer1.Enabled = True
End Sub

/c parametresi
Command fonksiyonu ile komut satırında /c parametresi kullanılıp kullanılmadığını kontrol edebilirsiniz. Eğer /c parametresi kullanılmışsa ekran koruyucunun ayarlarının yapılabileceği yeni bir formu gösterebilirsiniz.
Örneğimizde ayar olarak kullanıcının Text kutusuna bir şeyler yazabilmesini ve yazdığı metnin çizimle birlikte yazılmasını sağlayalım. Ayrıca kullanıcı fontu da belirleyebilsin.
Bunun için programınıza Project-Add Form menüleri ile yeni bir form ekleyip aşağıdaki gibi hazırlayın.

Formdaki Combo1 içinde font isimlerini gösterebilmek ve Tamam düğmesi ile formu kapatıp ayarları Registry içine saklamak için de aşağıdaki kodları Form2'nin kod penceresine yazalım.

'Bu kod Form2'ye yazılacak
Private Sub Command1_Click()
SaveSetting "BizimEkranKoruyucu", "Ayarlar", "Metin", Text1
SaveSetting "BizimEkranKoruyucu", "Ayarlar", "Font", Combo1.Text
Unload Me
End Sub
Private Sub Form_Load()
Dim i
For i = 0 To Screen.FontCount - 1
Combo1.AddItem Screen.Fonts(i)
Next
End Sub

Şimdi Form1 içinde gerekli düzenlemeleri yaparak /c paramatresi kullanılmışsa ayar kutusunun gösterilmesini sağlayalım.

Private Sub Form_Load()
Timer1.Interval = 100
Timer1.Enabled = False
If App.PrevInstance Then
Unload Me
End If
'Ekran koruyucunun çalışmaya başladığını bildir
SystemParametersInfo SPI_SCREENSAVERRUNNING, 1, ByVal 1&, False
Caption = Command
If Command = "/s" Then Timer1.Enabled = True
If Left(Command, 2) = "/c" Then Form2.Show: Unload Me
End Sub

Ayrıca yaptığımız ayarlara göre kullanıcının Text kutusuna yazdığı yazıyı çizimle birklikte ekrana yazabilmek için Registry'den ilgili ayarları okumamız gerekir. Bunun için Form1'deki kodu aşağıdaki gibi değiştirelim.

Dim metin, fontadi
Private Sub Form_Load()
Timer1.Interval = 100
Timer1.Enabled = False
If App.PrevInstance Then
Unload Me
End If
'Ekran koruyucunun çalışmaya başladığını bildir
SystemParametersInfo SPI_SCREENSAVERRUNNING, 1, ByVal 1&, False
Caption = Command
If Command = "/s" Then Timer1.Enabled = True
If Left(Command, 2) = "/c" Then Form2.Show: Unload Me
metin = GetSetting("BizimEkranKoruyucu", "Ayarlar", "Metin", "İhsan Karagülle")
fontadi = GetSetting("BizimEkranKoruyucu", "Ayarlar", "Font", "Times New Roman")
End Sub
Private Sub Timer1_Timer()
FillColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
FillStyle = 0
Circle (Rnd * Width, Rnd * Height), Rnd * Width, RGB(Rnd * 255, Rnd * 255, Rnd * 255)
FontName = fontadi
FontSize = Rnd * 50 + 8
Print metin
End Sub
Alıntı ile Cevapla
Cevapla
Arama Etiketleri: , ,



Seçenekler


Benzer Konular
Konu Konu Açanlar Forum Cevaplar Güncel Mesajlar
Hoş bir ekran koruyucu örneği Celebrian Visual Basic & Action script 0 24-12-2007 11:30
Nero ile 890 MB'lık Cd Yazma Celebrian Program kullanımı & tanıtım 0 24-12-2007 01:09
Hatiralarimi Yazma Celebrian Şiirler 0 22-11-2007 06:21
200 Avro'ya 22'' Geniş ekran LCD ekran LeaveMeALoNe Donanım Haberleri 0 20-11-2007 07:33
IIS Kurulumu ve Yazma İzni kadınca Web Dersleri 0 04-11-2007 03:21

Webmaster Sitesine Reklam Verin

Webmaster web tasarım online reviews ~ Kadınlar blogu ~ Apple iPhone, iPod Touch ( iTouch ) Forum ~ iPhone