es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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;
Tags:  ,

Answer

  1. Avatar for 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 al Gtk_Button a través de la función Test.P.Connect en el archivo Main.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” de Gtk_Button y se ejecutará cuando se haga clic en el botón.

Comments are closed.