Slt à tous,
Toujours dans le cadre de ma calculette, j'ai créé un certain nombre de procedures (pas encore toutes les procedures...mais je pense être sur la bonne voie...enfin j'espère )
Le problème est que j'ai créé toutes ces procédures dans le programme principale qui contient le code pour le tracé de la calculette graphique.
Pour essayer de faire les choses dans un minimum de règles de l'art , je me suis dit qu'il fallait que je crée un paquetage dans lequel je mettrais toutes ces procédures
Mais voilà, je me retrouve avec l'erreur suivante :
A l'origine, dans le programme principal, voilà à quoi cela ressemblait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part raised CONSTRAINT_ERROR : p_affichage_calc.adb:21 access parameter is null
Au tout début de la partie bleue, j'ai mis du code en commentaire (correspondant au bouton 0) pour tester le fonctionnement du paquetage, mais c'est lorsque je clique sur ce bouton précisément, que j'ai le message d'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 with Glib; use Glib; with Gtk.Main; use Gtk.Main; with Gtk.Window; use Gtk.Window; with Gtk.Frame; use Gtk.Frame; with Gtk.GEntry; use Gtk.GEntry; with Gtk.Enums; use Gtk.Enums; with Gtk.Button; use Gtk.Button; with Gtk.Check_Button; use Gtk.Check_Button; with Gtk.Table; use Gtk.Table; with Gtk.Handlers; use Gtk.Handlers; with gtk.widget; use gtk.widget; with p_affichage_calc; use p_affichage_calc; procedure cessai2 is Table : gtk_table; Fenetre : gtk_window; Ecran, Affich_result : Gtk_GEntry; Frame_affich, Frame_trigo, Frame_ope, Frame_nomb : gtk_frame; btn_inv : Gtk_Check_Button; btn_sin, btn_cos, btn_tan : Gtk_Button; btn_plus, btn_moins, btn_mul, btn_div, btn_virg : Gtk_Button; btn_sqrt, btn_pcent, btn_car, btn_pun, btn_clear : Gtk_Button; bouton0, bouton1, bouton2, bouton3, bouton4 : gtk_button; bouton5, bouton6, bouton7, bouton8, bouton9 : gtk_button; pos : Gint := -1; valeur : string :=""; --bouton: array(0 .. 9) of Gtk_Button; G : constant array(0 .. 9) of Guint := (17, 14, 17, 20, 14, 17, 20, 14, 17, 20); D : constant array(0 .. 9) of Guint := (20, 17, 20, 23, 17, 20, 23, 17, 20, 23); H : constant array(0 .. 9) of Guint := (17, 14, 14, 14, 11, 11, 11, 8, 8, 8); B : constant array(0 .. 9) of Guint := (19, 16, 16, 16, 13, 13, 13, 10, 10, 10); -- procedure affich0 (emet : access gtk_widget_record'class) is -- begin -- insert_text(Ecran, "0", pos); -- fonction issue de Gtk.Editable -- end affich0; procedure affich1 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "1", pos); end affich1; procedure affich2 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "2", pos); end affich2; procedure affich3 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "3", pos); end affich3; procedure affich4 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "4", pos); end affich4; procedure affich5 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "5", pos); end affich5; procedure affich6 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "6", pos); end affich6; procedure affich7 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "7", pos); end affich7; procedure affich8 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "8", pos); end affich8; procedure affich9 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "9", pos); end affich9; procedure affich_plus (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "+", pos); end affich_plus; procedure effacer (emet : access gtk_widget_record'class) is begin delete_text(Ecran, 0, pos); end effacer; package traitement is new callback (gtk_widget_record); begin .....................
En bleu, toute la partie que j'ai voulu déplacer dans un paquetage, qui lui ressemble à ceci :
La spécif.
Le corps
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 --**************************************************** --* * --* Paquetage P_affichage_calc.ads (spécification) * --* * --* ------------------------------------------------ * --* * --* Auteur : Pascal RICHARD * --* Date : 19/04/2007 - 01:19 * --* * --**************************************************** with Glib; use Glib; with Gtk.GEntry; use Gtk.GEntry; with gtk.widget; use gtk.widget; with Gtk.Handlers; use Gtk.Handlers; package P_affichage_calc is package traitement is new callback (gtk_widget_record); procedure affich0 (emet : access gtk_widget_record'class); procedure affich1 (emet : access gtk_widget_record'class); procedure affich2 (emet : access gtk_widget_record'class); procedure affich3 (emet : access gtk_widget_record'class); procedure affich4 (emet : access gtk_widget_record'class); procedure affich5 (emet : access gtk_widget_record'class); procedure affich6 (emet : access gtk_widget_record'class); procedure affich7 (emet : access gtk_widget_record'class); procedure affich8 (emet : access gtk_widget_record'class); procedure affich9 (emet : access gtk_widget_record'class); end P_affichage_calc;
A la compilation du corps, j'ai un warning
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 --**************************************************** --* * --* Paquetage P_affichage_calc.adb (corps) * --* * --* ------------------------------------------------ * --* * --* Auteur : Pascal RICHARD * --* Date : 19/04/2007 - 01:19 * --* * --**************************************************** with gtk.editable; use gtk.editable; package body P_affichage_calc is Ecran : gtk_gentry; pos : Gint := -1; procedure affich0 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "0", pos); -- fonction issue de Gtk.Editable end affich0; procedure affich1 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "1", pos); end affich1; procedure affich2 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "2", pos); end affich2; procedure affich3 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "3", pos); end affich3; procedure affich4 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "4", pos); end affich4; procedure affich5 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "5", pos); end affich5; procedure affich6 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "6", pos); end affich6; procedure affich7 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "7", pos); end affich7; procedure affich8 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "8", pos); end affich8; procedure affich9 (emet : access gtk_widget_record'class) is begin insert_text(Ecran, "9", pos); end affich9; --package traitement is new callback (gtk_widget_record); end P_affichage_calc;
Alors, je sais qu'il y a un truc que je dois faire comme un manche, mais j'avoue que je ne vois pas trop quoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Ecran is never assigned a value
Ah oui, j'oubliais, voici le code créé pour le bouton 0
Si quelqu'un a une idée ?!?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ... gtk_new(bouton0, "0"); attach_defaults(Table, bouton0, g(0), d(0), h(0), b(0)); traitement.connect (bouton0, "clicked", traitement.to_marshaller(affich0'access)); ...
Partager