[GtkAda][Gtk][[Algo] Une horloge (numerique), à quoi ça ressemble ?

Une horloge (numerique), à quoi ça ressemble ? [GtkAda][Gtk][[Algo] - Ada - Programmation

Marsh Posté le 10-12-2006 à 22:34:47    

http://denimes.net/image/gtk.gif
Bonjour,
 
je voudrais developper un petit programme GtkAda, mais je ne connais pas grands chose à Gtk,
pour l'instant, je sais à peine ouvrir et fermer une fenetre, et je shouhaite y intégrer une horloge numerique,
et Je n'ai aucune idée de l'architecture générale que peut prendre un tel programme.
 
Mon problème et un problème d'integration d'une horloge dans un application graphique.
 
Pour le moment j'ai un fichier principal "main.adb" dans lequel je declare une fenetre et l'initialise, et un paquetage dans lequel je declare le type de fenetre, assure l'initialisation de celle-ci ainsi que le traitement des appels en émanents (quit).
 
Merci de votre aide et de vos conseils  :jap:


Message édité par Profil supprimé le 10-12-2006 à 22:38:06
Reply

Marsh Posté le 10-12-2006 à 22:34:47   

Reply

Marsh Posté le 11-12-2006 à 09:22:06    

bonjour, voici mon code source dans l'etat actuel des choses ....
 
fichier principal "main" main.adb ::=

Code :
  1. with Gtk.Main;
  2. with Main_Windows;
  3. procedure main is
  4.   Win : Main_Windows.Main_Window;
  5. begin
  6.   Gtk.Main.Set_Locale;
  7.   Gtk.Main.Init;
  8.   Main_Windows.Gtk_New (Win);
  9.   Main_Windows.Show_All (Win);
  10.   Gtk.Main.Main;
  11. end main;


 
le fichier de specification du paquetage "main_windows" main_windows.ads ::=

Code :
  1. with Gtk.Notebook;
  2. with Gtk.Window;
  3.  
  4. package Main_Windows is
  5.  
  6.   type Main_Window_Record is new Gtk.Window.Gtk_Window_Record with
  7.      record
  8.         Notebook       : Gtk.Notebook.Gtk_Notebook;
  9.      end record;
  10.   type Main_Window is access all Main_Window_Record'Class;
  11.  
  12.   procedure Gtk_New (Win : out Main_Window);
  13.   procedure Initialize (Win : access Main_Window_Record'Class);
  14.  
  15. end Main_Windows;

 
 
 
le fichier d'implementation du paquetage "main_windows" main_windows.adb ::=  

Code :
  1. ----------------------------
  2. -- with & use clause --
  3. ----------------------------
  4. ...
  5. ...
  6. ...
  7.  
  8. package body Main_Windows is
  9.  
  10.   package Notebook_Cb is new Gtk.Handlers.User_Callback
  11.     (Gtk_Notebook_Record, Gtk_Notebook);
  12.  
  13.   package Window_Cb is new Handlers.Callback (Gtk_Widget_Record);
  14.  
  15.   package Return_Window_Cb is new Handlers.Return_Callback
  16.     (Gtk_Widget_Record, Boolean);
  17.  
  18.   procedure Exit_Main (Object : access Gtk_Widget_Record'Class);
  19.   --  Callbacks when the main window is killed
  20.  
  21.   function Delete_Event
  22.     (Object : access Gtk_Widget_Record'Class) return Boolean;
  23.   -----------------
  24.   --  Exit_Main  --
  25.   -----------------
  26.  
  27.   procedure Exit_Main (Object : access Gtk_Widget_Record'Class) is
  28.      pragma Unreferenced (Object);
  29.   begin
  30.      Gtk.Main.Main_Quit;
  31.   end Exit_Main;
  32.  
  33.      ------------------
  34.   -- Delete_Event --
  35.   ------------------
  36.  
  37.   function Delete_Event
  38.     (Object : access Gtk_Widget_Record'Class) return Boolean
  39.   is
  40.      pragma Unreferenced (Object);
  41.   begin
  42.      --  Do not allow the user to kill the window by clicking on the icon,
  43.      --  he has to press explicitly "Quit"
  44.      return True;
  45.   end Delete_Event;
  46.  
  47.  
  48.  
  49.  
  50.   -------------
  51.   -- Gtk_New --
  52.   -------------
  53.  
  54.   procedure Gtk_New (Win : out Main_Window) is
  55.   begin
  56.      Win := new Main_Window_Record;
  57.      Initialize (Win);
  58.   end Gtk_New;
  59.  
  60.   ----------------
  61.   -- Initialize --
  62.   ----------------
  63.  
  64.   procedure Initialize (Win : access Main_Window_Record'Class) is
  65.      Frame    : Gtk.Frame.Gtk_Frame;
  66.      Label    : Gtk.Label.Gtk_Label;
  67.      Vbox     : Gtk.Box.Gtk_Box;
  68.      Style    : Gtk_Style;
  69.      Button   : Gtk.Button.Gtk_Button;
  70.      Bbox     : Gtk.Hbutton_Box.Gtk_Hbutton_Box;
  71.  
  72.   begin
  73.      Gtk.Window.Initialize (Win, Gtk.Enums.Window_Toplevel);
  74.      Window_Cb.Connect (Win, "destroy",
  75.                         Window_Cb.To_Marshaller (Exit_Main'Access));
  76.      Return_Window_Cb.Connect
  77.        (Win, "delete_event",
  78.         Return_Window_Cb.To_Marshaller (Delete_Event'Access));
  79.  
  80.      --  The global box
  81.      Gtk_New_Vbox (Vbox, Homogeneous => False, Spacing => 0);
  82.      Add (Win, Vbox);
  83.  
  84.      --  Label
  85.      Style := Copy (Get_Style (Win));
  86.      Set_Font_Description (Style, From_String ("Helvetica Bold 18" ));
  87.  
  88.      Gtk_New (Label, "xbusiness" );
  89.      Set_Style (Label, Style);
  90.      Pack_Start (Vbox, Label, Expand => False, Fill => False, Padding => 10);
  91.  
  92.      --  Notebook creation
  93.      Gtk_New (Win.Notebook);
  94.      Pack_Start (Vbox, Win.Notebook, Expand => True, Fill => True);
  95.      Gtk_New (Bbox);
  96.      Set_Layout (Bbox, Buttonbox_Spread);
  97.      Set_Spacing (Bbox, 40);
  98.  
  99.      Gtk_New (Button, "Quit" );
  100.      Pack_Start (Bbox, Button, Expand => True, Fill => False);
  101.      Window_Cb.Connect (Button, "clicked",
  102.                         Window_Cb.To_Marshaller (Exit_Main'Access));
  103.  
  104.      Pack_End (Vbox, Bbox, Expand => False, Padding => 5);
  105.  
  106.      --  Display everything
  107.      Show_All (Vbox);
  108.  
  109.   end Initialize;
  110.  
  111. end Main_Windows;


 
Faire un appel de calendar.clock ne me pose aucun problème, ni de tranformer cet heure de type time en chaine de caracteres, mais je me demande par contre dans quoi je vai afficher cette chaine et comment la metre à jour automatiquement.

Reply

Marsh Posté le 11-12-2006 à 18:00:04    

Un thread qui met à jour la date à intervalles réguliers dans un GtkLabel...
Mais y a peut-être des trucs déjà tout faits...

Reply

Marsh Posté le 11-12-2006 à 20:14:46    

Merci pour ton aiguillage apprentitux  ;)

Reply

Marsh Posté le 12-12-2006 à 20:42:32    

Apprentitux, bonsoir, permé moi de t'interpeller ainsi, ... je ne trouve pas oû placer ma tache. s'il te plais ? [:dawa_neowen]

Reply

Marsh Posté le 12-12-2006 à 21:04:32    

T'inquiète apprentitux, je vais trouver je crois .... merci encore

Reply

Marsh Posté le 13-12-2006 à 08:30:30    


 
Woai, ben j'ai pas trouvé en fait  :cry:  :whistle:  
 
 
je mais le code utilisé car le code ci-dessu ne correspond pas.
 
le main ::=

Code :
  1. with Gtk.Main;
  2. with Main_win; use Main_win;
  3. procedure main is
  4.        ia : T_Win_ia;
  5. begin
  6.   Gtk.Main.main;
  7. end main;


 
la spec du main_win ::=  

Code :
  1. with Gtk.Main;  use Gtk.Main;
  2. with Gtk.Window;        use Gtk.Window;
  3. with Gtk.Box;   use Gtk.Box;
  4. with Gtk.Label; use Gtk.Label;
  5. with Gtk.Button;        use Gtk.Button;
  6. --with Gtk.GEntry;        use Gtk.GEntry;
  7. --with Gtk.Widget;        use Gtk.Widget;
  8. --with Gtk.Handlers; use Gtk.Handlers;
  9.  
  10. with Ada.Finalization;
  11.  
  12. package Main_win is
  13.  
  14.        type T_Win_ia is new Ada.Finalization.Controlled with record
  15.                window_1        : Gtk_Window;
  16.                container_1     : Gtk_Box;
  17.                label_1 : Gtk_Label;
  18.                label_2 : Gtk_Label;
  19.  --              entry_1 : Gtk_Entry;
  20.  --              button_1        : Gtk_Button;
  21.        end record;
  22.  
  23.        procedure Initialize(Une_Ia : in out T_Win_ia);
  24.  
  25. --        procedure réponse
  26. --        (
  27. --                élément_Emetteur : access Gtk_Widget_Record'Class;
  28. --                L_Ia : T_Win_ia
  29. --        );
  30.  
  31. --        package Traitement is new User_Callback(Gtk_Widget_Record, T_Win_Ia);
  32.  
  33. end Main_win;


 
l'implé du main_win ::=

Code :
  1. package body Main_win is
  2.  
  3. --        procedure réponse(
  4. --                élément_Emetteur : access Gtk_Widget_Record'Class;
  5. --                L_ia : T_Win_ia) is
  6. --        begin
  7. --                set_Text(la_ia.label_2, "Bonjour a toi "&get_Text(L_ia.entry_1)&" !" );
  8. --        end réponse;
  9.  
  10.        procedure Initialize(Une_ia : in out T_Win_ia) is
  11.        begin
  12.                init;
  13.                gtk_New(une_ia.window_1);
  14.                set_Title(une_ia.window_1, "IA" );
  15.  
  16.                gtk_New_Vbox(une_ia.container_1);
  17.                gtk_New(une_ia.label_1, "Wait please" );
  18. --                gtk_New(une_ia.entry_1);
  19. --                gtk_New(une_ia.button_1, "Ok" );
  20. --                gtk_New(une_ia.label_2, "Qui dois-je saluer ?" );
  21.  
  22.                add(une_ia.window_1, une_ia.container_1);
  23.                pack_Start(une_ia.container_1, une_ia.label_1);
  24. --               pack_Start(une_ia.container_1, une_ia.entry_1);
  25.                pack_Start(une_ia.container_1, une_ia.button_1);
  26. --               pack_Start(une_ia.container_1, une_ia.label_2);
  27.  
  28. --                Traitement.Connect
  29. --                (
  30. --                        une_ia.button_1,
  31. --                        "clicked",
  32. --                        Traitement.to_Marshaller(réponse'Access),
  33. --                        une_ia
  34. --                );
  35.  
  36.                show_All(une_ia.window_1);
  37.        end Initialize;
  38. end Main_win;


 
Et donc, je drevrais placer quelque part, une tache qui mettrait à jour le label_1 en cour d'execution mais j'ai essayé dans le main, ça ne marche pas, dans l'implementation de la procedure "Initialise", ça ne marche pas non plus ... à priori  

Reply

Marsh Posté le 15-12-2006 à 21:54:30    

Woai  :bounce: , ça marche  
 
Merci encore apprentitux, j'avais si mal placé dans mon premier essais la declaration de ma tache qu'elle n'avais même pas démarer.
 
A non, zut, ça marche pas tout à fait, j'ai bien l'heure à la place de ma chaine initiale mais celle ci de tourne pas sans un evenement X  :??:


Message édité par Profil supprimé le 15-12-2006 à 21:58:55
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed