Bonjour,

Je souhaite réaliser une application simple constituée d'une fenêtre sur laquelle on peut glisser-déposer un ou plusieurs fichiers sélectionner, pour ensuite effectuer différents traitements. Je me suis donc inspiré d'un exemple de la FAQ qui utilise le module Tk :: Dropsite.

Mon problème est que pour réaliser le glisser-déposer à la souris, il est préférable que la fenêtre de mon application reste visible au 1er plan, même si pendant la sélection des fichiers le focus est (si j'ai bien compris) affecté par exemple à la fenêtre de l'explorateur Windows.

Comme conseillé dans les différents posts que j'ai pu lire, j'ai donc essayé les méthode $widget->focus et $widget->focusForce (lignes en commentaire dans le code ci-dessous), mais ça ne marche pas, en tous cas sur mon PC.

Je précise que mon système est XP SP2, et je travaille sous Perl 5.10.0 de ActivePerl.

Le code ci-dessous récupère simplement les noms des fichiers que l'on a déposés sur la fenêtre et affiche leur chemin.

Aurai-je mal compris et y aurai-t-il d'autres instructions permettant de garder une fenêtre visible au premier plan, sans que ce soit la fenêtre active, avec la possibilité de la réduire, si on le souhaite, en utilisant le bouton adéquat à côté de la croix rouge ?

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
#!/usr/bin/perl -w
use strict;
use warnings;
use Tk;
use Tk::Dropsite 'Win32';
 
my $main = MainWindow->new( -title => 'Test focus', );
#$main->focus; 
#$main->focusForce; 
 
my $widgetTextDragDrop = $main->Scrolled('Text',-background => 'white',
                                                -scrollbars => 'osoe',
                                                -wrap => 'none',
                                                -height => 7,
                                        )->pack(qw/ -side top -fill both -expand 1 /);
 
$widgetTextDragDrop->DropSite( -dropcommand => [ \&ActionDrop, $widgetTextDragDrop, ],
                               -droptypes => 'Win32',
                             );                             
MainLoop;
 
sub ActionDrop {
    my ( $widgetTextDragDrop ) = @_;    
    my $sel = $widgetTextDragDrop->SelectionGet( -selection => 'CLIPBOARD' );
    foreach my $fichier_rep ( split( /\n/, $sel ) ) {
        $widgetTextDragDrop->insert( 'end', "$fichier_rep\n" );                        
    }
    return;
}