Re: Les Callback en Ada

Liste des GroupesRevenir à fcl ada 
Sujet : Re: Les Callback en Ada
De : dmandimayagha (at) *nospam* gmail.com (Danielle Mandi Mayagha)
Groupes : fr.comp.lang.ada
Date : 20. Sep 2021, 01:51:16
Autres entêtes
Message-ID : <2d7ae0f0-603d-405b-ae05-df8ec6de9cecn@googlegroups.com>
References : 1 2 3
User-Agent : G2/1.0
Le vendredi 17 septembre 2021 à 00:20:50 UTC+1, Danielle Mandi Mayagha a écrit :
Le jeudi 16 septembre 2021 à 09:48:41 UTC+1, J-P. Rosen a écrit :
Le 16/09/2021 à 04:29, Danielle Mandi Mayagha a écrit :
Salut Salut Je viens avec un tout petit (un gros enfaite) problème qui me sauf un peu le cerveau. bon voila! j'essaie de faire un Callback avec un Bouton mais le souci c'est que ce bon vieux Gnat me dit ceci ( pour info je suis carrément nul en anglais😊😛) :
Instantiation error at gtk-handlers.ads : 1039
Subprogram must not be deeper than access type.
 
[...]
voici mon code :
 
WITH Gtk.Main; USE Gtk.Main;
WITH Gtk.Widget; USE Gtk.Widget;
WITH Gtk.Window; USE Gtk.Window;
WITH Gtk.Enums; USE Gtk.Enums;
WITH Gtk.Button; USE Gtk.Button;
WITH Gtk.Handlers;
 
Procedure Test is
 
Package P_Callback is new Gtk.Handlers.Callback (Gtk_Widget_Record);
USE P_Callback;
 
Procedure Stop_Program ( Emetteur : Gtk_Widget_Record'Class ) is
Pragma Unreferenced (Emetteur);
begin
Main_Quit;
 
end Stop_Program;
Ici, Stop_Program est un sous-programme interne à la procédure Test
 
Win : Gtk_Window;
Bouton : Gtk_Button;
 
begin
Init;
 
Gtk_New (Win);
Win.Set_Default_Size (600,400);
 
Gtk_New (Bouton,"Le Bouton");
 
 
Win.Add (Bouton);
 
P_Callback.Connect (Bouton,"Clicked", To_marshaller (Stop_Program'Access));
Le type attendu par To_Marshaller est un pointeur global. On ne peut lui
passer un sous-programme local, car il y aurait un risque de pouvoir
accéder au sous-programme après être sorti de sa portée.
 
Le plus simple: sors Stop_Program de Test en le mettant dans un fichier
séparé. (bien sûr, pour pouvoir y accéder, Test devra faire un "with
Stop_Program;")
 
 
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52
https://www.adalog.fr
merci beaucoup ça fonctionne tres bien maintenant

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.

Date Sujet#  Auteur
16 Sep 21 * Les Callback en Ada8Danielle Mandi Mayagha
16 Sep 21 `* Re: Les Callback en Ada7J-P. Rosen
17 Sep 21  `* Re: Les Callback en Ada6Danielle Mandi Mayagha
20 Sep 21   `* Re: Les Callback en Ada5Danielle Mandi Mayagha
20 Sep 21    +* Re: Les Callback en Ada3DrPi
21 Sep 21    i`* Re: Les Callback en Ada2Danielle Mandi Mayagha
20 Jan 22    i `- Re: Les Callback en Ada1Thomas
21 Sep 21    `- Re: Les Callback en Ada1Ludovic Brenta

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal