|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English Castellano Deutsch Francais Italiano Nederlands Russian Turkce |
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�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:
|
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.
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.
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.
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, 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,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.
guint alt_hucre, GtkAttachOptions xsecenegi, GtkAttachOptions ysecenegi, guint xdolgusu, guint ydolgusu);
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);
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...
|
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:
|
2003-06-18, generated by lfparser version 2.39