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

GTK+ Discussion :

[Ruby] Zone de selection


Sujet :

GTK+

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 10
    Points
    10
    Par défaut [Ruby] Zone de selection
    Bonjour a tous,

    Je voudrai savoir si quelqu'un sais comment réaliser une zone de sélection sur une image.

    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
     
    def image() 
     
    $file_0 = "interface.png" ;
    $FOND_X = 532661 ;
    $FOND_Y = 152837 ;
    $FOND_W = 780 ;
    $FOND_H = 357 ;
     
    window = Gtk::Window.new(Gtk::Window::TOPLEVEL)
    window.set_title("Gerer image")
     
    table = Gtk::Table.new(1, 4, false)
     
    ## Create document
    sw=Gtk::VBox.new                                                                                                                                        
    sw.set_size_request($FOND_W, $FOND_H)
     
    $src =  Gdk::Pixbuf.new($file_0)
     
    $area = Gtk::DrawingArea.new
    $area.set_size_request($FOND_W, $FOND_H)
     
    $area.signal_connect("expose_event") do
    alloc = $area.allocation
     
    $area.window.draw_pixbuf($area.style.fg_gc($area.state), $src,
                            0,0,0,0,$FOND_W,$FOND_H,Gdk::RGB::Dither::NORMAL,$FOND_W,$FOND_H)
          if $rect_en_cours 
              dessine_rectangle(true)
          end
    end
     
    sw.add($area)
    table.attach_defaults(sw,0,1,2,3)
     
     
    window.border_width = 20
    window.add(table)
    window.show_all
     
    Gtk.main
    end
    Voilà avec le code si dessus j'affiche une image et je voudrai pouvoir faire une selection et que sa me retourne les coordonées, si quelqu'un a une idée?

    merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    bon pour ceux que sa intéresserai j'ai trouvé la solutions
    il faut utilisai les signal_connect, et ensuite on peut créer les fonctions pour dessigné un rectangle en récupérant les coordonées.


    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
    window.signal_connect("button_press_event") do |*args|
      gere_event_press(*args)
    end
    window.signal_connect("button_release_event") do |*args|
      gere_event_release(*args)
    end
    window.signal_connect("motion_notify_event") do |*args|
      gere_event_motion(*args)
    end
    window.events |= (Gdk::Event::LEAVE_NOTIFY_MASK |
                        Gdk::Event::BUTTON_PRESS_MASK |
                        Gdk::Event::BUTTON_RELEASE_MASK |
                        Gdk::Event::POINTER_MOTION_MASK )
     
    def gere_event_press(widget,event)
          if event.button == 1
            $old_x = event.x - $DELTA_X
            $old_y = event.y - $DELTA_Y
            dessine_rectangle(false)
    	if(! $gcf)
            $gcf = Gdk::GC.new($area.window)
    	$gcf.rgb_fg_color = Gdk::Color.new(30000, 0, 300)
            $gcf.set_line_attributes(1, Gdk::GC::LINE_SOLID,
                                        Gdk::GC::CAP_BUTT,
    				    Gdk::GC::JOIN_MITER)
    	end
            x = $old_x - 5
            y = $old_y - 5
            $area.window.draw_line($gcf,$old_x,$old_y + 8,$old_x,$old_y - 5)
            $area.window.draw_line($gcf,$old_x + 8,$old_y,$old_x - 5,$old_y)      
          end
     
          # We've handled the event, stop processing
          return true
        end
     
     
    def gere_event_release(widget,event)
          if event.button == 1
            $new_x = event.x - $DELTA_X
            $new_y = event.y - $DELTA_Y
            dessine_rectangle(true)
            interactive_dialog_clicked()
     
          end
     
          # We've handled the event, stop processing
          return true
        end
    def gere_event_motion(widget,event)
       $statusbar.pop(0)
       $statusbar.push(0,"Curseur Position #{$FOND_X + event.x - $DELTA_X}/#{$FOND_Y - event.y + $DELTA_Y} ")
     #$statusbar.push(0,"Coords(m) #{$FOND_X + event.x - $DELTA_X}/#{event.y}")
            # We've handled the event, stop processing
          return true
        end

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

Discussions similaires

  1. Zone de selection avec date debut et date fin
    Par lanaine07 dans le forum IHM
    Réponses: 1
    Dernier message: 25/05/2011, 09h50
  2. [XL-2000] nom à une zone de selection
    Par dybmans dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/10/2010, 12h11
  3. Réponses: 3
    Dernier message: 17/11/2006, 12h23
  4. [MFC]creer une zone de selection
    Par jiraya43 dans le forum MFC
    Réponses: 3
    Dernier message: 04/05/2006, 15h31
  5. zone de selection multiple
    Par amigauss dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/02/2006, 13h01

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