C#nedir?com
 
YAZAR HAKKINDA
Caner Şahan
Caner Şahan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
24 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: .glade clicked derledigimiz glade’in islemi kaynak kodlar kodumuza kullandigimiz public resource serilizasyon serilizasyonu uzayinin window Mono ve .NET Caner Şahan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : Mono ve .NET
Yayınlanma Tarihi : 18.11.2004
Okunma Sayısı : 18985
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer 'in Blogu
ChatBot UI Sample 16.12.2017
Turhal Temizer 'in Blogu
C# – IRR Function 16.12.2017
Burak Selim Şenyurt
JWT(JSON Web Token) Kullanımı 16.12.2017
Burak Selim Şenyurt
Apache Kafka ile Konuşmaya Çalışmak 16.12.2017
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Mono ile Glade Kullanımı
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Mono ile program geliştirirken her şeyi container kontrollerinin kodları ile geliştirmemiz beklenemez. Zaten böyle bir yaklaşım hem anlamsız hem de zaman alıcı olur. Bu yüzden Mono ile form uygulamaları geliştiriken Linux’ta GUI(Graphical Unit Interface)’leri düzenlemek için kullanılan Glade kütüphanelerini kullanacağız. Şunu kesinlikle aklımızdan çıkarmamalıyız:Eğer Gnome,KDE gibi masaüstü yöneticilerine görsel program geliştiriyorsak Glade olmazsa olmazlar arasındadır. Bu yüzden ilk önce Glade’in ne olduğunu incelememiz gerekir. Glade nedir?



Glade’in logosundan da gördüğünüz gibi gtk+ için arayüz tasarlamadan bahsediyor. Gtk+ gnome için kullandığımız button, label, ve window gibi kontrollerden başka bir şey değil. Fakat aklımıza şöyle bir soru gelebilir. Biz mono’da Gtk# kullanmıyor muyuz? Evet biz mono’da gtk# kullanıyoruz ama gtk# ,gtk+’dan farklı bir yapı değil. Gtk+’ın gelişmiş bir versiyonu olarak düşünebiliriz.

Glade’in çalışma mantığı System.Windows.Form isim uzayının kullanımından biraz farklı. Sonuçta biz windows formu kullandığımız zaman System.Windows.Form kütüphanesini referans olarak belirtiyoruz. Kullanmak istediğimiz kontrle ait nesneyi kaynak kod içinde yaratıp kullanıyoruz. Bu gerçekten kullanım açısından şu andaki en kullanışlı durum. Glade ile arayüzü designer kısmında tasarladıktan sonra bu arayüzü derliyoruz. Dikkat ederseniz derliyoruz diyorum, çünkü gtk+ kontrollerinin de bir kaynak kodu var. Bu kaynak kodlar şu an için C/C++,Ada95, Python & Perl dillerinde mevcut. Fakat bunların hangi dilde derlendiğinden çok bizim kullandığımız programlama dilinin glade’e desteğinin olup olmaması önemli. Peki destekten neyi kastediyoruz? Glade ile derlediğimiz kaynak kodlar kendisine Xml’den oluşmuş bir harita da oluşturur. Bu harita sayesinde kaynak kodumuz içinde kullandığımız sınıfı üzerinde serilizasyon işlemi gerçekleştirerek bu işlemi yaparız. Bu serilizasyon işlemini nasıl gerçekleştiriyoruz dediğinizi duyuyorum. Bunun için mono ile gelen Glade isim uzayının XML sınıfının autoconnect methodunu kullanarak kolay bir şekilde gerçekleştiriyoruz. Bu işlemleri adım adım diğer bölümde gerçekleştireceğiz.Burada önemli olan çalışma mantığını anlamamızdır.

Glade ile Programımızı Geliştiriyoruz:



Eğer kullandığınız linuxta glade yüklü değilse http://glade.gnome.org/download.html adresine girerek ücretsiz olarak glade’i elde edebilirsiniz. Glade’i ilk açtıktan sonra New project kısmını seçip yeni bir proje açalım. Bu ekranda proje tipinin GTK+ mı yoksa GNOME’mu olduğu sorulmaktadır.



Gtk+ ile uygulama geliştireceğimiz için yeni bir Gtk+ projesi açalım. Açtığımız projede artık tasarıma başlayabiliriz.Tasarıma başlamadan önce bir Window eklememiz gerekli. Bunun için palette menusunden aşağıdaki gibi window ekleyelim.



Bu window’a ekleyeceğimiz her kontrol’ün hizalarını VBox(vertical box) ve HBox(horizantol box) koyarak ayarlıyoruz. VBox ile dikey sutunlar, HBox ile yatay satırlar oluşturuyoruz.VBox ve HBox’lar buttonları, labelleri içerisinde taşıyarak görünümü ayarlamamızı sağlar. VBox’ın ve HBox’ın özelliklerini rahatlıkla ayarlayabilmemizi sağlayan properties penceresi ise aşağıdaki gibidir.



Gerekli ekran tasarımını yaptıktan sonra formumuz(yani window’umuz)aşağıdaki şekli aldı.



Glade ile yazılım geliştirirken en fazla kullandığımız özelliklerden birisi de sinyaller yani windows’taki adıyla event’ler. Event’leri de signals kısmından ekleyerek Handler’ımızı ve kullanacağımız olayı ekliyoruz. Mesela örneğimizdeki button’a clicked eventini aşağıdaki gibi ekliyoruz.



Sinyal eklerken dikkat etmemiz gereken bir nokta var; eğer eklediğimiz sinyalin handler’ ını kaynak kod içinde bulamazsa uygulama serilizasyonu tamamlayamadan hata verir. Bu yüzden kullandığımız her sinyalin mutlaka eventini belirtmemiz gerekir. Evet button’a clicked event’ini de eklediğimize göre artık geliştirdiğimiz glade uygulamasını derleyebiliriz.





İstersek kaynak kodların hangi dil ile derleneceğini seçebiliriz. Ama biz burada XML serilizasyonu yapacağımız için glade arayüzünün kaynak kodları bizi pek ilgilendirmiyor. Derlediğimiz kaynak kodlar beraberinde bir XML dosyası oluşturuyor demiştik. İşte bu dosya .glade uzantılı dosyadır. Bu dosya ile serilizasyon işlemini gerçekleştireceğiz. Evet şimdilik glade ile işimiz bitti. Şimdi monodevelop IDE’mizden bir glade uygulaması açarak programımızın içini dolduralım.



Monodevelop ile açtığımız glade projesi beraberinde resource’lara default(varsayılan) bir .glade dosyasını eklemektedir. Bu uygulamayı derlediğimiz zaman boş bir pencerenin açılacağını görebiliriz. Varsayılan olarak gelen bu .glade dosyasını kaldırıp yerine daha önce glade ile hazırlayıp derlediğimiz dosyayı resource dosyalara ekliyoruz.



Evet resource Files kısmına kendi .glade dosyamızı ekledikten sonra XML serilizasyonunu yapacak kodumuzu inceleyelim. Bu işlemi Mono’daki Glade isim uzayının metotlarını kullanarak yapacağız. Bunun için using Glade ifadesini aşağıdaki gibi eklememiz gerekir.

using System;
using Gtk;
using Glade;

