Señales con GtkAda
Mi preocupación es que creé una función de devolución de llamada, la cual debería mostrar un Gtk_Entry
cuando hacemos clic en el Gtk_Button
pero resulta que cuando hago clic en el botón no pasa nada. No entiendo por qué.
Archivo.ads
Paquete Test es
Tipo T_Test es registro
Conteneur : Gtk_Fixe;
L_Entree : Gtk_Entry;
end registro;
Procedure Le_Callback (Emisor : acceso a Gtk_Button_Record);
Paquete P es nuevo Gtk.Handlers.Callback (Gtk_Button_Record);
Usar P;
Fin Test;
Archivo.adb
Paquete cuerpo Test es
Procedure Inicializar_Contenedor (Objeto : T_Test) es
begin
Gtk_New (Objeto.Conteneur);
end Inicializar_Contenedor;
Procedure Le_Callback (Emisor : acceso a Gtk_Button_Record) es
V : T_Test;
begin
Inicializar_Contenedor (Objeto => V);
Gtk_New (V.L_Entree);
V.Conteneur.Add (V.L_Entree);
V.L_Entree.Show;
end Le_Callback;
Fin Test;
Main.adb
Procedimiento Principal es
Win : Gtk_Window;
Boton : Gtk_Button;
Posix : T_Test;
begin
Init;
Inicializar (objeto => Posix);
Gtk_New (Win);
Win.Set_Default_Size (600,400);
Gtk_New (Boton,"Botón");
Test.P.Conectar (Widget => Boton,
Nombre => Signal_Clicked,
Codigo => P.To_Marshaller (Le_Test'Access),
Despues => true);
Posix.Conteneur.Add (Boton);
Win.Add (Posix.Conteneur);
Win.Show_All;
Principal;
Fin Principal;
davy.ai
El problema en este código es que la función de devolución de llamada
Le_Callback
no está siendo correctamente conectada alGtk_Button
a través de la funciónTest.P.Connect
en el archivoMain.adb
.Para solucionar este problema, por favor reemplace la siguiente línea
Marsh => P.To_Marshaller (Le_Test'Access)
con
Marsh => P.To_Marshaller (Le_Callback'Access)
Esto asegurará que la función
Le_Callback
esté correctamente conectada con la señal “clicked” deGtk_Button
y se ejecutará cuando se haga clic en el botón.