Thread Suche: Tabelle mit DragDrop-Funktionalität (31 answers)
Opened by GoodFella at 2007-01-09 21:27

GoodFella
 2007-01-11 21:56
#46083 #46083
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,09.01.2007, 21:28]Gibt es VC# auch für FreeBSD? Wie unterschiedlich wird es wohl dort aussehen! (Ich denke an das inkompatible Aussehen bei vielen (alten) Java-Anwendungen)

Zur DragDrop+Tk::Table: versuch doch mal ein Skript zu schreiben, dass diesen Bug produziert, dann kann ich vielleicht den Bug fixen.[/quote]
Ein VisualPerl wär trotzdem nett ;D

Ich habe jetzt ein Beispielscript geschrieben:
Code: (dl )
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
#! /usr/local/bin/perl -w
use Tk;
use Tk::Table;
require Tk::DragDrop;
require Tk::DropSite;
use strict "refs";
use strict "subs";
use strict "vars";

my $cols = 10;
my $rows = 8;
my $display_cols = 7;
my $display_rows = 5;

my (@tmp, @dnd_tmp, @ds_tmp);

my $mw = new MainWindow();
my $frm_table = $mw->Frame( -borderwidth => 2, -relief => 'raised')->pack( -expand => 'yes', -fill => 'both');
my $table = $frm_table->Table( -columns => $display_cols, -rows => $display_rows, -fixedrows => 1, -scrollbars => 'se', -relief  => 'raised');

foreach my $c ( 1 .. $cols)
{
 my $tmp = $table->Label( -text => "H$c", -width => 6, -relief => 'raised');
 $table->put( 0, $c, $tmp );
}

foreach my $r ( 1 .. $rows )
{
 foreach my $c ( 1 .. $cols )
  {    
   $tmp[$r][$c] = $table->Label( -text => "$r:$c", -padx => 2, -anchor => 'w', -background => 'white', -relief => 'groove' );
   $dnd_tmp[$r][$c] = $tmp[$r][$c]->DragDrop( -event => '<B1-Motion>',
                                              -sitetypes => [qw(Local)],
                                              -startcommand =>  sub { print "Cell $r:$c Drag\n"; $dnd_tmp[$r][$c]->configure( -text => "$r:$c" ); return 0; } );
   $ds_tmp[$r][$c] = $tmp[$r][$c]->DropSite ( -droptypes     => ['Local'],
                                              -dropcommand   => sub { print "Cell $r:$c Drop\n"; } );

   $table->put( $r, $c, $tmp[$r][$c] );
  }  
}
$table->pack( -expand => 'yes', fill => 'both');
my $frm_button = $mw->Frame( -borderwidth => 4 )->pack(-fill => 'y');
my $btn_exit = $frm_button->Button( -text => "Exit",  -width => 10, -command => sub { exit } )->pack();

MainLoop;


Wie auf den von mir zitierten externen Quellen beschrieben, verhält sich DragnDrop nach Scrollen der Tabelle falsch.
Draggen verhielt sich in meinen Tests immer richtig, Droppen hingegen verhält sich so, als sei die Tabelle nicht scrollbar; demnach liegt das Problem wohl bei Tk::DropSite. Meines Erachtens wurde hier vergessen, dass X und Y Offset des aktuellen Zustandes der Scrollbar in die Berechnung der Koordinaten der DropSite einfliessen zu lassen.

Ein anderes Problem ist, dass die Tabellenfunktionalität ab 20x20 SpaltenxZeilen nicht mehr genügend Reaktion besitzt, ab 30x30 gänzlich unbenutzbar wird; hier ist die Reaktionszeit auf einmal Scrollen, clicken oder was auch immer über 10 Sekunden. Weiss im Moment echt nicht mehr weiter :/

Ausserdem werden beim Benutzen von DragnDrop im Hintergrund Fenster geöffnet, die dann in der Taskleiste sichtbar sind (WinXP); diese schliessen sich meist nicht automatisch mit dem Perlscript...

Und wo ich grad so schön dabei bin: Habe vor einiger Zeit bei Buha eine Frage gestellt, die bis heute nicht beantwortet wurde [Soll ich hier einen neuen Thread aufmachen?] => http://www.buha.info/board/showthread.php?t=53256


Gruss

Pete\n\n

<!--EDIT|GoodFella|1168546573-->

View full thread Suche: Tabelle mit DragDrop-Funktionalität