IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Problème avec GTK Ada et les Drawing_Area


Sujet :

Ada

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Points : 49
    Points
    49
    Par défaut Problème avec GTK Ada et les Drawing_Area
    Bonjour,

    je suis tout juste inscrit sur developpez.net. Je viens de me remettre à GtkAda et j'aurais voulu afficher une GTK_Drawing_Area dans une fenêtre, et pouvoir y tracer des figures de bases (rectangles ...), façon Paint. Problème, je tourne en rond depuis quelques heures entre les Gdk_Window, GDK_GC, GDK_Drawable, GTK_Drawing_Area ... si quelqu'un pouvait m'éclaircir les idées en la matière ou me proposer un bout de code tout simple, cela m'aiderait beaucoup.

    Merci

  2. #2
    Membre régulier Avatar de poincare
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 81
    Points
    81
    Par défaut Drawing Area dans GTK Ada
    Des exemples de code :
    --sur le tracé avec Double buffering
    http://home.roadrunner.com/~jbmatthews/gtk/lady.html
    --Utilisation de Glade2
    http://www.adasafehouse.webs.com/GtkAda.html#Gadget

    Des exemples sont disponibles égalment dans le code de GTKada dans le répertoire :
    \GtkAda\share\examples\gtkada

    Pour voir la hierarchie de l'objet Drawing_Area :
    http://gtk.php.net/manual/en/gtk.gtkdrawingarea.php

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Points : 49
    Points
    49
    Par défaut
    Merci pour les liens . Je fais quelques essais, malheureusement, je me retrouve toujours avec une erreur à l'exécution. Voici mon code :

    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
    WITH ada.Text_IO ;                  USE ada.Text_IO ;
    WITH Gtk.Main ;                     USE Gtk.Main ;
    WITH Gtk ;                          USE Gtk ;
    WITH Gtk.Widget ;                   USE Gtk.Widget ;
    WITH gtk.window ;                   USE gtk.window ;
    WITH Gtk.Drawing_Area;              USE Gtk.Drawing_Area;
    WITH Gdk.Pixmap ;                   USE Gdk.Pixmap ;
    WITH GDK.Drawable ;                 USE GDK.Drawable;
    WITH GDK.GC ;                       USE GDK.GC ;
    WITH GDK.Color ;                    USE GDK.Color ; 
     
    PROCEDURE Prog IS
     
       Win         : GTK_Window ;
       Sheet       : GTK_Drawing_Area ;
       Pix         : GDK_Drawable;
       GC       : GDK_GC ;
       Color : GDK_Color ; 
     
    BEGIN
       Init ;
     
       --Creation de la fenetre
       GTK_New(Win) ;
       Set_Title(Win,"Essai") ;
       Set_Default_Size(Win,900,600) ;
     
       --Creation de la Drawing Area
       GTK_New(Sheet) ;
       set_size_request(Sheet,900,600) ;
       Add(Win,Sheet) ;
       Show_All(Win) ;
     
       --Creation de la couleur desiree
       Gdk_New (GC, Get_Window (Win));
       Set_RGB(Color,255,255,255) ; 
       Set_Foreground(GC,Color);
     
       --debut des ennuis : tentative infructueuse de tracer un point ou un rectangle :(
       Draw_Point(Pix,GC,10,10) ;
       Draw_Rectangle(Pix, GC, True, 0, 0, 800, 500);
     
       Gtk.Main.Main ;
     
    END Prog ;
    Pas de soucis à la compilation, malheureusement, à l'exécution, les lignes 40 et 41 entraînent l'erreur : raised PROGRAM_ERROR : EXCEPTION_ACCESS_VIOLATION. Je ne comprends pas pourquoi. Pourtant ce code n'est pas bien compliqué, je dois manquer une étape

  4. #4
    Membre régulier Avatar de poincare
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 81
    Points
    81
    Par défaut GTK Ada Drawing Area
    Après analyse, la variable Pix n'a pas été créée et le programme essaie de travailler avec un pointeur null.

    En fait, GTK est basé sur la programmation par événements et il faut attacher des handlers aux signaux "resize", "expose"....
    Je ne connais pas le but recherché ici : programme interactif type GUI ou simple tracé de figure réalisable en séquentiel avec la bibliothèque Cairo qui est en dessous de GTK.
    Code sans erreur à l'execution mais qui n'affiche toujours pas le rectangle.
    Pas le temps de creuser.

    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
     
    with Ada.Text_IO;      use Ada.Text_IO;
    with Gtk.Main;         use Gtk.Main;
    with Gtk;              use Gtk;
    with Gtk.Widget;       use Gtk.Widget;
    with Gtk.Window;       use Gtk.Window;
    with Gtk.Drawing_Area; use Gtk.Drawing_Area;
    with Gdk.Pixmap;       use Gdk.Pixmap;
    with Gdk.Drawable;     use Gdk.Drawable;
    with Gdk.GC;           use Gdk.GC;
    with Gdk.Color;        use Gdk.Color;
    with Glib;             use Glib;
    with Gtk.Handlers;
     
    procedure Prog is
     
       Win   : Gtk_Window;
       Sheet : Gtk_Drawing_Area;
       White_Gc : Gdk.GC.Gdk_GC;  -- graphical context used to plot
     
       package Handlers is new Gtk.Handlers.Callback (Gtk_Widget_Record);
       procedure Destroy (Widget : access Gtk_Widget_Record'Class) is
       begin
          Gtk.Main.Main_Quit;
       end Destroy;
     
    begin
       Init;
     
       --Creation de la fenetre
       Gtk_New (Win);
       Set_Title (Win, "Essai");
       Set_Default_Size (Win, 900, 600);
       -- Ajout de la terminaison du programme
       Handlers.Connect (Win, "destroy", Handlers.To_Marshaller (Destroy'Access));
     
       --Creation de la Drawing Area
       Gtk_New (Sheet);
       Set_Size_Request (Sheet, 900, 600);
       Add (Win, Sheet);
       -- Quand tous les widgets sont crees, on affiche
       Show_All (Win);
     
       --Creation du contexte graphique
          Gdk.GC.Gdk_New (White_Gc, Get_Window (Sheet));
          Gdk.GC.Set_Foreground
            (White_Gc,
             Gdk.Color.White (Gtk.Widget.Get_Default_Colormap));
     
       --debut des ennuis : tentative infructueuse de tracer un point ou un
       --rectangle :( 
       Draw_Rectangle (Get_Window (Sheet), White_Gc, True, 0, 0, 800, 500);
     
       Gtk.Main.Main;
     
    end Prog;

  5. #5
    Membre régulier Avatar de poincare
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 81
    Points
    81
    Par défaut [Resolu] Utilisation d'un double buffer
    Le code suivant affiche un rectangle correctement :
    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
    with Gtk.Main;     use Gtk.Main;
    with Gtk;          use Gtk;
    with Gtk.Widget;   use Gtk.Widget;
    with Gtk.Window;   use Gtk.Window;
    with Gdk.Drawable; use Gdk.Drawable;
    with Gdk.GC;       use Gdk.GC;
    with Gdk.Color;    use Gdk.Color;
    with Gtk.Handlers;
    -- Paquetage disponible dans GtkAda\share\examples\gtkada\doublebuffer
    with Double_Buffer;
     
    procedure Prog is
     
       Win      : Gtk_Window;
       Sheet    : Double_Buffer.Gtk_Double_Buffer; -- descendant de Drawing Area
       White_Gc : Gdk.GC.Gdk_GC;  -- graphical context
     
       package Handlers is new Gtk.Handlers.Callback (Gtk_Widget_Record);
     
       procedure Destroy (Widget : access Gtk_Widget_Record'Class) is
          pragma Unreferenced (Widget);
       begin
          Gtk.Main.Main_Quit;
       end Destroy;
     
    begin
       Gtk.Main.Set_Locale;
       Gtk.Main.Init;
     
       --  Creation de la fenetre
       Gtk_New (Win);
       Set_Title (Win, "Essai avec GTKAda");
       Set_Default_Size (Win, 900, 600);
       --  Ajout de la terminaison du programme
       Handlers.Connect (Win, "destroy", Handlers.To_Marshaller (Destroy'Access));
     
       --   Creation de la Drawing Area
       Double_Buffer.Gtk_New (Sheet);
       Double_Buffer.Set_Size_Request (Sheet, 900, 600);
       Double_Buffer.Set_Back_Store (Sheet, True);
       -- La gestion du double bufffer n'est pas faite par Gtk.Widget
       Double_Buffer.Set_Double_Buffered (Sheet, False);
       Add (Win, Sheet);
     
       -- Quand tous les widgets sont crees, on affiche
       Show_All (Win);
     
       --  Creation du contexte graphique
       Gdk.GC.Gdk_New (White_Gc, Double_Buffer.Get_Window (Sheet));
       Gdk.GC.Set_Foreground
         (White_Gc,
          Gdk.Color.White (Gtk.Widget.Get_Default_Colormap));
     
       -- Remplissage du Pixmap
       Draw_Rectangle
         (Double_Buffer.Get_Pixmap (Sheet),
          White_Gc,
          True,
          0,
          0,
          800,
          500);
       -- Affichage initial a l'ecran
       Double_Buffer.Draw (Sheet);
     
       Gtk.Main.Main;
     
    end Prog;

  6. #6
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Points : 49
    Points
    49
    Par défaut
    Merci je teste ça de suite

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec la fonction pow(les puissance)
    Par Clément76 dans le forum C
    Réponses: 10
    Dernier message: 04/10/2006, 12h44
  2. Réponses: 2
    Dernier message: 02/08/2006, 16h46
  3. [Tableaux] Problème avec un array et les pseudo frame
    Par azerty53 dans le forum Langage
    Réponses: 6
    Dernier message: 10/05/2006, 14h57
  4. Problème avec l'unicode et les exceptions
    Par Rafy dans le forum C++
    Réponses: 5
    Dernier message: 07/02/2006, 00h52
  5. problème avec strtok pour récupérer les vides
    Par manikou dans le forum MFC
    Réponses: 4
    Dernier message: 02/06/2005, 20h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo