« Programmation GTK2 en Pascal/GtkComboBox » : différence entre les versions

Contenu supprimé Contenu ajouté
Didier (discussion | contributions)
Didier (discussion | contributions)
+ Exemple
Ligne 44 :
 
function gtk_combo_box_get_active_text(combo_box : PGtkComboBox) : Pgchar;
 
ATTENTION : Cette fonction n'est pas définie dans les en-têtes Gtk+ Pascal. Il faut donc ajouter le prototype dans le source où on veut l'utiliser (cf l'exemple ci-dessous).
 
=== Programme exemple ===
 
Comme exemple, nous allons créer une fenêtre comportant un GtkComboBox, un GtkButton et un GtkLabel. Le but sera d'afficher le texte sélectionné du GtkCombobox dans le GtkLabel. Cette opération s'effectuera lorsque l'utilisateur cliquera sur le bouton (interception du signal « clicked »).
 
Voilà le fichier <code>gtk029.pas</code> :
 
program gtk029;
uses glib2, gtk2;
// Défaut de la gtk2 pascal : il manque cette fonction pourtant présente dans la bibliothèque
function gtk_combo_box_get_active_text(combo_box:PGtkComboBox):PGChar;cdecl;
external gtklib name 'gtk_combo_box_get_active_text';
type
TFenetrePrincipale = record
pFenetre : PGtkWidget;
pVBox : PGtkWidget;
pListeDer : PGtkWidget;
pBouton : PGtkWidget;
pLabel : PGtkWidget;
end;
PFenetrePrincipale = ^TFenetrePrincipale;
procedure OnBtnClick(APWidget : PGtkwidget; AData : pgpointer); cdecl;
var
pFenPrinc : PFenetrePrincipale;
Texte : PGChar;
begin
// Récuperation des données de la fenêtre principale (qui sont dans AData)
pFenPrinc := PFenetrePrincipale(AData);
// Récuperation du texte contenu dans le GtkHScale
Texte := gtk_combo_box_get_active_text(GTK_COMBO_BOX(pFenPrinc^.pListeDer));
// Modification du texte contenu dans le GtkLabel
gtk_label_set_text(GTK_LABEL(pFenPrinc^.pLabel), Texte);
g_free(Texte);
end;
var
pFenPrinc : PFenetrePrincipale;
begin
pFenPrinc := g_malloc(SizeOf(TFenetrePrincipale));
gtk_init(@argc, @argv);
pFenPrinc^.pFenetre := gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(pFenPrinc^.pFenetre), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(pFenPrinc^.pFenetre), 320, 200);
gtk_container_set_border_width(GTK_CONTAINER(pFenPrinc^.pFenetre), 4);
gtk_window_set_title(GTK_WINDOW(pFenPrinc^.pFenetre), 'Gtk029 : Combobox');
gtk_signal_connect(pGTKOBJECT(pFenPrinc^.pFenetre), 'destroy', GTK_SIGNAL_FUNC(@gtk_main_quit), NULL);
pFenPrinc^.pVBox := gtk_vbox_new(TRUE, 0);
gtk_container_add(GTK_CONTAINER(pFenPrinc^.pFenetre), pFenPrinc^.pVBox);
// Création du GtkComboBox
pFenPrinc^.pListeDer := gtk_combo_box_new_text;
// Chargement de la liste déroulante
gtk_combo_box_append_text(GTK_COMBO_BOX(pFenPrinc^.pListeDer), 'Bleu');
gtk_combo_box_append_text(GTK_COMBO_BOX(pFenPrinc^.pListeDer), 'Rouge');
gtk_combo_box_append_text(GTK_COMBO_BOX(pFenPrinc^.pListeDer), 'Jaune');
gtk_box_pack_start(GTK_BOX(pFenPrinc^.pVBox), pFenPrinc^.pListeDer, TRUE, FALSE, 0);
pFenPrinc^.pBouton := gtk_button_new_with_label('Copier');
gtk_box_pack_start(GTK_BOX(pFenPrinc^.pVBox), pFenPrinc^.pBouton, TRUE, FALSE, 0);
g_signal_connect(pGTKOBJECT(pFenPrinc^.pBouton), 'clicked',
GTK_SIGNAL_FUNC(@OnBtnClick), gpointer(pFenPrinc));
pFenPrinc^.pLabel := gtk_label_new(NULL);
gtk_box_pack_start(GTK_BOX(pFenPrinc^.pVBox), pFenPrinc^.pLabel, TRUE, FALSE, 0);
gtk_widget_show_all(pFenPrinc^.pFenetre);
gtk_main;
g_free(pFenPrinc);
end.
 
Voilà ce que donne l'exécution du programme <code>gtk029</code> :
 
[[Image:Programmation GTK2 en Pascal - gtk029-1.png]]
 
Après saisie d'un texte et clic sur le bouton :
 
[[Image:Programmation GTK2 en Pascal - gtk029-1.png]]
 
== Utilisation complète (avec modèle) ==
 
''<à développer>''
 
{{Programmation GTK2 en Pascal - Liste déroulante}}