Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
C / Sys Prog.
Genel
Mono ve .NET
Silverlight
XML / Web Serv.
X86 Assembly
C++ / C++.NET
J#.NET / Java
.NET 3.x
UML / Analiz
Yazılım Müh.
ASP.NET
C# / VC#/.NET
Mobil Prog.
PHP 5
YAZAR HAKKINDA
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ı
:
30142
Yorum Sayısı
:
1
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Burak Selim Şenyurt
Bellek Yönetiminde Verimlilik için İpuçları (Rust Odaklı)
15.5.2025
Burak Selim Şenyurt
Rust ve Güvenli Bellek Yönetimi Hakkında
15.5.2025
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
Mono ve .NET
/
Mono ile Glade Kullanımı
Mono ile Glade Kullanımı
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
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
Mukan Tr
/
üye hakkında
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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl