ein Kapitel zurück                                           ein Kapitel weiter

GtkEntry ist eine einfache einzeilige Texteingabebox. Erzeugen können sie diese mit folgenden Funktionen:

GtkWidget *gtk_entry_new(void);  

...oder...

GtkWidget *gtk_entry_new_with_max_length(guint16 max);  

Die erste Version dürfte klar sein. Bei der 2. Version können sie als Parameter angeben, wie viele Zeichen maximal in der Textbox mitangegeben werde dürfen.

Wollen sie den Inhalt der Eingabebox schon mit einem Text belegen, dann verwenden sie diese Funktion:

void gtk_entry_set_text(GtkEntry *entry, const gchar *text);  

Auslesen können sie den Text aus der Textbox mit der Funktion:

gchar *gtk_entry_get_text(GtkEntry *entry);  

Nun wollen wir uns doch mal ein Programmbeispiel dazu ansehen:

/*Download:gtkent.c*/

#include <gtk/gtk.h>

/*Programmende*/
void ende_cb(GtkObject *object)
{
 gtk_main_quit();
}

/*Ende vom 2.Fenster welches die Eingabe ausgibt*/
void ende_cb2(GtkWidget *widget, gpointer *data)
{
 gtk_widget_destroy(GTK_WINDOW(widget));
}

/*Inhalt von Entry leeren*/
void delete_text_cb(GtkWidget *widget, gpointer *data)
{
 gtk_entry_set_text(GTK_ENTRY(widget),"");
}

/*Inahlt von Entry auslesen und in einem neuem Fenster ausgeben*/
void read_text_cb(GtkWidget *widget, gpointer *data)
{
 GtkWidget *fenster2;
 GtkWidget *label;

 gchar *text=gtk_entry_get_text(GTK_ENTRY(widget));
 g_print("%s\n",text);

  /*Ein neues Fenster erstellen*/
 fenster2 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 label = gtk_label_new(text);

 gtk_signal_connect(GTK_OBJECT(fenster2), "destroy",
                    GTK_SIGNAL_FUNC(ende_cb2), NULL);

 gtk_container_add(GTK_CONTAINER(fenster2),label);

 /*Zeigs uns.....*/
 gtk_widget_show_all(fenster2);

}


int main(int argc, char **argv)
{
 GtkWidget *fenster;
 GtkWidget *box;
 GtkWidget *button_quit, *button, *button2;
 GtkWidget *entry;

 /*Gtk initialisieren*/
 gtk_init(&argc, &argv);
 /*Ein neues Fenster erstellen*/
 fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 /*Buttons erstellen*/

 button_quit  = gtk_button_new_with_label("Ende");
 button       = gtk_button_new_with_label("Text löschen");
 button2      = gtk_button_new_with_label("Text einlesen");

 entry        = gtk_entry_new_with_max_length(50);
 gtk_entry_set_text(GTK_ENTRY(entry),"Hier bitte Eingabe machen");

 /*Neue Box erstellen*/
 box = gtk_vbox_new(FALSE,0);


 /*Signale registrieren*/
 gtk_signal_connect_object(GTK_OBJECT(button_quit), "clicked",
                           GTK_SIGNAL_FUNC(ende_cb), GTK_OBJECT(fenster));
 gtk_signal_connect(GTK_OBJECT(fenster), "destroy",
                    GTK_SIGNAL_FUNC(ende_cb), NULL);
 gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                           GTK_SIGNAL_FUNC(delete_text_cb), GTK_OBJECT(entry));
 gtk_signal_connect_object(GTK_OBJECT(button2), "clicked",
                           GTK_SIGNAL_FUNC(read_text_cb), GTK_OBJECT(entry));


 /*Fensterposition*/
 gtk_window_set_position(GTK_WINDOW(fenster),GTK_WIN_POS_CENTER);

 gtk_container_set_border_width(GTK_CONTAINER(fenster),25);

 gtk_box_pack_start(GTK_BOX(box), entry, FALSE, FALSE, 10);
 gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box), button2, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box), button_quit, FALSE, FALSE, 0);


 gtk_container_add(GTK_CONTAINER(fenster),box);

 /*Zeigs uns.....*/
 gtk_widget_show_all(fenster);

 gtk_main();

 return 0;
}

Und so könnte es aussehen:




Ich denke das Programm ist nicht schwer zu verstehen. Nun will ich hier noch weiter nützlich Funktionen erwähnen. Wollen sie einen Text an einem bereits vorhandenen Text in der Eingabebox vorne einfügen oder hinten anfügen so können sie dies mit den Funktionen:

void gtk_entry_append_text(GtkEntry *entry, const gchar *text); /*hinten anhängen*/
void gtk_entry_prepend_text(GtkEntry *entry, const gchar *text);/*vorne einfügen*/  

Wollen sie den Cursor an eine bestimmten Position positionieren:

void gtk_entry_set_position(GtkEntry *entry, gint position);  

Oder wollen sie einen bestimmten Bereich markieren:

void gtk_entry_select_region(GtkEntry *entry, gint start, gint end);  

Hiermit markieren sie den Text in der Eingabebox von der Position start bis zur Position end.

Wenn der Text nicht mehr verändert werden soll können sie dies mit dieser Funktion erreichen:

void gtk_entry_set_editable(GtkEntry *entry, gboolen editable);  

Geben sie als 2.Paramter FALSE an, ist die Box gesperrt. Mit TRUE beheben sie diese wieder.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf