Login
Newsletter
Werbung

Sa, 30. August 2003, 00:00

GTK+-Programmierung mit FreePascal (Referenz)

Diese Referenz soll eine kürzere Zusammenfassung des GTK+-Workshops sein.

Vorwort

Ich hatte eigentlich etwas mehr von GTK+ für FreePascal erwartet, denn der derzeitige Stand von GTK+ für FreePascal ist der, dass alles sich fast identisch wie das C GTK+ verhält. Ich stellte mir unter FreePascal GTK+ eigentlich eher vor, daß der Wrapper Gebrauch von der Objektorientierung von Pascal machen würde. Nun ja, vieles, was hier steht, wird Ihnen eventuell aus anderen Teilen des GTK+-Workshops bekannt vorkommen und soll nun mehr als eine kürzere Zusammenfassung dessen für FreePascal darstellen. Warum ich mich trotz der Enttäuschung weiter mit GTK+ für FreePascal auseinandergesetzt habe, hängt damit zusammen, dass an der Schule, an der ich bin, der aktuelle Informatik-Leistungskurs mit FreePascal unterrichtet wird, und ich damit GTK+ verbinden wollte.

Allgemeiner Programmaufbau

In einem GTK-Pascal-Programm müssen stets die Unit gtk und glib geladen werden. Diese stellen GTK-Funktionen und Typen bereit und zusätzlich den Ersatz einiger Standard-C-Funktionen, von denen wir in der GTK Freepascal-Version jedoch keinen Gebrauch machen werden.

Vor jeglicher Arbeit mit GTK-Funktionen muss GTK+ initialisiert werden. Dies geschieht mit der Funktion gtk_init, die einen Zeiger auf die Anzahl der Parameter und auf die Parameterliste benötigt, um GTK-bezügliche Parameter herauszufiltern. Deshalb sieht der Standard-Aufruf der Funktion wie folgt aus:

gtk_init(@argc, @argv);

Nach der Aufstellung aller Widgets muss die Funktion gtk_main(); aufgerufen werden. Sie übernimmt in einer Schleife dann das Programm und prüft auf auftretende Ereignisse (Mausklicks, Tastendrücke). Wenn man ein Programm für Windows schreiben will, ist der Compilerschalter {$APPTYPE GUI} nützlich, wird er verwendet, wird kein MSDOS-Fenster mehr angezeigt, was man wohl will, wenn man ein Windows-Programm schreibt. Aber WARNUNG: In diesem Falle gibt es keine Standard Ein- oder Ausgabe mehr. Das GTK-Programm wird durch gtk_main_quit() beendet.

Ein Beispiel zu einem minimalen GTK-Programm ist grund.pas.

Bedienelemente allgemein

Das ganze GTK-System besteht aus Bedienelementen, Widgets genannt. Jeder Teil von GTK+ ist eine Untergruppe dieser Widgets und es werden alle Variablen als Typ PGtkWidget deklariert, egal, ob es später ein Knopf oder ein Fenster wird.

Funktionen für alle Widgets

FunktionBedeutung
gtk_widget_show(widget)Ein bereits erstelltes Widget wird angezeigt
gtk_widget_show_all(widget)Zeigt ein Widget und all seine "Kinder" an
gtk_widget_hide(widget)Ein Widget wird versteckt, seine Daten bleiben erhalten
gtk_widget_destroy(widget)Ein Widget wird zerstört und seine Daten gehen verloren, der Speicher wird freigemacht

Fenster

Fenster sind eine Untergruppe der Container, weshalb alle Containerfunktionen auf sie angewendet werden können. Über Fenster gibt es nicht viel zu wissen, da sie eigentlich nur einen einfachen Rahmen um die Bedienelemente (Widgets) des Programms darstellen.

Wichtige Funktionen zu Fenstern

FunktionBedeutung
gtk_window_new(typ) Reserviert Speicher für ein neues Fenster und richtet es ein. Der typ ist entweder:
GTK_WINDOW_TOPLEVEL für ein Programmhauptfenster
GTK_WINDOW_DIALOG für ein Dialogfenster (was von Windows und vielen Window-Managern gesondert behandelt wird)
GTK_WINDOW_POPUP, ein Popup-Fenster, was in einer Bildschirmecke klebt und immer im Vordergrund bleibt
gtk_window_set_title(fenster, titel)Setzt den Fenstertitel
gtk_window_set_defaultsize(fenster, x, y)Setzt die Standardgröße des Fensters

Wichtige Signale von Fenstern

SignalBedeutung
delete_eventFenster soll geschlossen werden
destroyFenster soll zerstört werden

Unter Windows werden unglücklicherweise beim Schließen des letzten Fensters sowohl delete_event als auch destroy ausgelöst.

Container

Container sind Widgets, die ein anderes Widget aufnehmen können. Dazu gehören Fenster, Buttons, Tabs und viele andere.

Wichtige Funktionen zu Containern

FunktionBedeutung
gtk_container_add(container, widget)Packt ein Widget in den Container
gtk_container_remove(container, widget)Löscht ein Widget aus einem Container
gtk_container_set_border_width(container, pixel)Setzt Rahmenbreite eines Containers

Labels

Labels sind einfache Widgets, die Text anzeigen. Label heißt auf deutsch Etikett und genauso werden sie in Programmen verwendet, um Teile zu beschriften.

Wichtige Funktionen zu Labels

FunktionBedeutung
gtk_label_new(aufschrift)Erzeugt ein neues Label mit einer Aufschrift
gtk_label_set_text(text)Ändert den Text eines bestehenden Labels

Rene van Bevern

Beispielprogramm zu Fenstern, Containern und Labels

Dieses erste Beispielprogramm erzeugt ein Fenster, ein Label mit der Aufschrift "Hallo Welt", packt das Label in das Fenster, zeigt alles an und startet den GTK-Main loop. ACHTUNG: das Programm ist unfähig, sich selbst zu beenden. Nach dem Schließen des Fensters läuft es weiter und muss mit CTRL+C oder dem Prozessmanager des betreffenden Betriebssystems gekillt werden.

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