public class GladeApp
{
         public static void Main(string[] args)
         {
             new GladeApp(args);
         }
         public GladeApp(string[] args)
         {
             Application.Init();
             Glade.XML gxml=new Glade.XML(null,"makale_glade.glade","window1",null);
             gxml.Autoconnect(this);
             Application.Run();
         }
         public void OnWindowDeleteEvent(object o,DeleteEventArgs args)
         {
             Application.Quit();
             args.RetVal=true;
         }
}
makale_glade.glade arayüzünü kodumuza bağlarken, Glade isimuzayının XML class’ının resource olarak belirttiğimiz glade dosyasınının ismini string olarak giriyoruz. Diğer parametreler ise (System.Reflection.Assembly,"glade ismi.glade","window ismi","belirleyici adres"). Burada bizim sadece glade ismi yazan kısma kendi glade projemizin ismini girmemiz yeterli. Daha sonra yarattığımız nesnenin autoconnect metoduna this anahtar kelimesini parametre olarak vererek bu arayüzü bağlamış oluyoruz. Uygulamayı bu hali ile derleyip çalıştırırsak aşağıdaki sonuç ile karşılaşırız.



Peki neden hata aldık? Exception(istisna)’ı incelersek handler bulamadığından bahsetmekte. Hatırlarsanız glade projesini hazırlarken, buttonun clicked eventine bir metot bağlamıştık. Ama bu event’e ilişkin metodu kaynak kodumuz içinde belirtmedik. Bu durum XML serilizasyonu sırasında ilgili event’e ilişkin metot bulunmadığından bir exception oluşmasına neden oldu ve uygulamamızın çalışması durdu. Bu yüzden aşadaki metodu kaynak kodumuza ekleyerek bu hatayı önlüyoruz.

void on_OK_clicked(object o,EventArgs args)
{ //kodlar

}
Glade ile oluşturduğumuz projede clicked eventi meydana geldiğinde çalaşacak metodun ismi on_OK_clicked olduğu için aynı ismi kodumuzda da kullanmak zorundayız. Diyelimki on değilde On şeklinde bir kullanım yaparsak sonuç olumsuz olacaktır. Kaynak kodumuza eklediğimiz event’e ilişkin metottan sonra projemizi derledikten sonra aşadaki gibi bir görüntü elde ederiz.



Evet ,glade ile tasarladığımız arayüzü programımızda kullanmayı başardık. Diyelim ki isim kısmındaki Entry’den değer almak istersek bu Entry hangisi gibi bir soru aklımıza gelmesi doğaldır. Bu işlemide serilizasyon sırasında belirttiğimiz Entry’ler ile sağlıyoruz şöyle ki:

using System;
using Gtk;
using Glade;

public class GladeApp
{          [Widget]Gtk.Button OK;
           [Widget]Gtk.Window window1;
           [Widget]Gtk.Entry entry1;
           [Widget]Gtk.Entry entry2;

         public static void Main(string[] args)
         {
             new GladeApp(args);
         }

        public GladeApp(string[] args)
         {
             Application.Init();
             Glade.XML gxml=new Glade.XML(null,"makale_glade.glade","window1",null);
             gxml.Autoconnect(this);
             Application.Run();
         }

        void on_OK_clicked(object o,EventArgs args)
        {
             window1.Title=entry1.Text+" "+entry2.Text;
             entry1.Text="isim windowun başlığında";
             entry2.Text="soyad windowun başlığında";
             OK.Label="Bitti";
        }

}

}
Gördüğümüz gibi serilizasyona koyduğumuz widget’lere niteliklerini kazandırdık. Widget’lerin isimleri glade içinde hazırladığımız isimler ile aynı olmak zorundadır. Ayrıca glade ile hazırladığımız arayuzde bulunmayan bir widgeti serilizasyona katarsak bu widgetin nitelik kazanmayacağı açıktır.

Programın bitmiş kodlarını derleyip çalıştırdığımız zaman sonuç olarak;





Mono ile Glade’in kullanımı bir hayli kolaylaşmış durumda.Fakat ilerleyen zamanlarda Glade’in monodevelopa entegrasyonu sağlandığında daha verimli çalışmasını beklemekteyim.

Makale:
Mono ile Glade Kullanımı Mono - Linux'ta .NET Caner Şahan
  • Yazılan Yorumlar
  • Yorum Yaz
EKİ
21
2005
arkadaşım bunun windows versiyonu hakkında da biraz bilgi verirsen sevinirim.Şimdiden teşekkürler
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor