Sehr Umfangreiche Webseite zum Programmieren in C Perl CGI, Skripting, Linux, Systemprogrammierung C C++ C/C++ ANSI C Linux Windows GUI gtk gtk+ Gimp Toolkit Widgets Scale Widget GUI gtk gtk+ Gimp Toolkit Widgets Scale Widget Scale Widget

Horizontale Scale Widget           zurück Ein Kapitel tiefer zum Inhaltsverzeichnis

Nach der Scrollbar wollen wir uns nun das Scale Widget ansehen. Natürlich gilt auch für das Scale Widget, das selbe mit dem Adjustment wie schon bei den Scrollbars. Wir wollen uns zuerst wieder den Syntax für die Erstellung eines neuen horizontalen Scale Widgets ansehen ...

GtkWidget *gtk_hscale_new(GtkAdjustment *adj);

Das Argument für Adjustment haben Sie schon kennen gelernt. Wollen wir uns doch zuvor das Scale Widget in der Praxis ansehen. Hierzu der Quellcode ...

#include <gtk/gtk.h>

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

int main(int argc, char **argv)
{
 GtkWidget *fenster;
 GtkWidget *box, *box2;
 GtkWidget *hscale1, *hscale2, *hscale3;
 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_hbox_new(FALSE,10);
 box2= gtk_vbox_new(TRUE,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, 1.0);

 hscale1 = gtk_hscale_new(GTK_ADJUSTMENT(adj1));
 hscale2 = gtk_hscale_new(GTK_ADJUSTMENT(adj2));
 hscale3 = gtk_hscale_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), hscale1, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box), hscale2, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box), hscale3, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box2), box, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box2), button_quit, FALSE, FALSE, 20);


 gtk_container_add(GTK_CONTAINER(fenster),box2);

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

 gtk_main();

 return 0;
}

Und so könnte es aussehen ...

Wollen Sie die Zahlen nicht anzeigen, so gibt es dafür die Funktion ...

void gtk_scale_set_draw_value(GtkScale *scale, gboolen draw_value);

Für den ersten Parameter geben Sie bitte das Scale Widget an, auf welches sich diese Funktion beziehen soll. Auch hier benötigen wir wieder ein casten des Types mit GTK_SCALE(scale). Geben sie für den zweiten Parameter FALSE an, werden die Zahlen nicht angezeigt, geben sie TRUE werden diese angezeigt. In unser Programmbeispiel würden Sie mit ...

gtk_scale_set_draw_value(GTK_SCALE(hscale1), FALSE);

... die Anzeige des ersten Scale Widget links abschalten. Mit TRUE könnten Sie die Anzeige wieder aktivieren.

Wollen Sie die Anzahl der Stellen nach dem Komma verändern bzw. gar keine anzeigen, so verwenden Sie die Funktion ...

void gtk_scale_set_digits(GtkScale *scale, gint digits);

Damit stellen Sie das Scale Widget scale auf digits Stellen Anzeige nach dem Komma. Maximal können Sie 13 Stellen anzeigen lassen. Wollen Sie keine Stelle nach dem Komma anzeigen, so geben sie 0 an. Beispiel ...

gtk_scale_set_digits(GTK_SCALE(hscale1), 0); //keine Stellen nach dem Komma anz.
gtk_scale_set_digits(GTK_SCALE(hscale2), 10); //10 Stellen nach dem Komma anz.

Die Position der Anzeige der Zahlen können Sie mit der Funktion ...

void gtk_scale_set_value_pos(GtkScale *scale, GtkPositionType pos);

... einstellen. Der erste Parameter ist wieder wie immer. Beim zweiten können Sie folgende Angaben machen ...

Vertikale Scale Widget           zurück Ein Kapitel tiefer zum Inhaltsverzeichnis

Das Vertikale Scale Widget funktioniert genauso wie das Horizontale. Es wird folgendermaßen erzeugt ...

GtkWidget *gtk_vscale_new(GtkAdjustment *adj);

Und auch hierzu ein Beispiel ...

#include <gtk/gtk.h>

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


int main(int argc, char **argv)
{
 GtkWidget *fenster;
 GtkWidget *box, *box2;
 GtkWidget *vscale1, *vscale2, *vscale3;
 GtkWidget *button_quit;
 GtkObject *adj1, *adj2, *adj3;
 gint val;

 /*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_hbox_new(FALSE,10);
 box2= gtk_vbox_new(TRUE,0);

 adj1 = gtk_adjustment_new(0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
 adj2 = gtk_adjustment_new(50.0, 0.0, 101.0, 10.0, 1.0, 1.0);
 adj3 = gtk_adjustment_new(100.0, 0.0, 101.0, 1.0, 1.0, 1.0);

 vscale1 = gtk_vscale_new(GTK_ADJUSTMENT(adj1));
 vscale2 = gtk_vscale_new(GTK_ADJUSTMENT(adj2));
 vscale3 = gtk_vscale_new(GTK_ADJUSTMENT(adj3));
 /*Anzeige Positionieren*/
 gtk_scale_set_value_pos(GTK_SCALE(vscale1), GTK_POS_LEFT);
 gtk_scale_set_value_pos(GTK_SCALE(vscale2), GTK_POS_TOP);
 gtk_scale_set_value_pos(GTK_SCALE(vscale3), GTK_POS_RIGHT);
 /*Keine Stellen nach dem Komma*/
 gtk_scale_set_digits(GTK_SCALE(vscale1), 0);
 gtk_scale_set_digits(GTK_SCALE(vscale2), 0);
 gtk_scale_set_digits(GTK_SCALE(vscale3), 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);


 /*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), vscale1, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box), vscale2, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box), vscale3, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box2), box, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(box2), button_quit, FALSE, FALSE, 20);


 gtk_container_add(GTK_CONTAINER(fenster),box2);

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

 gtk_main();

 return 0;
}

Und so könnte es aussehen ...

Das Programm bietet nichts neues mehr. Die weiteren Funktionen haben Sie bereits im Kapitel zuvor kennen gelernt.

Weiter mit Label Widget