> Thank you again. I think we have discussed this before 
> haven't we. Can you write the smallest (complete) script to 
> show how to use tkdnd to do a simple drag and drop from say a 
> file on the desktop to a Tkx app listbox, which will show the 
> filename in the listbox?

here you go

> 
> Then, we reduce the problem to just one of installing tkdnd 
> and then packaging it with our applications. Assuming we are 
> all using something like ActiveState's PDK PerlApp program to 
> do the packaging, maybe we can come up with a nice simple solution.

first version, with more "Tcl" syntax, and I like this better;:

use strict;
use Tkx;

Tkx::eval(<<'EOS');
#the line below is just creating a widget - no "dnd" consideration
pack [entry .current_dir -textvariable ptclv_current_dir] -side left -fill x 
-expand 1
# and this actually makes DND work
package require tkdnd
tkdnd::drop_target register .current_dir *
bind .current_dir <<Drop:DND_Files>> {
   set ptclv_current_dir [lindex %D 0]
   puts "I have '$ptclv_current_dir'"
}
EOS

Tkx::MainLoop;



second version, with more Tkx syntax:

use strict;
use Tkx;

Tkx::package_require('tkdnd');

my $e;
my $mw = Tkx::widget->new(".");
my $w_edit = $mw->new_entry(-name=>".current_dir",-textvariable=>\$e);
$w_edit->g_pack(qw '-fill both -expand true');

Tkx::tkdnd__drop___target_register($w_edit,'*');
Tkx::bind ($w_edit, '<<Drop:DND_Files>>', [ sub {
       $e = shift;
       print "I have '$e'\n";
}, Tkx::Ev("%D")]);

Tkx::MainLoop;

I've tested both version, they work.
If they are not working for you, this is probably due to lack of tkdnd package.

Regards,
Vadim.

Reply via email to