Forum: Diğer Konular RSS
GtkD Modül özellikleri
Sayfa:  1  2  3  4  5  6  7  sonraki 
cos00kun #1
Üye Kas 2014 tarihinden beri · 223 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: GtkD Modül özellikleri
Buradan GtkD kütüphanesindeki bazı modüllerin kullanım bilgilerini sormak istiyorum.
Şu anda Button modülü üzerinde çalışmalar yapmaktayım. Button nesnesi yaratma, pencerelere ekleme konularında bayağı yol almama rağmen eğer mümkünse Button işlev ve özellikleri hakkında bilgiler verebilirmisiniz ?

Örneğin Butonu istediğim boyutta, oluşturduğum Pencerenin içinde istediğim konumda nasıl gösterebilirim ?
(Bu Box modülü kullanılıp önce buna ardından Box'u Penceremize dahil edipte yapılabilir belki ama ben her ikisini de yani Box kullanıp ve kullanmayarak Butonları istediğimiz boyutta Pencerenin istediğimiz yerine nasıl sabitlerim onun derdindeyim).

Evet bugünkü konumuz Button idi hele bir bunu atlatalım diğer modüllerde soru olarak gelecek elbette. Bu sayede hem sizin bilgiler tazelenir hemde ben birşeyler öğrenirim  :-)

huzurlu bir gece diliyorum herkese..
E=mc^2
erdem (Moderatör) #2
Üye Tem 2009 tarihinden beri · 1050 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Sanırım tek başına düğme hizalaması için genişlet ve hizala özellikleri kullanılıyormuş. Örneğin bu düğmeyi sol altta hizalıyor anladığım kadarıyla.
        Button btn = new Button();
        btn.setSizeRequest(25,25);
        btn.setLabel("Exit");
        btn.setVexpand(true);
        btn.setHexpand(true);
        btn.setHalign(Align.END);
        btn.setValign(Align.END);
Ama bunun yerine tasarımı kağıt üzerinde oluşturup daha sonra yerleşim bileşenleri kullanarak pratiğe geçirmek daha mantıklı gözüküyor.

Bir de tasarım için glade de kullanabilirsin.
cos00kun #3
Üye Kas 2014 tarihinden beri · 223 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
teşekkürler.. glade de iyiymiş ancak oradan yapılan nesnelerin d dili ve gtkd ya nasıl aktarıllacağı konusunda en ufak bir bilgim bile yok..

şimdi geçelim diğer bir konuya; Menu , MenuItem ve MenuBar .. bu modüllerde benim anladığım MenuBar a MenuItem ile seçeneklerimizi ekleyebiliyoruz peki burada Menu modülü neyi sağlıyor onu anlayamadım ?

Bir başka soruda şu; şimdi bir buton nesnesi yarattık diyelim.. bunu direk bir ButtonBox vesaire türü bir kutu türüne eklemeden direk oluşturduğumuz pencerenin herhangi bir yerine nasıl koyabiliyoruz ? zira bu oluşturduğumuz butonu herhangi bir box türü nesneye gömmeden pencere türü bir nesneye konumsal olarak ekleyemiyorum pencereyi kaplıyor.. aslında packStart() işlevi Window sınıfının bir işlevi olsa bu olur ancak packStart box sınıfında işlev olarak kullanılabiliyor.. özetle pencereye butonu herhangi bir box içine almadan istediğim boyutta istediğim yere nasıl sabitleyebilirim?

son sorumda packStart() işlevi tam olarak ne yapar ?

teşekkürler..
E=mc^2
erdem (Moderatör) #4
Üye Tem 2009 tarihinden beri · 1050 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
cos00kun:
Menu , MenuItem ve MenuBar .. bu modüllerde benim anladığım MenuBar a MenuItem ile seçeneklerimizi ekleyebiliyoruz peki burada Menu modülü neyi sağlıyor onu anlayamadım ?

Menü sınıfı anladığım kadarıyla menüyü oluşturuyor.

cos00kun:
Bir başka soruda şu; şimdi bir buton nesnesi yarattık diyelim.. bunu direk bir ButtonBox vesaire türü bir kutu türüne eklemeden direk oluşturduğumuz pencerenin herhangi bir yerine nasıl koyabiliyoruz ?

Bunun bir yolu var mı bilmiyorum. Bildiğim kadarıyla bir yerleşim bileşeninin içine koyarak hizalama yapıyoruz.

Qt kütüphanesi de başka bir hizalama yöntemi kullanıyor. Hatta bir iş mülakatı için örnek proje yaparken bu hizalamayı yapayım diye oldukça uğraşmıştım.

cos00kun:
son sorumda packStart() işlevi tam olarak ne yapar ?

Ben bunu at sepete diye çevirmiştim. Görsel bir bileşeni bir yerleşim bileşeninin içine koymak için kullanıyoruz.  Örneğin bir düğmeyi bir kutuya koyarken kullanabiliriz.
cos00kun #5
Üye Kas 2014 tarihinden beri · 223 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
İki sorum var  ;-)

1) glade ile yazılan birşeyi D dilinde nasıl kullanacağız ?

2) widget GtkD de tam olarak hangi nesnelerdir yada nedir ? Button sınıfından bir nesne yaratmışsak örneğin bu durumda widget ne oluyor bu durumda GtkD de tam olarak ?
E=mc^2
Bu mesaj cos00kun tarafından değiştirildi; zaman: 2017-12-13, 11:06.
cos00kun #6
Üye Kas 2014 tarihinden beri · 223 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
iki soru daha ekledim müsadenizle :)

3) GtkD dosyalarını incelediğimizde ToggleButton sınıfı Button sınıfından türemiş gözüküyor . Bu durumda "ToogleButton.d" de tanımlı işlevleri kullanabilirken "Button.d" de tanımlanmış işlevleride direkt olarak kullanabilirmiyiz ? Örneğin "Button.d" de tanımlı pressed() veya addOnClicked () işlevlerini "ToggleButton.d" de tanımlanmamaış olmasına rağmen direkt kullanabiliyormuyuz ?  (Dahada açarsam ToggleButton dan yarattığımız basBırakDüğme adlı nesneye,  basBırakDüğme.pressed() veya basBırakDüğme.addOnClicked (....) diyebilirken bu durumda basBırakDüğme.pressed () diye bir kullanım uygunmudur ? )

4) şu aşağıdaki satırı nasıl yorumlayabiliriz ? yani burda addOnToggled işlevinin parametrelerini aşağıdaki satırlardan nasıl anlarız ne olduklarını?. Birde gulong türü ne olaki ?
gulong addOnToggled (void delegate(ToggleButton) dlg, ConnectFlags connectFlags = cast(ConnectFlags)0);
yada;
gulong addOnClicked (void delegate(Button) dlg, ConnectFlags connectFlags = cast(ConnectFlags)0);
E=mc^2
erdem (Moderatör) #7
Üye Tem 2009 tarihinden beri · 1050 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #5
cos00kun:
1) glade ile yazılan birşeyi D dilinde nasıl kullanacağız ?

Örneğin glade programını kurdum. Sonra bir tane GtkWindow ve GtkLabel ekledim. İçeriği şunun gibi oldu:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
  <requires lib="gtk+" version="3.12"/>
  <object class="GtkWindow" id="pencere1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkLabel" id="etiket1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="label" translatable="yes">Merhaba Dünya</property>
      </object>
    </child>
  </object>
</interface>
Sonra buna D içinden erişmek için bu kodu kullandım.
import gtk.Builder;
import gtk.Main;
import gtk.Widget;
import gtk.Window;
import std.stdio;
 
int main (string[] args)
{
    Main.init(args);
    Builder b = new Builder();
    b.addFromFile("merhaba.glade");
    Window w = cast(Window)b.getObject("pencere1");
    w.addOnHide( delegate void(Widget aux){ Main.quit(); } );
    w.showAll();
    Main.run();
    return 0;
}
erdem (Moderatör) #8
Üye Tem 2009 tarihinden beri · 1050 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu örnekte bir kutu ve içine düğme ekledim.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
  <requires lib="gtk+" version="3.12"/>
  <object class="GtkWindow" id="pencere1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkBox" id="kutu1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <placeholder/>
        </child>
        <child>
          <placeholder/>
        </child>
        <child>
          <object class="GtkButton" id="dugme1">
            <property name="label" translatable="yes">button</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="dugme1Tiklandi" swapped="no"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">2</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>
Eğer sinyalleri kullanmak istersek basitçe bileşenin (burada düğme) sinyaller kısmına geliyoruz.  Örneğin burada düğmenin clicked olayına geldim ve işleyici bölümüne dugme1Tiklandi dedim.

Daha sonra bu sinyalleri kodumuzda kullanabilmek için connectSignals kısmını yazıyoruz.
import gtk.Builder;
import gtk.Main;
import gtk.Widget;
import gtk.Window;
import std.stdio;
 
extern(C) void dugme1Tiklandi()
{
    writeln("Buraya geldik");
    Main.quit();
}
 
int main (string[] args)
{
    Main.init(args);
    Builder b = new Builder();
    b.addFromFile("merhaba.glade");
    Window w = cast(Window)b.getObject("pencere1");
    b.connectSignals(null);
    w.addOnHide( delegate void(Widget aux){ Main.quit(); } );
    w.showAll();
    Main.run();
    return 0;
}
ve extern(C) ile düğmenin tıklanma olayını yazıyoruz.
cos00kun #9
Üye Kas 2014 tarihinden beri · 223 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bakın bu güzel oldu :-)
Bu satırlarıda açıklayabilirmisiniz Erdem Bey ? w ile nesneyi yaratıyoruz bu konuyları biliyorum ama cast() ve getObject() işlevleri tam olarak ne yapar onu bilmiyorum . ayrıca Sinyal tam olarak nedir   ne iş yapar açıklayabilirseniz sevinirim ..
    Window w = cast(Window)b.getObject("pencere1");
    b.connectSignals(null);
    w.addOnHide( delegate void(Widget aux){ Main.quit(); } );


değerli yardımlar için yine çok çok teşekkür ederim sayenizde bayağı bi yol aldım sayılır ne diyeyim allah razı olsun

Not: Belki görmemişsinizdir diye ufak bir hatırlatma .. Eğer vakit bulurda ilgilenebilirseniz yukarıdaki maillerde 4 adet soru sormuştum. 2 , 3 ve 4. sorularım cevap beklemekte bilginiz ve vaktiniz doğrultusunda beklemekteyim özür dileyerek  ;-)
E=mc^2
erdem (Moderatör) #10
Üye Tem 2009 tarihinden beri · 1050 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #6
cos00kun:
4) şu aşağıdaki satırı nasıl yorumlayabiliriz ? yani burda addOnToggled işlevinin parametrelerini aşağıdaki satırlardan nasıl anlarız ne olduklarını?. Birde gulong türü ne olaki ?
gulong addOnToggled (void delegate(ToggleButton) dlg, ConnectFlags connectFlags = cast(ConnectFlags)0);
yada;
gulong addOnClicked (void delegate(Button) dlg, ConnectFlags connectFlags = cast(ConnectFlags)0);

gulong türü sanırım rakamsal bir değer döndürüyor olabilir.
        button1 = new Button("Merhaba");
        button1.addOnClicked(&firstButtonClicked);
 
        void firstButtonClicked(Button button1)
        {
            writeln("Merhaba");
        }
Bu da delegate'in parametre olarak bir düğme aldığını söylüyor. İkinci parametre sanırım zaten varsayılan bir değer almış.
erdem (Moderatör) #11
Üye Tem 2009 tarihinden beri · 1050 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #9
cos00kun:
bu konuyları biliyorum ama cast() ve getObject() işlevleri tam olarak ne yapar onu bilmiyorum . ayrıca Sinyal tam olarak nedir   ne iş yapar açıklayabilirseniz sevinirim ..
    Window w = cast(Window)b.getObject("pencere1");
    b.connectSignals(null);
    w.addOnHide( delegate void(Widget aux){ Main.quit(); } );

cast() tür dönüşümü yapıyor. getObject kullanarak ise kimliği pencere1 olan ve Glade ile oluşturduğumuz GtkWindow nesnesine erişim sağlıyoruz.

Sinyal bir olay olduğunda bildirim almak ve nesnenin davranışını kullanıcı ihtiyaçlarına göre özelleştirmek için kullanılan bir yöntemdir. Her sinyal (işaret) "sınıf_ismi::sinyal_ismi" şeklinde benzersiz olarak tanımlanabilir. Burada sınıf ismi örneğin GtkButton ve işaret ismi 'tıklandı' şeklinde olabilir.

cos00kun:
2 , 3 ve 4. sorularım cevap beklemekte bilginiz ve vaktiniz doğrultusunda beklemekteyim özür dileyerek  ;-)

2. soruyu tam anlamadım. 3. soru'yu da bir örnek üzerinde izah edebilirmisin.
cos00kun #12
Üye Kas 2014 tarihinden beri · 223 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler..
3. sorumun örneğini haftasonu yazıp size sorarım tekrardan ancak bu arada yeni şey daha sorma gereği duydum.
sayfanızda yayınlanmış bir örnekte
import gtk.Ana;
import gtk.AnaPencere;
import gtk.Kalbur;
import gtk.Düğme;
 
class Pencere: AnaPencere
{
    Kalbur kalbur;
    Düğme düğme1, düğme2, düğme3, düğme4, düğme5, düğme6;
 
    this()
    {
        super("Kalbur örneği");
        kalbur = new Kalbur();
        ekle(kalbur);
 
        düğme1 = new Düğme("Düğme1");
        düğme2 = new Düğme("Düğme2");
        düğme3 = new Düğme("Düğme3");
        düğme4 = new Düğme("Düğme4");
        düğme5 = new Düğme("Düğme5");
        düğme6 = new Düğme("Düğme6");
 
        kalbur.ekle(düğme1);
        kalbur.iliştir(düğme2, 1, 0, 2, 1);
        kalbur.yanınaİliştir(düğme3, düğme1, ALT, 1, 2);
        kalbur.yanınaİliştir(düğme4, düğme3, SAĞ, 2, 1);
        kalbur.iliştir(düğme5, 1, 2, 1, 1);
        kalbur.yanınaİliştir(düğme6, düğme5, SAĞ, 1, 1);
 
        tümünüGöster();
    }
}
 
void main(string[] değişkenler)
{
    Ana.ilklendir(değişkenler);
    auto pencere = new Pencere();
    Ana.çalıştır();
}
bir kod yazmışsınız. burada 

        kalbur.yanınaİliştir(düğme4, düğme3, SAĞ, 2, 1);
        kalbur.iliştir(düğme5, 1, 2, 1, 1);

şu satırları anlama konusunda güçlük yaşıyorum.. Aslında " kalbur.yanınaİliştir(düğme4, düğme3, SAĞ, 2, 1);" Bunda problem yok gayet net şekilde anlaşılıyor ve benim anladığım düğme4 nesnesini düğme3 nesnesinin SAĞ kısmına koy ve bunu 2 sutun ile 1 satırlık yer işkal edecek durumda konumla demek.  Ancak alttaki satırda " kalbur.iliştir(düğme5, 1, 2, 1, 1);" buradaki düğme5 nesnesinden sonra yazan ilk "1" ve "2" nin anlamını çözemedim ?
E=mc^2
Bu mesaj cos00kun tarafından değiştirildi; zaman: 2017-12-15, 00:55.
cos00kun #13
Üye Kas 2014 tarihinden beri · 223 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Kendimce bir mantık geliştirdim Erdem hocam ama doğrumudur emin değilim şöyle ki;
kalbur.iliştir(düğme5, 1, 2, 1, 1); düğme5 widgetini al ilk widgetin yada sol en üst köşedeki saırdan itibaren 1 sağ git oradan 2 aşağıya in 1 sutunluk genişlikte ve 1 satırlık yükseklikte konumlandır.

Bu mantığa göre sanki herşey oturuyor gibi sadece başlangıç noktası yada referans noktası ilk widgetmidir yoksa sol en üst köşedeki ilk hücremidir onu çözemedim.
E=mc^2
erdem (Moderatör) #14
Üye Tem 2009 tarihinden beri · 1050 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
[Resim: http://programlama.tk/resim/resim/gtksoru.png]

Sanırım resim üzerinde daha anlaşılır. düğme2'den sonra gelen parametre sol tarafta kaç sütün olduğunu gösteriyor. Bir sonraki üstte ne kadar satır olduğunu gösteriyor.

Daha sonraki parametre genişliğe gelirsek bu da düğmenin kaç sütün kaplayacağını, yükseklik ise kaç satır kaplayacağını belirtiyor.

Aynı durumu 5. düğme için de düşünebilirsin.
cos00kun #15
Üye Kas 2014 tarihinden beri · 223 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Resim harika oldu sağolun.. aslında benim yazdığımla hafiften örtüşüyor gibi  :-)
peki Erdem hocam kalbur.iliştir(düğme2, 4, 3, 1, 1); yaptığımızda neden kalbur.iliştir(düğme2, 1, 1, 1, 1); gibi davranıyor ? Bu mantığa göre sol tarafta 4 sutun üst tarafta 3 satır olarak düğme2 yi eklemesi gerekirken o kadar boşluk oluşmuyor acaba bunun sebebi grid yani kalbur sınıfının nesne olarak üretildiği anda  dafault bir değerinin olmasımıdır ?
teşekkürler..
import gtk.Main;
import gtk.MainWindow;
import gtk.Grid;
import gtk.Button;
 
class Pencere: MainWindow
{
    Grid kalbur;
    Button düğme1, düğme2;
 
    this()
    {
        super("Kalbur örneği");
        kalbur = new Grid();
        add(kalbur);
    resize(560,250);
 
        düğme1 = new Button("Düğme1");
        düğme2 = new Button("Düğme2");
        kalbur.add(düğme1);
        kalbur.attach(düğme2,3,4,1,1);
 
        showAll();
    }
}
 
void main(string[] değişkenler)
{
    Main.init(değişkenler);
    auto pencere = new Pencere();
    Main.run();
}
E=mc^2
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  1  2  3  4  5  6  7  sonraki 
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2018-01-21, 18:25:39 (UTC -08:00)