Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
994 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1489309
Profil sup​primé
Posté le 10-12-2006 à 22:34:47  answer
 

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
mood
Publicité
Posté le 10-12-2006 à 22:34:47  profilanswer
 

n°1489376
Profil sup​primé
Posté le 11-12-2006 à 09:22:06  answer
 

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.

n°1489745
apprentitu​x
Posté le 11-12-2006 à 18:00:04  profilanswer
 

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

n°1489812
Profil sup​primé
Posté le 11-12-2006 à 20:14:46  answer
 

Merci pour ton aiguillage apprentitux  ;)

n°1490613
Profil sup​primé
Posté le 12-12-2006 à 20:42:32  answer
 

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

n°1490617
Profil sup​primé
Posté le 12-12-2006 à 21:04:32  answer
 

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

n°1490687
Profil sup​primé
Posté le 13-12-2006 à 08:30:30  answer
 


 
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  

n°1492098
Profil sup​primé
Posté le 15-12-2006 à 21:54:30  answer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

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

 

Sujets relatifs
algo convertion decimal binaireun algo pour des éléments identiques d'une matrice
[algo] Checksum entier 10 chiffres non signécombinaisons avec répétition : algo itératif ?
[ Algo ] extrapolation / interpolation? pour un jeuActualiser une horloge
Pavé numérique virtuel à intégrerframrate dependant (probleme de math algo plus que de C/C++...)
Vie artificielle - Algo génétique, ANN, etc ...papillons algo et graph
Plus de sujets relatifs à : [GtkAda][Gtk][[Algo] Une horloge (numerique), à quoi ça ressemble ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR