[LinuxFocus-icon]
<--  | Ev  | Eri�imd�zeni  | ��indekiler  | Arama

Duyumlar | Belgelikler | Ba�lant�lar | LF Nedir
Bu makalenin farkl� dillerde bulundu�u adresler: English  Castellano  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  

Ozcan Gungor
taraf�ndan �zcan G�ng�r
<ozcangungor(at)netscape.net>

Yazar hakk�nda:
1997'den beri Linux kullan�yorum.�zg�rl�k, esneklik ve a��k-kod Linux'ta en sevdi�im �zelliklerdir.
��erik:

 

GTK ile GUI Programlama - 2

GTK

�zet:

Makale dizisinin bu ikinci b�l�m�nde, kutulardan ve tablolardan bahsedece�iz.Bunlarla bile�enlerin penceredeki yerlerini belirleyece�iz.Bu makaleyi anlamak i�in C'de a�a��daki konular�n bilinmesi gerekmektedir:

  • De�i�kenler
  • Fonksiyonlar
  • ��aret�iler (Pointers)
Ve ayr�ca dizinin ilk say�s�n�n okunmas�, bu makalenin anla��lmas� a��s�ndan faydal� olacakt�r.

_________________ _________________ _________________

 

Bile�enlerin Kutular ile Paketlenmesi

Bile�enlerin paketlenmesi, bile�enlerin pencerenin neresinde hangi s�rada bulunaca��n�n belirlenmesi demektir. GTK ile bunu yapman�n yollar�ndan biri kutular� kullanmakt�r. Kutular�n temel prensibi, bile�enlerin yatay veya dikey olarak istenen s�rada bulunmalar�n� sa�lamakt�r. �ki �e�it kutu vard�r: Yatay kutular ve dikey kutular. �imdi bunlar� a��klayal�m.

 

Yatay Kutular

Bu kutularda bile�enler, yatay olarak dizilir ve g�sterilir. Yatay bir kutuyu �u �ekilde olu�tururuz:

gtk_widget *kutu;
kutu=gtk_hbox_new(gboolean homojen, gint bosluk);

Burada homojen parametresi, bile�enlerin yatay kutu i�erisinde homojen �ekilde da��l�p da��lmayaca��n� belirler.E�er bu de�er TRUE ise bile�enler homojen olarak da��l�r; FALSE ise bile�enler yan yana durur. bosluk parametresi ise iki bile�en aras�ndaki bo�lu�un uzunlu�unu g�stermektedir.

 

Dikey Kutular

Bu t�r kutularda bile�enler, dikey olarak dizilirler ve g�sterilir. Dikey bir kutuyu �u �ekilde olu�tururuz:

gtk_widget *kutu;
kutu=gtk_vbox_new(gboolean homojen, gint bosluk);

Parametrelerin anlamlar� yatay kutudakilerle ayn�d�r.

 

Kutular�n Ortak �zellikleri

Kutulara bile�en eklemenin iki yolu vard�r: Birincisi

gtk_box_pack_start(GtkBox *kutu,GtkWidget *cocuk,
            gboolean genislet, gboolean doldur, guint dolgu);
fonksiyonunu kullanmaktad�r. Bu fonskiyon ile bile�enleri, yatay kutunun hep solundan, dikey kutunun hep �st�nden ekleriz.kutu parametresi, bile�enin eklenece�i kutunun ad�d�r. cocuk, eklenecek olan bile�endir. geni�let, bile�eninin kendisine kalan bo�lu�un ortas�na yerle�tirilmesini; doldur, bile�enin kendisine ait bo�lu�un tamam�n� doldurmas�n� sa�lar.dolgu ise bile�enin sa��nda ve solundan belirtilen de�er kadar bo�luk b�rak�lmas�n� sa�lar.

Di�er yol ise

gtk_box_pack_end(GtkBox *kutu,GtkWidget *cocuk,
          gboolean genislet, gboolean doldur, guint dolgu);
fonksiyonudur. Bu fonksiyon ile bile�enleri kutular�n hep sonuna ekleriz. Parametreler, �nceki fonksiyonunkiler ile ayn�d�r. Kutular, ba�ka kutularla paketlenebilir.

Bir kutuyu penceye eklemek i�in

gtk_container_add (GtkContainer	*container,GtkWidget *bilesen);
fonksiyonu kullan�l�r. container, kutunun eklenece�i pencere ve bilesen, kutunun ad�d�r.�rne�in yukar�da olu�turdu�umuz bir kutuyu pencere'ye eklemek i�in
gtk_container_add(GTK_CONTAINER(pencere),kutu);
sat�r� yeterlidir.
gtk_box_set_homogeneous (GtkBox *kutu, gboolean homojen);
gtk_box_set_spacing(GtkBox *kutu, gint bo�luk);
fonksiyonlar�dan birincisi kutunun homojen �zelli�ini, ikincisi ise bo�luk �zelli�ini de�i�tirmektedir. Parametrelerin anlamlar�, kutular� olu�turan fonksiyondakilerle ayn�d�r. kutu parametresi ise �zelli�ini de�i�tirmek istedi�imiz kutunun ismidir.
gtk_box_set_child_packing(GkBox *kutu,GtkWidget *cocuk,
    gboolean genislet, gboolean  doldur, guint dolgu,
    GtkPackType paketleme_tipi);
fonksiyonu ise bir bile�enin paketlenme �zelliklerini de�i�tirir. Parametlerin anlamlar�, bile�enleri ekleyen fonksiyonlardakilerle ayn�d�r. paketleme_tipi, GTK_PACK_START, GTK_PACK_END de�erlerini alabilir. GTK_PACK_START, e�er bile�en gtk_pack_start ile paketlenmi� ise de�i�iklik olmaz. Ancak bile�en gtk_pack_end ile paketlenmi� ise bile�en en ba�a ge�er. GTK_PACK_END, bile�en gtk_pack_end ile paketlenmi� ise bir de�i�iklik yapmaz. Ancak gtk_pack_start ile paketlenmi� ise bile�eni kutudaki son bile�en yapar.

Burada anlat�lanlar� daha iyi anlamak i�in kutular.c program�n� �al��t�r�p denebilirsiniz.  

Tablolar

Tablolar, HTML tablolar�nda oldu�u gibi, bile�eni istenilen b�lgeye yerle�tirmemize yard�mc� olur. Bunun i�in istenilen say�da sat�r ve s�tunu olan bir tablo olu�turur ve istedi�imiz h�creye veya h�crelere (sadece yanyana veya altalta olan h�creler i�in ge�erli) bile�eni yerle�tiririz. Bir tablo olu�turmak i�in �u sat�rlar yeterli:

GtkWidget *tablo;
tablo=gtk_table_new(guint sat�r, guint sutun, gboolean homojen);
sat�r, tablonun sat�r say�s�; sutun, s�tun say�s�d�r. homojen, h�crelerin �l��lerinin korunup korunmayaca��n� belirler. Bu de�er TRUE ise de�erler korunur, FALSE ise korunmaz.

Bile�enlerin eklenmesi i�in

void gtk_table_attach (GtkTable *tablo, GtkWidget *cocuk,
         guint sol_hucre, guint sag_hucre, guint ust_hucre,

guint alt_hucre, GtkAttachOptions xsecenegi, GtkAttachOptions ysecenegi, guint xdolgusu, guint ydolgusu);
tablo, bile�enin eklenece�i tablo; cocuk, eklenecek bile�endir. sol_hucre, bile�enin kaplayaca�� en soldaki h�cre numaras�; sag_h�cre, bile�enin kaplayaca�� en sa�daki h�cre numaras�d�r. Yukar�da da belirtti�im gibi, bile�en yanyana birden fazla h�creyi kaplayabilir. ust_hucre, bile�enin kaplayaca�� en �stteki h�cre numaras�; alt_hucre, bile�enin kaplayaca�� en alttaki h�cre numaras�d�r.Bile�enler altalta olan birden fazla h�creyi kaplayabilirler.

xsecenegi ve ysecenegi, �� farkl� de�er alabilir: GTK_FILL, GTK_EXPAND, GTK_SHRINK. GTK_FILL, bile�enin butun h�creyi doldurmas�n� sa�lar. �rne�in bir normal d��me, h�crenin tamam�n� kaplar. GTK_EXPAND, bile�enin h�crenin ortas�nda durmas�n� sa�lar. GTK_SHRINK, bile�en h�crenin boyundan b�y�k ise bile�eni h�crenin boyutlar�na k���lt�r. xsecenegi, bu de�i�ikleri sadece x ekseni boyunca; ysecenegi, y ekseni boyunca de�i�iklikleri yapar.

