Login
Newsletter
Werbung

Do, 16. März 2000, 00:00

GTK-Workshop VI: Scrollbars und Textboxes

Das war es zu den TextBoxen *puh*... jetzt zu den Scrollbars :-) Hören Sie am besten auf mit Lesen, entspannen Sie die Augen und lesen Sie an dieser Stelle in einer Stunde weiter. Sie sollten sich erst einmal mit ein bißchen Q***e abreagieren ;-)

Zu Scrollbars gibt es nicht viel zu sagen: man braucht ein vorgefertigtes Adjustment (z.B. das, was eine Textbox automatisch erstellt), ansonsten gibt es nur zwei Funktionen dafür. Und Signale tun die auch keine zurückwerfen, da das von den Adjustments schon gemacht wird. An dieser Stelle will gesagt sein, daß die Adjustments, die von TextBoxen erstellt werden, immer folgendermaßen heißen: das Adjustment zum vertikalen Scrollen heißt die_textbox->vadj und das Adjustment zum horizontalen Scrollen heißt die_textbox->hadj... Und jetzt: Werbung! ;-) Nein, wir machen weiter. Jetzt kommen wir richtig zur Sache:

Scrollbars erstellen

Um eine vertikale Scrollbar zu erstellen, benutzen Sie:

GtkWidget* gtk_vscrollbar_new (GtkAdjustment *adjustment);

Um eine horizontale Scrollbar zu erstellen, benutzen Sie:

GtkWidget* gtk_hscrollbar_new (GtkAdjustment *adjustment);

Bei beiden gilt: adjustment ist ein vorher erstelltes GtkAdjustment, oder eines, welches von einem anderen GtkWidget erstellt wurde. Und das war es schon... jetzt kommt ein

Großes Beispiel

Das Beispiel ist hier herunterzuladen.

#include <gtk/gtk.h>
int print_cb (GtkText *text)
{
 gchar *tmpstr;
 /* Der gesamte Inhalt der Textbox wird
 in "tmpstr" gespeichert */
 tmpstr = gtk_editable_get_chars (GTK_EDITABLE (text), 0,
 gtk_text_get_length (GTK_TEXT (text)));
 /* und er wird auf das Terminal geschrieben */
 g_print ("%s\n", tmpstr);
}
int main (int argc, char *argv[])
{
 GtkWidget *window;
 GtkWidget *text;
 GtkWidget *scroll;
 GtkWidget *table;
 GtkWidget *copybutton;
 GtkWidget *pastebutton;
 GtkWidget *printbutton;
 gtk_init (&argc, &argv);
 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 gtk_window_set_title (GTK_WINDOW (window),
 "GtkText-Beispiel by RvB");
 gtk_window_set_default_size( GTK_WINDOW( window ), 400, 200);
 /* Wir erstellen ein paar Buttons */
 copybutton = gtk_button_new_with_label ("Kopieren");
 pastebutton = gtk_button_new_with_label ("Kleben");
 printbutton = gtk_button_new_with_label ("Ausgeben");
 /* Hier wird die Textbox erstellt.
 dadurch, daß die letzten zwei Parameter
 NULL sind, erstellt die Textbox ihre eigenen
 Adjustments. Hier könnten wir aber auch
 anstatt NULL richtige Adjustments angeben */
 text = gtk_text_new (NULL, NULL);
 /* erst wird das GtkText-Widget gefroren */
 gtk_text_freeze (GTK_TEXT (text));
 /* und wir geben auch einen text vor */
 gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL,
 "Gtk-Workshop von Pro-Linux\n\
Autor: RvB <RvB@pro-linux.de>", -1);
 /* jetzt sorgen wir dafür, daß man was eingeben kann :-) */
 gtk_text_set_editable (GTK_TEXT (text), TRUE);
 /* word wrap an! */
 gtk_text_set_word_wrap (GTK_TEXT (text), TRUE);
 /* Jetzt wird der Cursor irgendwo in die Botanik
 geschickt */
 gtk_text_set_point (GTK_TEXT (text), 30);
 /* Jetzt wird die TextBox wieder aufgetaut */
 gtk_text_thaw (GTK_TEXT (text));
 /* wir erstellen eine vertikale Scrollbar
 und weisen ihr das Textbox-Interne Adjustment
 für die vertikale Position zu */
 scroll = gtk_vscrollbar_new (GTK_TEXT (text)->vadj);
 /* Widgets ausrichten */
 table = gtk_table_new (2, 4, FALSE);
 gtk_table_attach (GTK_TABLE (table), text, 0, 3, 0, 1,
 GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 2, 0);
 gtk_table_attach (GTK_TABLE (table), scroll, 3, 4, 0, 1,
 GTK_FILL, GTK_FILL, 0, 0);
 gtk_table_attach (GTK_TABLE (table), copybutton, 0, 1, 1, 2,
 GTK_FILL, GTK_FILL, 0, 0);
 gtk_table_attach (GTK_TABLE (table), pastebutton, 1, 2, 1, 2,
 GTK_FILL, GTK_FILL, 0, 0);
 gtk_table_attach (GTK_TABLE (table), printbutton, 2, 3, 1, 2,
 GTK_FILL, GTK_FILL, 0, 0);
 /* Jetzt kommen die Signal-Handler */
 gtk_signal_connect_object( GTK_OBJECT( copybutton ), "clicked",
 GTK_SIGNAL_FUNC( gtk_editable_copy_clipboard ),
 GTK_OBJECT( text ) );
 gtk_signal_connect_object( GTK_OBJECT( pastebutton ), "clicked",
 GTK_SIGNAL_FUNC( gtk_editable_paste_clipboard ),
 GTK_OBJECT( text ) );
 gtk_signal_connect_object( GTK_OBJECT( printbutton ), "clicked",
 GTK_SIGNAL_FUNC( print_cb ),
 GTK_OBJECT( text ) );
 gtk_signal_connect_object( GTK_OBJECT( window ), "delete_event",
 GTK_SIGNAL_FUNC( gtk_main_quit),
 NULL );
 gtk_signal_connect_object( GTK_OBJECT( window ), "destroy",
 GTK_SIGNAL_FUNC( gtk_main_quit),
 NULL );
 gtk_container_add (GTK_CONTAINER (window), table);
 gtk_widget_show_all (window);
 gtk_main ();
}

Und so muss es am Ende aussehen (das kommt auf Ihr GTK-Theme an):

Screenshot

Der Kopieren-Button macht ein Copy, der Kleben-Button macht ein Paste und der Ausgeben-Button schreibt den Text in der Textbox auf das Terminal... Dann noch viel Spaß beim Rumspielen mit GTK! :-)

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung