Sujet : Re: Les Callback en Ada
De : 314 (at) *nospam* drpi.fr (DrPi)
Groupes : fr.comp.lang.adaDate : 20. Sep 2021, 19:07:02
Autres entêtes
Organisation : Guest of ProXad - France
Message-ID : <6148bfb6$0$8881$426a74cc@news.free.fr>
References : 1 2 3 4
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0
Bonjour,
Le 20/09/2021 à 02:51, Danielle Mandi Mayagha a écrit :
...
Salut désolé encore si je dérange mais j'ai un second souci que j'arrive pas à résoudre( voila je donne un exemple du code apres j'explique le probleme)
ficfier.ads
with Gtk.File_chooser_dialog; use gtk.file_file_chooser_dialog;
with gtk.widget; use gtk.widget;
with gtk.handlers;
package P_fichier is
type T_Type is record
F : Gtk_file_chooser_dialog;
end record;
package Callback is new gtk.handlers.user_callback (gtk_widget_record, P_fichier.T_Type);
use Callback;
Procedure Stop_Program ( emetteur : access gtk_widget_record;
object : out P_fichier.T_Type );
end P_fichier;
fichier.adb
package body P_fichier is
Procedure Stop_Program is (emetteur : access gtk_widget_record;
object : out P_fichier.T_type ) is
pragma Unreferenced (emetteur);
begin
gtk_new (Object.F, "ajout du fichier", action_Save, null);
end Stop_Program;
end P_fichier;
main_program.adb
with gtk.main; use gtk.main;
with gtk.window; use gtk.window;
with gtk.button; use gtk.button;
with P_fichier; use P_fichier;
Procedure main_Program is
win : gtk_window;
bouton : gtk_button;
begin
init;
gtk_new (win);
win.set_default_size (600,400);
gtk_new (bouton,"ouvrir le fichier");
declare
Object : T_Type;
begin
P_fichier.callback.connect (bouton,s signal_clicked, callback.to_marshaller (stop_program'
access, Object, false );
end ;
win.Add (bouton);
win.show_all;
main;
end main_program;
voila le probleme est que le programme affiche le meme message d'erreur que precedent pourtant j'ai bien mis Stop_Program dans un fichier separe. mais je ne comprend pas j'ai essayé avec Object_connect mais c'est toujours pareil.
A première lecture du programme, le problème n'est plus avec stop_program mais avec Object.
Object n'existe qu'entre declare et le end correspondant.
Il n'est donc pas possible de l'utiliser dans une callback.
Nicolas