22 Mart 2020 Pazar

Small Basic - Olaylar - Events

Bu derste GraphicsWindow içerisinde Mouse ve Klavye olaylarını kullanacağız.

Başlayalım:


Öncelikle penceremizi oluşturalım:
GraphicsWindow.Width = 400
GraphicsWindow.Height = 400
GraphicsWindow.Title = "Small Basic - Olaylar - Events"
 Üstteki kodların ne işe yaradığını daha önceki derslerimizde öğrenmiştik.
Şimdi de bir şekil ekleyelim:
sekil = Shapes.AddRectangle(100, 50)
Shapes.Move(sekil, 100, 125)
Shapes.AddRectangle(100, 50) komutu penceremize genişliği 100, yüksekliği 50 olan bir dikdörtgen ekleyecek.
Shapes.Move(sekil, 100, 125) komutu ise eklenen şekli (x,y) ekseninde taşıyacak. (100, 125) değerleri yerine istediğiniz değerleri girerek deneme yapabilirsiniz.

Sıra geldi klavye olaylarına. Yazmaya devam:


Önceki kodların devamına ekliyoruz:
return = "Return"
GraphicsWindow.KeyDown = keydown
GraphicsWindow.KeyUp = keyup

Sub keydown
  If GraphicsWindow.LastKey = return Then
    Shapes.Rotate(sekil, 90)
  EndIf
EndSub
Sub keyup
  If GraphicsWindow.LastKey = return Then
    Shapes.Rotate(sekil, 0)
  EndIf
EndSub

Burayı satır satır açıklayalım:
8: Basılacak tuşu tanımlıyoruz. "Return" - "Enter" tuşu demek. İsterseniz herhangi bir harf ya da sayı seçebilir ya da diğer tuşlardan birini kullanabilirsiniz. Örneğin ESC için "Escape" yazmanız yeterli. Sonraki işlemler belirlediğiniz tuş için geçerli olacak.
9-10: Daha önceki dersimizde butona basıldığında çalışacak olan Alt Yordamı kullanmak için "Controls.ButtonClicked = yazdir" komutunu kullanmıştık. Bu kez aynı şeyi buton yerine klavyeden bir tuşa basıldığında uyguluyoruz.
GraphicsWindow.KeyDown = keydown belirlediğimiz tuşa basıldığında
GraphicsWindow.KeyUp = keyup belirlediğimiz tuş bırakıldığında çalışacak alt yordamı temsil ediyor.
Üst satırda belirlediğimiz tuşa basıldığında ve bırakıldığında hangi alt yordam çalışacak onu belirliyoruz.
12-21: Bu satırlar arasında 2 tane alt yordam tanımlıyoruz. Birisi tuşa basıldığında, diğeri ise tuş bırakıldığında çalışacak.
Shapes.Rotate(sekil, 90) komutu tuşa bastığımızda şekli 90 derece döndürecek.
Shapes.Rotate(sekil, 0) komutu ise tuş bırakıldığında şekli 0 dereceye geri döndürecek.
If GraphicsWindow.LastKey = return komutu, önceki derste kullandığımız If Controls.LastClickedButton = buton komutu ile aynı işi görüyor. Klavyeden basılan son tuşu alıyor. Bu durumda eğer bu tuş bizim belirlediğimiz ise işlem yapıyor.

Son durum:

 

Bir de fare olaylarına bakalım. Devam ediyoruz:

 
Önceki kodların devamına ekliyoruz:
GraphicsWindow.MouseDown = mdown
GraphicsWindow.MouseMove = mmove
GraphicsWindow.MouseUp = mup

Sub mdown
  If Mouse.IsLeftButtonDown Then
    Shapes.Rotate(sekil, 45)
  ElseIf Mouse.IsRightButtonDown Then
    Shapes.Rotate(sekil, -45)
  EndIf
EndSub
Sub mmove
  If Mouse.IsLeftButtonDown Then
    GraphicsWindow.Title = "Mouse:("+GraphicsWindow.MouseX+", "+GraphicsWindow.MouseY+")"
  EndIf
EndSub
Sub mup
  GraphicsWindow.Title = "Small Basic - Olaylar - Events"
  Shapes.Rotate(sekil, 0)
EndSub

Yine açıklamayı yapalım:

23-25: Burası üstte klavye tuşu basıldığında ve bırakıldığında işlemleri için yapılan işlem ile aynı. Sırasıyla mouse tuşu basıldığında(23), mouse hareket ettiğinde(24) ve mouse tuşu bırakıldığında(25) işlemleri.
27-42: Bu arada yine alt yordam tanımlıyoruz.
Mouse.IsLeftButtonDown komutu eğer farenin sol tuşu basıldıysa
Mouse.IsRightButtonDown komutu da eğer farenin sağ tuşu basıldıysa yapılacak işlemler için kullanılıyor.
"Mouse:("+GraphicsWindow.MouseX+", "+GraphicsWindow.MouseY+")" komutu ise, farenin sol tuşu basılıyken hareket ettirilirse, fare okunun pencerede hangi (x, y) konumunda olduğunu pencere başlığına yazdırıyor.

Son durum:





Paylaş:
Devamını Oku

21 Mart 2020 Cumartesi

Small Basic - GraphicsWindow - Bölüm 3


Daha önceki dersimizde belirttiğimiz gibi bu ders GraphicsWindow ile buton uygulaması yapacağız. Bunun için de subroutine - alt yordam kullanmamız gerekiyor. Bu yüzden önceki derste alt yordamı işledik.

Şimdi gelelim buton olayına. Önce kodlar sonra açıklamasına bakalım.


Kodlar:

yazi = Controls.AddTextBox(10, 10)
buton = Controls.AddButton("Yazdır", 10, 40)
Controls.ButtonClicked = yazdir


Sub yazdir
  If Controls.LastClickedButton = buton Then
    GraphicsWindow.Title = Controls.GetTextBoxText(yazi)
    GraphicsWindow.ShowMessage(Controls.GetTextBoxText(yazi), "Uyarı")
  EndIf
EndSub

Satır satır açıklayalım:

1: Burada Controls sınıfını kullanarak ekrana bir TextBox ekleyeceğimizi belirtiyoruz. TextBox, program çalıştıktan sonra içerisine metin girişi yapabileceğimiz form elemanıdır. Bir siteye giriş yaparken kullandığınız kullanıcı adı şifre giriş kısmı gibi yani.
Ve tabi bunu bir değişkene atamamız gerekiyor ki daha sonra kullanırken sorun yaşamayalım.
Parantez içindeki (10, 10) kısmı ise, ekleyeceğimiz TextBox için konum belirtiyor. İlk değer soldan, ikinci değer ise yukarıdan kaç piksel boşluk olacağını belirtiyor. Mantığını hatırlamıyorsanız bu konudaki drawline kısmında ayrıntılı anlatmıştım.
2: Burada da ekrana bir buton ekleyeceğimizi bildiriyoruz.  Yine Controls sınıfını kullanıyoruz. Parantez içindeki özellikler ("Butonun yazısı", x, y) yani yine soldan ve üstten bırakılacak boşluk miktarını belirtiyor. Soldan TextBox ile aynı mesafeyi bırakıyoruz ki aynı hizada olsunlar. Yukarıdan da 40 bırakmak yeterli geliyor normal bir görünüm için. İstediğiniz gibi değiştirebilirsiniz.
3: Eğer bir butona tıklandıysa ne olacağını söylüyoruz. yazdir alt yordamını çalıştır diyoruz. Burada hangi buton olduğu önemli değil, eğer programınızda 3 buton varsa ve herhangi birine basıldıysa yine de bu alt yordam çalışacaktır. Buton seçimini alt yordam içinde yapacağız.
6: Buradan itibaren alt yordamı tanımlamaya başlıyoruz. Alt yordam adı yazdir olacak. 
Dikkat ettiyseniz kodlarda yazdir() gibi bir şey kullanmadık. Önceki dersimizde kullanımımız bu şekildeydi. Bu kez butona tıklandığında çalışacağı için ayrıca yukarıda belirtmemize gerek yok.
7: Evet, buton seçimini burada alt yordamın içinde yapacağımızı söylemiştim.
Burada eğer son tıklanan buton Controls.LastClickedButton buton değişkenine tanımlanmış olan ise, o zaman bu işlemi yap demiş oluyoruz.
Sonrası: GraphicsWindow.Title kısmını önceki yazılardan biliyorsunuz. Pencere başlığı.
GraphicsWindow.ShowMessage ise, belirttiğimiz yazıyı ekrana mesaj olarak çıkarıyor. "Uyarı" kısmı ise çıkacak mesaj penceresinin başlığı.
Controls.GetTextBoxText(yazi)  ise textbox içindeki yazıyı al demek. Yani textbox içine ne yazdıysanız pencere başlığı ve çıkan mesaj penceresinin içeriği o olacak.
Aşağıda görebilirsiniz:


Üsteki resimde gördüğünüz gibi TextBox içine yazdığımız yazı hem GraphicsWindow.Title özelliğini değiştiriyor hem de ekrana bir mesaj penceresi getiriyor. Uyarı kısmı ise gelen mesaj penceresinin başlığı konumunda.

GraphicsWindow konularına aşağıdaki bağlantılardan ulaşabilirsiniz:

Paylaş:
Devamını Oku

Small Basic - Subroutine - Alt Yordam

Önceki derste de söylediğim gibi bu ders GraphicsWindow ile devam edeceğiz. Ancak bunu yapmadan önce bir konuya daha değinip öyle devam etmemiz gerekiyor. Çünkü bu konu olmadan GraphicsWindow içinde yapacağımız uygulamayı yapmamız mümkün değil.

Subroutine(Alt Yordam)
Evet Subroutine ya da Türkçe olarak Alt Yordam denen ve program içinde Sub olarak kullanacağımız bir özellik mevcut. Diğer programlama dillerinde fonksiyon olarak geçen Sub, bir işlemi tekrar tekrar yazmamıza gerek bırakmayarak, bir kod topluluğunu tek bir isimle kullanmamızı sağlıyor. 

Tanım: “Bir altyordam, her bir talimatı kopyalamanıza gerek kalmadan, programınızda birden çok kez çalıştırılabilen bir talimatlar topluluğudur.” Şeklinde geçiyor.

Peki, biz bunu nerede nasıl kullanacağız?

Daha önce Ekrana Yazı Yazdırmak başlıklı yazımızda TextWindow kullanımından bahsetmiştik. Aynı zamanda TextWindow için ayrıntılı olarak özelliklerinden de TextWindow Özellikleri yazımızda bahsetmiştik. Hatırlamayanlar bu konuları tekrar edip ondan sonra bu konuya devam etsinler.

Alt Yordam neden gerekli anlamak için öncelikle aşağıdaki örneği inceleyelim:

Kodlar:


Buradaki program bir soru soruyor, ardından doğru ya da yanlış değerini döndürüyor. Bunu yaparken verilen cevaba bağlı kalmaksızın rastgele bir sonuç döndürüyor. 

randomNumber = Math.GetRandomNumber(2)

Bu kod randomNumber değişkenine rastgele bir sayı üreterek eşitliyor. Math sınıfı Small Basic içinde hazır gelen fonksiyonlardan biri. Matematiksel işlemler için kullanılıyor. GetRandomNumber(2) ise 1 ile belirtilen sayı aralığında rastgele sayı üretir. Bu durumda ya 1 ya da 2 değeri üretecektir. Parantez içerisinden 10 yazılsaydı 1-10 arası bir değer üretecekti. Eğer üretilen değer 1 ise Doğru değilse Yanlış yazıyor. If kullanımını hatırlamayanlar buradaki yazıya ya da örnek için buradaki yazıya bakarak konuyu hatırlayabilirler.

Buraya kadar sorun yok. Peki bir soru daha sormak isteyelim aynı program içinde. Üstteki 9 satırı kopyala/yapıştır yaparak bunu kolayca yapabiliriz. Ancak biz biliyoruz ki programlama işleri kolaylaştırmak için vardır. Bunu daha önce döngüler konusunda da görmüştük.

İşte tam da burada işleri kolaylaştırmak adına Subroutine-Alt Yordam devreye giriyor. Şimdi kodları Alt Yordam kullanarak tekrar yazalım ve ikinci bir soru daha ekleyelim:


Kodlar:

TextWindow.WriteLine("Odanı sürekli temizler misin?")
TextWindow.Read()
yalandedektoru()

TextWindow.WriteLine("Kod yazmayı seviyor musun?")
TextWindow.Read()
yalandedektoru()

Sub yalandedektoru
  TextWindow.Write("Doğruluk dedektörü: ")
  randomNumber = Math.GetRandomNumber(2)
  If(randomNumber = 1)Then
    TextWindow.WriteLine("Doğru")
  Else
      TextWindow.WriteLine("Yanlış")
  EndIf
EndSub

Sub sözcüğünü kullanarak bir alt yordam tanımlıyoruz. Değişkenlerde olduğu gibi bunun da bir isme ihtiyacı var. Burada yalandedektoru ismini kullandık. Sorulardan sonra gelen yalandedektoru() kısmı sorudan sonra bizim alt yordamın çalışacağını belirtiyor.

9-17. satırlar arası yalandedektoru() yazılan her yerde yeniden çalışıyor. Bu sayede bu satırları her sorudan sonra tekrar takrar yazmak sorunda kalmıyoruz.

1-3: İlk soru soruluyor ve cevap girilmesi bekleniyor. (Burada ne yazdığınız çok önemli değil. Herhangi bir şey yazabilirsiniz.) Son olarak yalandedektoru() alt yordamı çalışıyor ve cevabı yazdırıyor.
5-7: İlk 3 satırda olanlar yeniden oluyor. Soru farklı ama 7. satırda yalandedektoru() aynı. Yine rastgele bir değer döndürüyor ve ekrana yazdırıyor.
9-17:  Programın bel kemiği burası. yalandedektoru() yazılan yerde ne olmasını istiyorsak burayı değiştirmemiz ve ona göre düzenlememiz gerekiyor. Örneğin Yanlış yerine Yalan yazdırmak istersek sadece burada değiştirmemiz yalandedektoru() alt yordamını çalıştırdığımız her yerde aynı sonuca ulaşmamızı sağlayacak.

Programı çalıştırdığımızda sonuç:


Şansıma her ikisi de doğru çıktı :)

Sonraki ders GraphiscWindow ile buton ekleyip, butona tıklandığında istediğimiz bir işlemi nasıl yaptırabiliriz buna bakacağız. GraphiscWindow ile ilgili önceki konuları tekrar etmek isterseniz aşağıdaki bağlantılardan ulaşabilirsiniz:

Paylaş:
Devamını Oku