Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les callback avec Gtkada

Gtkada

    27 octobre 2021 à 1:08:14

    voila cela fais déjà quelques jours que je ne parviens a trouver une solution à un code qui me bloque avec GtkAda. J'ai crée un bouton qui lorsque je clique dessus m'affiche un Gtk_Entry mais le soucis est que quand je clique sur le bouton il ne se passe absolument rien. voila je donne un exemple du code :

    fichier.ads

    Package fichier is
    
    Procedure test (Emet : Access Gtk_Button_Record'Class);
    
    Package P is new Gtk.Handlers.Callback (Gtk_Button_Record);
    
    Use P;
    
    end fichier;

    Fichier.adb

    Package body fichier is 
    
    Procedure Test (Emet : access Gtk_Button_Record'Class) is
    Pragma Unreferenced (Emet);
    
    L_entree : Gtk_entry;
    
    begin
    
    Gtk_New (L_entree);
    L_entree.Show;
    
    end Test;
    end Fichier;

    Main.adb

    Procedure main is
    
    Win : Gtk_Window;
    Button : Gtk_Button;
    
    begin
    Init;
    
    Gtk_New (Win);
    
    Win.Set_Default_Size ( Height => 600,
                           Widht  => 400);
    
    Gtk_New (Button, Label => "Bouton");
    
    Fichier.P.Connect (Widget => Button, 
                       Name   => Signal_Clicked,
                       Cb     => P.To_Marshaller (Test'Access),
                       After  => False );
    
    Win.Add (Button);
    
    Win.Show_All;
    Main;
    end Main;

    le code se compile et s'exécute bien mais quand je clique sur le bouton il ne se passe rien. quelqu'un peut m'aider je suis bloqué


    • Partager sur Facebook
    • Partager sur Twitter
      27 octobre 2021 à 14:19:50

      un Entry c'est une zone de saisie simple, et un widget comme un bouton, pas une fenêtre de saisie; il faut qu'il soit ajouter à ta fenêtre pour être visible sinon il n'appartient à aucun conteneur.
      • Partager sur Facebook
      • Partager sur Twitter
        29 octobre 2021 à 1:42:41

        j'ai déjà essayé de mettre mon Gtk_Entry dans un conteneur mais le resultat est le meme

        fichier.ads

        --   specification
        Package fichier is
        
        type test is record
        
        Conteneur : Gtk_fixed;
        L_Entree : Gtk_Entry;
        
        end record;
        
        Procedure Initiliase_conteneur ( Objet : in out Test );
        
        Procedure Le_Callback (Emetteur : Access Gtk_Button_Record'Class);
        
        Package P is new Gtk.Handlers.Callback (Gtk_Button_Record);
        
        Use P;
        
        end fichier;

        fichier.adb

        --    corps de specification fichier.ads
        Package body fichier is
        Procedure Initialise_Conteneur ( Objet : in out Test ) is
        begin
        
        Gtk_New (Objet.Conteneur);
        
        end Initialise_Conteneur;
        
        Procedure Le_Callback (Emetteur : Access Gtk_Button_Record) is
        
        Pragma Unreferecend (Emetteur);
        
        F : Test;
        
        begin
        
        Gtk_New (F.L_Entree);
        
        F.Conteneur.Add (F.L_Entree);
        
        F.L_Entree.Show;
        
        end Le_Callback;
        end fichier;

        main.adb

        --   Programme Principal
        Procedure Main is
        
        Win : Gtk_Window;
        Bouton : Gtk_Button;
        Fixe : Test;
        
        begin
        Init;
        
        Gtk_New (Win);
        
        Initialilise_Conteneur (Fixe);
        
        Win.Set_Default_Size (600,400);
        
        Gtk_New (Bouton,
                 Label => "Bouton");
        
        fixe.Conteneur.Add (Bouton);
        
        fichier.P.Connect (Widget  => Bouton,
                           Name    => "Clicked",
                           Cb      =>  P.To_Marshaller (Le_Callback'Access));
        
        Win.Add (fixe.Conteneur);
        
        Win.Show_All;
        Main;
        end Main;
                           
        

        je ne sais plus comment m'y prendre j'ai presque tout essayé:



        • Partager sur Facebook
        • Partager sur Twitter
          29 octobre 2021 à 11:34:04

          Je pensais plutôt à ta fenêtre Win comme conteneur (ou un conteneur sur cette fenêtre)
          • Partager sur Facebook
          • Partager sur Twitter
            31 octobre 2021 à 22:19:24

            Voila j'ai mis mon Gtk_Entry et Gtk_Button dans un conteneur puis j'ai ajouter ma Gtk_Window a ce conteneur  mais quand j'ai s'execute le programme j'ai une exception de type  

            GTK-WARNING : Can't set a parent on a toplevel widget

            apparemment il est impossible de mettre mon Gtk_Window dans un conteneur puisqu'il est de niveau superieur.

            • Partager sur Facebook
            • Partager sur Twitter
              2 novembre 2021 à 10:54:18

              tu ne peux pas ajouter une fenêtre dans une fenêtre, mais tu peux y mettre une entry (un conteneur ça peut être une frame, ce n'est pas nécessairement une fenêtre). J'ai seulement proposé de mettre l'Entry que tu veux affiche dans ta fenêtre existante qui s'appelle Win
              • Partager sur Facebook
              • Partager sur Twitter

              Les callback avec Gtkada

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown