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
Yorum Gönder