xdolgusu, x ekseni boyunca bile�enin �evresine bu de�er kadar bo�luk konulmas�n� sa�lar.Ayn� �ekilde, ysecenegi, y ekseni boyunca bo�luk b�rak�r.

A�a��da �rnek bir program vard�r:

#include <gtk/gtk.h>

void delete_event( GtkWidget *widget,GdkEvent  *event,gpointer data )
{
    gtk_main_quit ();
}

int main( int   argc,char *argv[] )
{
    GtkWidget *window;
    GtkWidget *button;
    GtkWidget *table;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    gtk_signal_connect (GTK_OBJECT (window), "delete_event",GTK_SIGNAL_FUNC (delete_event), NULL);

    table = gtk_table_new (2, 2, TRUE);

    gtk_container_add (GTK_CONTAINER (window), table);

    button = gtk_button_new_with_label ("button 1");
    gtk_table_attach(GTK_TABLE(table), button, 0, 1, 0, 2,GTK_SHRINK,GTK_SHRINK,0,0);
    gtk_widget_show (button);

    button = gtk_button_new_with_label ("button 2");
    gtk_table_attach (GTK_TABLE(table), button, 1, 2, 1, 2,GTK_SHRINK,GTK_SHRINK,0,0);
    gtk_widget_show (button);

    button = gtk_button_new_with_label ("button 3");
    gtk_table_attach (GTK_TABLE(table), button, 1, 2, 0, 1,GTK_SHRINK,GTK_SHRINK,0,0);
    gtk_widget_show (button);

    gtk_widget_show (table);
    gtk_widget_show (window);

    gtk_main ();

    return 0;
}

Bu fonksiyondaki bu kadar �ok parametre olmas�, yeni bir fonksiyon olu�mas�na neden olmu�.Bu fonksiyon da bile�eni tabloya ekler ama daha az parametre kullan�r.

void gtk_table_attach_defaults (GtkTable *tablo,GtkWidget *bilesen,
         guint sol_hucre, guint sag_hucre, guint ust_hucre, guint alt_hucre);
�stenen parametreler, gtk_table_attach fonksiyonundakilerle ayn�d�r. Eksik olan parametereler yerine varsay�lan de�erler kullan�l�r. xsecene�i'nin ve ysecenegi'nin varsay�lan de�eri GTK_FILL|GTK_EXPAND 'dir. xdolgusu ve ydolgusu'nun varsay�lan de�eri ise 0'd�r.

A�a��daki fonksiyon ile var olan bir tablonun sat�r ve s�tun say�s�n� de�i�tirebilirsiniz:

void gtk_table_resize(GtkTable *tablo, guint sat�r, guint sutun);

A�a��daki fonksiyonlarda �stteki, belirtilen bir sat�r�n, ikincisi belirtilen bir s�tunun bo�luk de�erini de�i�tirir:

void gtk_table_set_row_spacing (GtkTable *tablo, guint sat�r, guint bosluk);
void gtk_table_set_col_spacing (GtkTable *tablo, guint sutun, guint bosluk);

A�a��daki fonksiyonlardan �stteki tablodaki b�t�n sat�rlar�n, alttaki ise b�t�n s�tunlar�n bo�luk de�erini de�i�tirir:

void gtk_table_set_row_spacings (GtkTable *tablo, guint bosluk);
void gtk_table_set_col_spacings (GtkTable *tablo, guint	bosluk);

A�a��daki fonksiyon bir tablonun homojenlik �zelli�ini de�i�tirir:

void gtk_table_set_homogeneous (GtkTable *tablo, gboolean homojen);
 

�zet

Bu makalede, GTK'da bile�enlerin paketlenme �e�itleri olan kutular� ve tabloyu ��rendik. �e�itli �zelliklerini de�i�tiren fonksiyonlar� g�rd�k. Herhangi bir sorunuz veya �neriniz olursa bana iletebilirsiniz. Kolay gelsin...


 

Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz

Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
 talkback page 

<--, Bu say�n�n ana sayfas�na gider

G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© �zcan G�ng�r, FDL
LinuxFocus.org
�eviri bilgisi:
tr --> -- : �zcan G�ng�r <ozcangungor(at)netscape.net>

2003-06-18, generated by lfparser version 2.39