December 25, 2017

Erdem hocam selamlar.. elimde şöyle bir Glade dosyası var

<?xml version="1.0" encoding="UTF-8"?>
<interface>
 <requires lib="gtk+" version="2.24"/>
 <!-- interface-naming-policy project-wide -->
 <object class="GtkWindow" id="window1">
   <property name="can_focus">False</property>
   <child>
     <object class="GtkLayout" id="layout1">
       <property name="visible">True</property>
       <property name="can_focus">False</property>
       <child>
         <object class="GtkButton" id="button1">
           <property name="label" translatable="yes">button</property>
           <property name="width_request">57</property>
           <property name="height_request">20</property>
           <property name="visible">True</property>
           <property name="can_focus">True</property>
           <property name="receives_default">True</property>
         </object>
         <packing>
           <property name="x">20</property>
           <property name="y">20</property>
         </packing>
       </child>
       <child>
         <object class="GtkEntry" id="entry1">
           <property name="width_request">365</property>
           <property name="height_request">10</property>
           <property name="visible">True</property>
           <property name="can_focus">True</property>
           <property name="invisible_char">●</property>
           <property name="primary_icon_activatable">False</property>
           <property name="secondary_icon_activatable">False</property>
           <property name="primary_icon_sensitive">True</property>
           <property name="secondary_icon_sensitive">True</property>
         </object>
         <packing>
           <property name="x">20</property>
           <property name="y">60</property>
         </packing>
       </child>
       <child>
         <object class="GtkVBox" id="vbox1">
           <property name="width_request">748</property>
           <property name="height_request">144</property>
           <property name="visible">True</property>
           <property name="can_focus">False</property>
           <child>
             <object class="GtkSpinButton" id="spinbutton1">
               <property name="visible">True</property>
               <property name="can_focus">True</property>
               <property name="invisible_char">●</property>
               <property name="primary_icon_activatable">False</property>
               <property name="secondary_icon_activatable">False</property>
               <property name="primary_icon_sensitive">True</property>
               <property name="secondary_icon_sensitive">True</property>
             </object>
             <packing>
               <property name="expand">True</property>
               <property name="fill">True</property>
               <property name="position">0</property>
             </packing>
           </child>
           <child>
             <object class="GtkRadioButton" id="radiobutton1">
               <property name="label" translatable="yes">radiobutton</property>
               <property name="visible">True</property>
               <property name="can_focus">True</property>
               <property name="receives_default">False</property>
               <property name="active">True</property>
               <property name="draw_indicator">True</property>
             </object>
             <packing>
               <property name="expand">True</property>
               <property name="fill">True</property>
               <property name="position">1</property>
             </packing>
           </child>
           <child>
             <object class="GtkToggleButton" id="togglebutton1">
               <property name="label" translatable="yes">togglebutton</property>
               <property name="visible">True</property>
               <property name="can_focus">True</property>
               <property name="receives_default">True</property>
             </object>
             <packing>
               <property name="expand">True</property>
               <property name="fill">True</property>
               <property name="position">2</property>
             </packing>
           </child>
         </object>
         <packing>
           <property name="x">20</property>
           <property name="y">100</property>
         </packing>
       </child>
     </object>
   </child>
 </object>
</interface>

ver görüntüsüde şu;
https://hizliresim.com/9DkNDo
burdada görüldüğü üzere Glade ile Window a 1 adet buton ardından altına 1 adet Giriş kutusu ve onun altına da bir adet Vbox koydum.. Vbox'ın içinede birkaç widget ekledim düşey olarak.. Şimdi Sorum şu; Ben Glade kullanmadanda bu işlemi GtkD ile yapmaktayım ancak Glade kullanmadan bahsettiğim Vbox u Gladededki gibi default değerler vererek boyutlandıramıyorum. Ama aynı şeyi Glade ile yapabiliyorum ??
Birazdaha açarsak; Glade bu örnekte Vbox kutusunu boyutlandırma şansı verirken ben Gtkd yi herhangi bir IDE kullanarak bunu lade kullanmadan yaptığımda boyutlandırma özelliğini ekleyemiyorum.. zaten gtkd.org adresinde ki referanslardada böyle bir tanım yok ama Glade resimdede görüldüğü üzere bunu ayarlayabiliyor :-(
teşekkürler

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 25, 2017

Bu tam olarak senin yapmak istediğin işi yapıyor sanırım.

import gtk.Ana;
import gtk.AnaPencere;
import gdk.Olay;
import gtk.Paned;
import gtk.Label;

import std.stdio;

class Pencere: AnaPencere
{
   Paned kab;

   this()
   {
       super("Pencereyi bölme");
       this.boyAyarla(200, 100);

       kab = new Paned(YATAY);
       ekle(kab);

       kab.add1(new Label("sol"));
       kab.add2(new Label("sağ"));

       tümünüGöster();
   }
}

void main(string[] seçenekler)
{
   Ana.ilklendir(seçenekler);
   Pencere pencere = new Pencere();
   Ana.çalıştır();
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 25, 2017

Evet Paned modülünü çözdüydüm ama örnek iyi oldu. Yukarda bahsettiğim konu daha farklı birşeydi. Belki de çok iyi ifade edemedim bilemiyorum ama istediğim bir box u Gladede istediğim konumda istediğim çerçeve boyutlarda tanımlandırabilirken ayn şeyi gidipte herhangi bir IDE kullanarak GtkD kütüphanesindeki modüllerle yapamamak! çünkü burada yani GtkD kütüphanesinin Box modülü özelliklerinde böyle bir ayar yok :-) .. Glade ile yaptığım dosyayı IDE ye alıp kullandığımda ise bu dediğim oluyor.. Glade bu özelliği nasıl veriyor onu çözemedim bi türlü.. yukarda verdiğim resimde Layout ile tanımladığım bir alanda bir Box tanımlayıp bu box ın çerçeve boyutlarıyla oynayabilşyor ve değiştirebiliyoruz oysa :-) benim için sinir bi durum.. Belki gtk3 kullanıyordur ve bizim gtk ilintimizin versiyonu düşüktür diyeceğim ama bilemedim...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2017

Sanırım bana "ee artık bir hesap makinası bekliyoruz senden" demiştiniz :blush: ufaktan başladım şimdilik kod bu .. biliyorum çok hızlı yazıldığından düzensiz falan ama yavaş yavaş topralayacağım zaten bunlar ilk adımlar .. Hesap makinam çalışmıyor bile henüz :-) mesela düğme nesnesini dizi şekline getireceğim vesaire.. vesaire..

import gtk.Main;
import gtk.MainWindow;
import gtk.Layout;
import gtk.Label;
import gtk.Entry;
import gtk.Button;
import std.stdio;
import std.conv;

class Pencere : MainWindow
{
	Layout düzen;
	Entry giriş1,giriş2,giriş3;
	Label etiket1;
	Button düğme0,düğme1,düğme2,düğme3,düğme4,düğme5,düğme6,düğme7,düğme8,düğme9,düğme10
                                                                                  ,düğme11,düğme12,düğme13,düğme14,düğme15;

	this()
	{
		super("İlkel Hesap Makinası..");

		düzen = new Layout(null, null);
		etiket1 = new Label("İKİ SAYIYI TOPLUYORUZ..");
		giriş1 = new Entry();
		düğme0 = new Button("0");
		düğme1 = new Button("1");
		düğme2 = new Button("2");
		düğme3 = new Button("3");
		düğme4 = new Button("4");
		düğme5 = new Button("5");
		düğme6 = new Button("6");
		düğme7 = new Button("7");
		düğme8 = new Button("8");
		düğme9 = new Button("9");
		düğme10 = new Button("+");
		düğme11 = new Button("-");
		düğme12 = new Button("*");
		düğme13 = new Button("/");
		düğme14 = new Button(".");
		düğme15 = new Button("=");

		setSizeRequest(250, 275);
		move(100, 100);
		giriş1.setAlignment(1);
		düzen.setSizeRequest(50, 50);
		düzen.put(etiket1, 5, 5);
		düzen.put(giriş1, 10, 25);

		düzen.put(düğme7, 10, 75);
		düzen.put(düğme8, 70, 75);
		düzen.put(düğme9, 130, 75);
		düzen.put(düğme4, 10, 120);
		düzen.put(düğme5, 70, 120);
		düzen.put(düğme6, 130, 120);
		düzen.put(düğme1, 10, 165);
		düzen.put(düğme2, 70, 165);
		düzen.put(düğme3, 130, 165);
		düzen.put(düğme0, 10, 210);
		düzen.put(düğme14, 70, 210);
		düzen.put(düğme15, 130, 210);
		düzen.put(düğme10, 190, 75);
		düzen.put(düğme11, 190, 120);
		düzen.put(düğme12, 190, 165);
		düzen.put(düğme13, 190, 210);
		add(düzen);
		showAll();

		// düğme1.addOnClicked(&topla);
	}


	void topla(Button düğme1)
	{
		writeln("Tıklama oldu"); // fonksiyonun çalışıp çalışmadığının konrolünü sağlamak için vardır.
		etiket1.setLabel("Hesap Makinası v.1.0");
		try {
			int ilk = to!int(giriş1.getText());
			int ikinci = to!int(giriş2.getText());
			auto sonuç = ilk + ikinci;
			giriş3.setText(to!string(sonuç));

		} catch (ConvException hata) {
			// Hatayı bildiriyoruz
			etiket1.setLabel("HATA: İki tamsayı girmelisiniz");
			writeln("Uyarı!! Hata fırlatıldı!!");

		} catch (Exception hata) {
			// Başka çeşit bir hata oluştu
			import std.string : format;
			giriş3.setText(format("HATA: %s", hata.msg));
		}
	}
}

void main(string[] args)
{
	Main.init(args);
	Pencere pencere= new Pencere();
	Main.run();
}

Şimdi sorum şu burda ben herhangi bir düğmeye tıklandığında bir ayrı sınıf yada fonksiyona bu tıklanan düğme numarasını okumak istiyorum .. Burda Event modülümü devreye girer ? Event modülü nasıl kullanılır ? farkındaysanız hesap makinasında herhangi bir düğme tıklandığında birşey yapmıyor.. hangi düğmenin tıklandığını birşekilde öğrenebilirsem o zaman çeşitli irdelemelerle değerleri alıp işlem yaptırabilirim..

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2017

Ufak bir 'örnek' 'yazıyorum'

import gtk.Ana;
import gtk.AnaPencere;
import gtk.Box;
import gtk.Düğme;
import gdk.Olay;

import std.stdio;
import std.format;


class Pencere: AnaPencere
{
   Box yataykutu;
   Düğme düğme;

   this()
   {
       super("Düğme örneği");

       yataykutu = new Box(YATAY, 6);
       this.ekle(yataykutu);

       for (int i = 0; i < 10; ++i)
       {
           auto isim = format("düğme%s", i);
           düğme = new Düğme(isim);
           düğme.tıklandığında(&düğmeyeTıklandı);
           yataykutu.atSepete(düğme, true, true, 0);
       }

       tümünüGöster();
   }

   void düğmeyeTıklandı(Düğme düğme)
   {
       writeln(düğme.getLabel());

   }
}

void main(string[] seçenekler)
{
   Ana.ilklendir(seçenekler);
   Pencere pencere = new Pencere();
   Ana.çalıştır();
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2017

Aynen öyle Ali hocam zaten yazdığınız koda şöyle bir baktığınızda herşey açıkça görülüyor. Bende baktığımda ilk olarak bir dizi tanımlamam gerektiğini ve ardından bunları for döngüleri ile işlemeyi düşünmüştüm :-) Siz hem neredeyse kodu yazdınız hemde beni Foreach döngüsüne yönlendirdiniz.. Bu akşam yada yarın bunları toparlayacağım.. Hatta diyorum butonlar için ayrı bir sınıf tasarlarsam kodlar arasında boğulmamış olurum sanırım onu da düşünmekteyim..
Teşekkürler.. Erdem hocam sizdende Event olayı kullanımı yada işte herhangi bir düğmeye tıklandığında bunu algılyıp işlem yaptırmanın nasıl yapıldığını öğrenirsem gerisi bende (İnşAllah) :-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2017

Alıntı (acehreli):

>

Tabii bunlara gerek yok; yalnızca başka bir yöntem olarak gösterdim.

Aman Ali hocam gerekte olmasın şimdilik çünkü kafam allak bullak olur :-)
Sınıflar ve birkaç konuyu daha özümseyip bitirdikten sonra (yaklaşık 1 ay sonra diyelim) Biraz daha uzmanlık isteyen konulara bakacağım zira ilk hedefim daha öncede yazdığım üzere dosyadan verileri alıp herhangi bir GUI de (Şimdilik GtkD gözüküyor) ekrana yazdırmak ve burdan düzenlemeler yaparak kayıt yapmak.. Ardından bunu birçok dosyadan veriler okuyup programımı büyütmek..
Umarım ben D ile kendimi geliştirene kadar D dili ve kütüphaneleri çöp olup gitmez :-D

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2017

Gösterdiğim kısmın yeterli olabileceğini tahmin ediyorum.

düğmeyeTıklandı() işlevi yerine hesapla() isminde bir işlev olabilir. Bu işlevle basılan tuşun bir rakam mı işleç mi olduğunu tespit edebiliriz. Örneğin kullanıcı 23 girdi.

Rakamsal olduğu için bu değerleri sırayla ekranı temsil eden giriş kutusuna yazdırabiliriz. Sonra + girdi. İşte bu anda giriş kutusundaki değeri bir çift uçlu kuyruğa ekleriz. İşlecimizi de başka bir kuyruğa ekleriz. = tuşuna basıldığı zaman da ilkönce sayılardan başlayarak sırayla bir sayı bir işleç şeklinde hesaplamayı yaptırabiliriz.

http://www.programlama.tk/resim/hesapmakinesi.png

Ali hocanın gösterdikleri şık çözümler. Bir yere notunu almanı tavsiye ederim. Her yerde bulamazsın ;-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2017

Ali Bey sizin dediklerinizi de hafızama katarak şimdilik kod şu şekilde oldu ;

import gtk.Main;
import gtk.MainWindow;
import gtk.Layout;
import gtk.Label;
import gtk.Entry;
import gtk.Button;
import std.stdio : writeln;
import std.string : format;
import std.conv;

class Pencere : MainWindow {
   Layout düzen;
   Entry giriş1,giriş2,giriş3;
   Label etiket1;
   Button[] düğmeler;

   this() {
       super("İlkel Hesap Makinası..");

		struct DüğmeBilgisi {
			string isim;
			int x;
			int y;
		}

		DüğmeBilgisi[] düğmeBilgileri = [
			{ "0", 10, 210 },
			{ "1", 10, 165 },
			{ "2", 70, 165 },
			{ "3", 130, 165 },
			{ "4", 10, 120 },
			{ "5", 70, 120 },
			{ "6", 130, 120 },
			{ "7", 10, 75 },
			{ "8", 70, 75 },
			{ "9", 130, 75 },
			{ "+", 190, 75 },
			{ "-", 190, 120 },
			{ "*", 190, 165 },
			{ "/", 190, 210 },
			{ ".", 70, 210 },
			{ "=", 130, 210 },
		];

       düzen = new Layout(null, null);
       etiket1 = new Label("İLKEL HESAPLAMA YAPIYORUZ..");
       giriş1 = new Entry();

		foreach (d; düğmeBilgileri) {
			düğmeler ~= new Button(d.isim);
			düzen.put(düğmeler[$-1], d.x, d.y);
		}

		// Bileşen Ayarları..
       setSizeRequest(250, 275);
       move(100, 100);
       giriş1.setAlignment(1);
       düzen.setSizeRequest(50, 50);
       düzen.put(etiket1, 5, 5);
       düzen.put(giriş1, 10, 25);

       add(düzen);
       showAll();

		düğmeler[1].addOnClicked(&topla);
   }

   void topla(Button düğme1) {
       writeln("Tıklama oldu"); // fonksiyonun çalışıp çalışmadığının konrolünü sağlamak için vardır.
       etiket1.setLabel("Hesap Makinası v.1.0");
       try {
           int ilk = to!int(giriş1.getText());
           giriş1.setText(to!string(ilk));

       } catch (ConvException hata) {
           // Hatayı bildiriyoruz
           etiket1.setLabel("HATA: İki tamsayı girmelisiniz");
           writeln("Uyarı!! Hata fırlatıldı!!");

       } catch (Exception hata) {
           // Başka çeşit bir hata oluştu
           etiket1.setText(format("HATA: %s", hata.msg));
       }
   }
}

void main(string[] args)
{
   Main.init(args);
   Pencere pencere= new Pencere();
   Main.run();
}

Erdem hocam bugün kendimi biraz övebilirim çünkü hem Ali Hocam hemde sizin yazdıklarınızı aşağı yukarı önceden düşünebilmem sanırım iyi yolda olduğumun bir göstergesi (Gösterge lafı da programlama dilime uydu galiba:-) )

Ufak bir hatırlatma yaparak devam edeyim;

Benim şimdiki sorunum yukarıdaki mesajlarda yazdığım gibi sadece ve sadece (Şimdilik) tıklanmayı nasıl algılayacağım konusu ? Aslında ben her bir düğme için ayrı bir işlevle bunları yaptırabiliyorum ancak benim amacım her bir düğmeye düğme1 sen 1 rakamını temsil ediyosun düğme2 sen 2 rakamını temsil ediyosun diye tanımlamak değil , direk olarak hangi düğmeye basıldığının tespiti konusu!.. Yani anladığım kadarıyla bir Event var ortada belkide sinyal diyelim.. Burda diyelimki düğme4 tıklandı işte bana bir şey o veriyi vermeli ki bende tek işlevle konuyu halledeyim :-). gtkd.org sitesine baktığımda onButtonClicked(), addOnButtonClicked() gibi işlevler var ama bunu kullanmayı şimdilik başaramadım ..
bu arada resim ve açıklama güzel oldu bunun için ayrıca sağol varol ..

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2017

Gözüme ilk çarpan, düğme dizisi ;) oldu. Düğmelerin isimlerini ve konumlarını bir araya getiren şöyle bir yapı ile başlayabilirsin:

struct DüğmeBilgisi {
   string isim;
   int x;
   int y;
}
// ...
DüğmeBilgisi[] düğmeBilgileri = [
   { "0", 10, 210 },
   { "1", 10, 165 },
   // ...
];
// (Belki konumları da otomatik olarak hesaplayabilirsin.)

Ondan sonra her birisini bir düğmeye çevirirsin:

Button[] düğmeler;
// ...
foreach (d; düğmeBilgileri) {
   düğmeler ~= new Button(d.isim)
   düzen.put(düğmeler[$-1], d.x, d.y);
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]