PureBasic 4 - GUI programlama

 


PureBasic ile resimdekine benzer arayüzleri komutlarla oluşturabiliyoruz. Aşağıdaki programda #ANA_PENCERE ve #BAYRAK bizim tanımladığımız sabit değerlerdir. #PB_Event_CloseWindow gibi PB ile başlayan sabitler, PureBasic içinde önceden tanımlı olan değerlerdir. Editörde menüden Tools -> Structure Viewer a tıklayın. Burada Constants (sabitler) sekmesine gelin. P harfine basıp bu sabiti bulun. Değerinin 13116 olduğunu görürsünüz. Programı çalıştırınca (F5), Event (oluşan olaylar) numaralarını, Debug penceresinde görürsünüz. Merhaba Dünya pencerisini kapattığınız anda Debug penceresinde en son 13116 yazdığını göreceksiniz.

#ANA_PENCERE = 1
#BAYRAK = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
OpenWindow(#ANA_PENCERE, 0, 0, 300, 200, "Merhaba Dünya", #BAYRAK)
Repeat
  Event = WaitWindowEvent()
  Debug Event
Until Event = #PB_Event_CloseWindow
End
OpenWindow() komutu tahmin ettiğiniz gibi pencereyi açıyor. Editörde bu komuta tıklayın ve F1 tuşuna basın. Yardım dosyası açılacaktır. İlk sayı yani #ANA_PENCERE sabiti, pencerenin kimlik numarasıdır. 2. ve 3. parametre pozisyondur, pencere ekrana ortalanacağından bir önemleri yoktur. 4. ve 5. parametreler pencerenin genişliği ve yüksekliğidir. #BAYRAK sabitinde bulunan ScreenCentered sabiti pencerenin ekranın ortasında çıkmasını sağlıyor. #BAYRAK sabitinde, istenen özellikler bit ler için kullanılan or (veya) işlemi ile birleştirilir. Repeat-Until arasındaki komutlar, until (e kadar) şartında belirtilen pencere kapatma düğmesine basılana kadar devam ediyor. Düğmeye basıldığında #PB_Event_CloseWindow olayı (event) oluşuyor.



ButtonGadget ve TextGadget

Microsoft da control olarak geçen buton gibi elemanlar, PB de gadget olarak isimlendiriliyor.
Enumeration
  #WIN_MAIN
  #BUTTON_INTERACT
  #BUTTON_CLOSE
  #TEXT_INPUT
EndEnumeration
Global Quit.b = #False
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
OpenWindow(#WIN_MAIN, 0, 0, 300, 200, "Interaction", #FLAGS)
TextGadget(#TEXT_INPUT, 70, 70, 200, 20, "TextGadget")
ButtonGadget(#BUTTON_INTERACT, 10, 170, 100, 20, "Click me")
ButtonGadget(#BUTTON_CLOSE, 190, 170, 100, 20, "Close window")
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #BUTTON_INTERACT
          SetGadgetText(#TEXT_INPUT, "Button clicked!")
        Case #BUTTON_CLOSE
          Quit = #True
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow Or Quit = #True
End
Burada Enumeration kullanmadan 0,1,2,3 gibi sayıları da kullanabilirdik. Enumeration, okunurluğu artırmaktadır. #PB_Event_Gadget olayı oluştuğunda EventGadget() ile olayın hangi kontrolden kaynaklandığı görülmektedir.



StringGadget

Kullanıcıdan bilgi almak için kullanılıyor. İçindeki yazı GetGadgetText() ile alınıyor. SetGadgetText() ile içine birşey yazılabiliyor. Read-only yani sadece okunur özelliği verilebiliyor. Daha detaylı kullanımları için yardım sayfasından bilgi alabilirsiniz.
Enumeration
  #WIN_MAIN
  #TEXT_INPUT
  #TEXT_INPUT2
  #STRING_INPUT
  #STRING_INPUT2
  #BUTTON_INTERACT
  #BUTTON_CLOSE
EndEnumeration
Global Quit.b = #False
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
OpenWindow(#WIN_MAIN, 0, 0, 300, 200, "Interaction", #FLAGS) 
TextGadget(#TEXT_INPUT, 10, 10, 280, 20, "Enter text here:")
StringGadget(#STRING_INPUT, 10, 30, 280, 20, "")
StringGadget(#STRING_INPUT2, 10, 70, 280, 20, "buraya yazamazsın dene bakalım",
             #PB_String_ReadOnly)
TextGadget(#TEXT_INPUT2, 10, 110, 280, 20, "TextGadget")
ButtonGadget(#BUTTON_INTERACT, 10, 170, 120, 20, "Echo text")
ButtonGadget(#BUTTON_CLOSE, 190, 170, 100, 20, "Close window")
SetActiveGadget(#STRING_INPUT)
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #BUTTON_INTERACT
          text.s = GetGadgetText(#STRING_INPUT)
          SetGadgetText(#TEXT_INPUT2,text)
        Case #BUTTON_CLOSE
          Quit = #True
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow Or Quit = #True
End
Burada SetActiveGadget() ile ayarlandığından, pencere ilk açıldığında en üstteki kutuda imleçin yanıp söndüğünü görürsünüz.


 

ListViewGadget

Metinleri veya sayıları listelemek için kullanılıyor.
Enumeration
  #WIN_MAIN
  #TEXT_INPUT
  #STRING_INPUT
  #LIST_INPUT
  #BUTTON_INTERACT
  #BUTTON_CLOSE
EndEnumeration
Global Quit.b = #False
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
OpenWindow(#WIN_MAIN, 0, 0, 300, 200, "Interaction", #FLAGS) 
TextGadget(#TEXT_INPUT, 10, 10, 280, 20, "Enter text here:")
StringGadget(#STRING_INPUT, 10, 30, 280, 20, "")
ListViewGadget(#LIST_INPUT, 10, 60, 280, 100)
ButtonGadget(#BUTTON_INTERACT, 10, 170, 120, 20, "Enter text")
ButtonGadget(#BUTTON_CLOSE, 190, 170, 100, 20, "Close window")
SetActiveGadget(#STRING_INPUT)
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #BUTTON_INTERACT
          AddGadgetItem(#LIST_INPUT, -1, GetGadgetText(#STRING_INPUT))
          SetGadgetText(#STRING_INPUT, "")
          SetActiveGadget(#STRING_INPUT)
        Case #BUTTON_CLOSE
          Quit = #True
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow Or Quit = #True
End
Burada AddGadgetItem() ile listeye maddeler ekleniyor. Yeni maddeyi listenin sonuna eklemek için -1 parametresi kullanılmış. -1 yerine 0 kullanılırsa yeni maddeyi listenin başına yazıyor.


EventType (olay tipi)

EventGadget() ile olayın hangi kontrolden kaynaklandığı anlıyorduk. EventType() ile de hangi olayın oluştuğunu anlıyoruz. Örneğin, StringGadget a tıklayınca #PB_EventType_Focus olayı oluşuyor. İçine bir şey yazınca #PB_EventType_Change olayı oluşuyor. Çift tıklayınca #PB_EventType_LeftDoubleClick olayı oluşur.
OpenWindow(0, 0, 0, 200, 200, "EventType",
           #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
StringGadget(0, 0, 0, 200, 20, "Bir şey yaz")
TextGadget(1, 0, 20, 200, 20, "11 karakterden oluşuyor")
TextGadget(2, 0, 50, 200, 20, "Çift tıklayarak silin:")
ListViewGadget(3, 0, 70, 200, 130)
For x=0 To 20
  AddGadgetItem(3,x,"Element "+Str(x))
Next
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 0
          Select EventType()
            Case #PB_EventType_Change
              SetGadgetText(1,Str(Len(GetGadgetText(0)))+" karakterden oluşuyor")
            Case #PB_EventType_Focus
              SetGadgetText(0,"")
              SetGadgetText(1,Str(Len(GetGadgetText(0)))+" karakterden oluşuyor")
          EndSelect
        Case 3
          Select EventType()
            Case #PB_EventType_LeftDoubleClick
              RemoveGadgetItem(3,GetGadgetState(3))
          EndSelect
      EndSelect
  EndSelect
ForEver
Burada Enumeration kullanmadan, her kontrole 0,1 gibi artan numaralar verilmiş. Bu durumda numaraları dikkatli vermeniz gerekiyor. Örneğin, 0 stringgadget in numarası olduğundan, case 0, bu kontrolde bir olay olursa durumunu değerlendirir. Case 3 ise listviewgadget kontrolüne bakar. Listedeki elemanları çift tık ile silebilirsiniz. 





Bahsedemediğim daha bir çok konu var. Burada paylaştıklarım umarım sizin için bir başlangıç olur. C:\Program Files\PureBasic\Examples bu dizindeki örnek programlara ve yardım dosyasına (F1) bakmayı unutmayın. Ayrıca takıldığınız bir yer olursa foruma sorabilirsiniz.
 

Yorumlar

Bu blogdaki popüler yayınlar

VBA - Mscomm (seri port) ile veri loglama

RJ45 2 - Novexx barkod yazıcıya, S7-1200 plc ile etiket yazdırma

Köpüğü alınmış Windows AtlasOS