Programmation GTK2 en Pascal/GtkWindow
Présentation.
Le contrôle GtkWindow est l'élément de base d'une interface graphique, car c'est ce contrôle qui va vous permettre de créer la fenêtre principale ainsi que toutes les autres fenêtres de votre programme.
Utilisation de base.
Création de la fenêtre.
Dans un premier temps, il faut déclarer un pointeur sur notre objet fenêtre. Bien que nous voulions créer un objet codice_1, il faut déclarer un objet codice_2.
 var
 pWindow : PGtkWidget;
Par la suite, quel que soit l'objet à créer, il faudra toujours déclarer un pointeur sur un codice_2.
Une fois l'objet pWindow déclaré, il faut l'initialiser. Pour cela, une fonction est à notre disposition :
 function gtk_window_new(_type : TGtkWindowType) : PGtkWidget;
Le paramètre codice_4 définit le type de la fenêtre en cours de création, et peut prendre une des deux valeurs suivantes :
La valeur de retour est le pointeur sur notre nouvel objet fenêtre. Cette fonction est donc à utiliser comme ceci :
 pWindow := gtk_window_new(GTK_WINDOW_TOPLEVEL);
La création de la fenêtre est maintenant terminée.
Titre de la fenêtre.
Pour définir le titre d'une fenêtre une fonction spécifique est à notre disposition. Cette dernière est très simple d'utilisation :
 procedure gtk_window_set_title(window : PGtkWindow; title : Pgchar);
Le premier paramètre codice_5 correspond au contrôle que nous venons de créer. Mais comme codice_6 est de type codice_2 il faut utiliser la fonction de conversion codice_8.
Le deuxième paramètre codice_9 est bien entendu le titre que l'on veut donner à la fenêtre (codice_10 correspond à codice_11 en Pascal).
Au contraire, pour connaître le titre d'une fenêtre, la fonction est :
 function gtk_window_get_title(window : PGtkWindow) : Pgchar;
La variable qui recevra la valeur de retour de cette fonction devra être de type codice_12 et non pas codice_13.
Taille de la fenêtre.
La fonction pour définir la taille par défaut de la fenêtre est :
 procedure gtk_window_set_default_size(window : PGtkWindow; width : gint; height : gint);
Le paramètre codice_14 est la largeur de la fenêtre tandis que le paramètre codice_15 est sa hauteur.
Et très logiquement, la fonction pour connaître la taille par défaut de la fenêtre est :
 procedure gtk_window_get_default_size(window : PGtkWindow; width : Pgint; height : Pgint);
Position de la fenêtre.
La première fonction étudiée permet de définir la position de la fenêtre avant son affichage. Son prototype est le suivant :
 procedure gtk_window_set_position(window : PGtkWindow; position : TGtkWindowPosition);
Le deuxième paramètre codice_16 est la position que l'on veut donner à la fenêtre. Les valeurs acceptées sont :
La deuxième fonction est utilisable à tout moment du programme et permet de donner la position exacte de la fenêtre :
 procedure gtk_window_move(window : PGtkWindow; x : gint; y : gint);
Le premier paramètre est toujours la fenêtre dont on veut modifier la position.
Les deux autres paramètres sont la nouvelle position de la fenêtre. Le paramètre codice_17 est la position suivant l'axe X (axe horizontal) et le paramètre codice_18, la position suivant l'axe Y (axe vertical).
À l'inverse, pour connaître la position de la fenêtre, il faut utiliser cette fonction :
 procedure gtk_window_get_position(window : PGtkWindow; root_x : Pgint; root_y : Pgint);
Affichage de la fenêtre.
Le contrôle GtkWindow, comme tous les autres contrôles, n'a pas de fonctions particulières concernant son affichage. Pour cela il faut utiliser une fonction du contrôle de base codice_2 qui est :
 procedure gtk_widget_show(widget : PGtkWidget);
Cependant cette fonction ne s'occupera d'afficher que la fenêtre et pas les contrôles qui ont été ajoutés à l'intérieur de celle-ci. Pour simplifier les choses, Gtk+ nous offre cette fonction qui affichera tout d'un seul coup :
 procedure gtk_widget_show_all(widget : PGtkWidget);
Il en est de même en ce qui concerne la destruction d'un contrôle, qui se fait avec cette fonction :
 procedure gtk_widget_destroy(widget : PGtkWidget);
Premier programme exemple.
Nous allons créer une fenêtre toute simple. Voilà le fichier codice_20 :
 program gtk001;
 uses glib2, gtk2;
 procedure destroy(widget : PGtkwidget; data : pgpointer); cdecl;
 begin
 // Arrêt de la boucle événementielle
 gtk_main_quit();
 end;
 var
 pWindow : PGtkWidget; 
 begin
 gtk_init(@argc, @argv);
 pWindow := gtk_window_new(GTK_WINDOW_TOPLEVEL);
 // Connexion du signal "destroy"
 gtk_signal_connect(pGTKOBJECT(pWindow), 'destroy', GTK_SIGNAL_FUNC(@destroy), NULL);
 // Affichage de la fenêtre
 gtk_widget_show(pWindow);
 // Démarrage de la boucle événementielle
 gtk_main();
 end.
Voila ce que donne l'exécution du programme codice_21 :
Deuxième programme exemple.
Nous allons créer une fenêtre de taille 320x200, dont le titre sera « Fenêtre de base » et qui sera centrée à l'écran. 
Pour que les caractères accentués ne posent pas de problèmes, il faut utiliser un éditeur qui sauvegarde au format codice_22, comme par exemple codice_23 sous Linux.
Voilà le fichier codice_24 :
 program gtk002;
 uses glib2, gtk2;
 procedure destroy(widget : PGtkwidget; data : pgpointer); cdecl;
 begin
 // Arrêt de la boucle événementielle
 gtk_main_quit();
 end;
 var
 pWindow : PGtkWidget; 
 begin
 gtk_init(@argc, @argv);
 pWindow := gtk_window_new(GTK_WINDOW_TOPLEVEL);
 // Definition de la position 
 gtk_window_set_position(GTK_WINDOW(pWindow), GTK_WIN_POS_CENTER);
 // Definition de la taille de la fenêtre 
 gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
 // Titre de la fenêtre 
 gtk_window_set_title(GTK_WINDOW(pWindow), 'Fenêtre de base');
 // Connexion du signal "destroy"
 gtk_signal_connect(pGTKOBJECT(pWindow), 'destroy', GTK_SIGNAL_FUNC(@destroy), NULL);
 // Affichage de la fenêtre
 gtk_widget_show(pWindow);
 // Démarrage de la boucle événementielle
 gtk_main();
 end.
Voila ce que donne l'exécution du programme codice_25 :
La fenêtre est bien centrée sur le bureau dès le lancement.

Programmation GTK2 en Pascal/La gestion des évènements