







|

Als nächsten Schritt müssen wir nun den Wertebereiche und die Größe und
Schrittweite des Scrollbars einstellen. Dies geschieht mit der Funktion:
GtkObject *gtk_adjustment_new(gfloat value, gfloat lower, gfloat upper,
gfloat step_increment, gfloat page_increment,
gfloat page_size);
Folgende Bedeutung haben dabei die einzelnen Parameter, welchen sie immer einen
float-Wert übergeben müssen:
- value - der zu initialisierende Wert (Position der Scrollbar zum Start)
- lower - Wert der kleinsten Postion
- upper - Wert der größten Position
- step_increment - Schrittweite zwischen lower und upper wenn auf den Pfeil gedrückt
wird.
- page_increment - Schrittweite für die Scrollbar
- page_size - Größe der Scrollbar
Nun wollen wir unser Adjustment auf das Programmbeispiel vom Kapitel zuvor loslassen:
/*Download:gtkscr2.c*/
#include <gtk/gtk.h>
void ende_cb(GtkObject *object)
{
gtk_main_quit();
}
int main(int argc, char **argv)
{
GtkWidget *fenster;
GtkWidget *box;
GtkWidget *hscrollbar1, *hscrollbar2, *hscrollbar3;
GtkWidget *button_quit;
GtkObject *adj1, *adj2, *adj3;
/*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");
/*Neue Box erstellen*/
box = gtk_vbox_new(FALSE,0);
adj1 = gtk_adjustment_new(50.0, 0.0, 100.0, 1.0, 1.0, 1.0);
adj2 = gtk_adjustment_new(0.0, 0.0, 100.0, 10.0, 1.0, 1.0);
adj3 = gtk_adjustment_new(0.0, 0.0, 100.0, 1.0, 1.0, 50.0);
hscrollbar1 = gtk_hscrollbar_new(GTK_ADJUSTMENT(adj1));
hscrollbar2 = gtk_hscrollbar_new(GTK_ADJUSTMENT(adj2));
hscrollbar3 = gtk_hscrollbar_new(GTK_ADJUSTMENT(adj3));
/*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);
/*Fensterposition*/
gtk_window_set_position(GTK_WINDOW(fenster),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(fenster),25);
/*Nun alles rein in die Box....*/
gtk_box_pack_start(GTK_BOX(box), hscrollbar1, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), hscrollbar2, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), hscrollbar3, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), button_quit, FALSE, FALSE, 20);
gtk_container_add(GTK_CONTAINER(fenster),box);
/*Zeigs uns.....*/
gtk_widget_show_all(fenster);
gtk_main();
return 0;
}
|
Nun ergibt sich schon ein anderes Bild:
Nachträglich die aktuelle Position der Scrollbar, die Variable value, können
sie ändern mit der Funktion:
void gtk_adjustment_set_value(GtkAdjustment *adj, gfloat value);
Bei unserem Programm könnten wir dies bei der Scrollbar Nummer 3 so machen:
gtk_adjustment_set_value(GTK_ADJUSTMENT(adj3), 40.0);
Der nächste Schritt dürfte wohl sein einen Signal-handler einzurichten und
zu Überprüfen ob sich die Position der Scrollbar verändert hat. Dabei muss
nur auf das Event "value_changed" gecheckt werden. Hier unser Beispiel dazu.
Die Ausgabe einer Veränderung geschieht wieder über die Konsole:
/*Download:gtkscr3.c*/
#include <gtk/gtk.h>
void ende_cb(GtkObject *object)
{
gtk_main_quit();
}
void scrollbar_cb(GtkAdjustment *adj, gpointer user_data)
{
g_print("%s hat sich verändert ",(char *)user_data);
g_print("neue Pos. : %f\n", adj->value);
}
int main(int argc, char **argv)
{
GtkWidget *fenster;
GtkWidget *box;
GtkWidget *hscrollbar1, *hscrollbar2, *hscrollbar3;
GtkWidget *button_quit;
GtkObject *adj1, *adj2, *adj3;
/*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");
/*Neue Box erstellen*/
box = gtk_vbox_new(FALSE,0);
adj1 = gtk_adjustment_new(50.0, 0.0, 100.0, 0.1, 1.0, 1.0);
adj2 = gtk_adjustment_new(0.0, 0.0, 100.0, 10.0, 1.0, 1.0);
adj3 = gtk_adjustment_new(0.0, 0.0, 100.0, 1.0, 1.0, 50.0);
hscrollbar1 = gtk_hscrollbar_new(GTK_ADJUSTMENT(adj1));
hscrollbar2 = gtk_hscrollbar_new(GTK_ADJUSTMENT(adj2));
hscrollbar3 = gtk_hscrollbar_new(GTK_ADJUSTMENT(adj3));
/*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(GTK_OBJECT(adj1), "value_changed",
GTK_SIGNAL_FUNC(scrollbar_cb), "Scrollbar 1");
gtk_signal_connect(GTK_OBJECT(adj2), "value_changed",
GTK_SIGNAL_FUNC(scrollbar_cb), "Scrollbar 2");
gtk_signal_connect(GTK_OBJECT(adj3), "value_changed",
GTK_SIGNAL_FUNC(scrollbar_cb), "Scrollbar 3");
/*Fensterposition*/
gtk_window_set_position(GTK_WINDOW(fenster),GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(fenster),25);
/*Nun alles rein in die Box....*/
gtk_box_pack_start(GTK_BOX(box), hscrollbar1, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), hscrollbar2, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), hscrollbar3, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), button_quit, FALSE, FALSE, 20);
gtk_container_add(GTK_CONTAINER(fenster),box);
/*Zeigs uns.....*/
gtk_widget_show_all(fenster);
gtk_main();
return 0;
}
|
Wollen sie hingegen überprüfen ob sich Irgendein Wert des Adjustment geändert
hat, müssen sie einen Signalhandler mit dem Event "changed" einrichten.
Sie können diese beiden Signale für das Adjustment auch mit folgenden Funktionen
auslösen:
void gtk_adjustment_changed(void);
void gtk_adjustment_value_changed(void);

© 2001,2002 Jürgen Wolf
|