Thread Suche: Tabelle mit DragDrop-Funktionalität
(31 answers)
Opened by
GoodFella
at 2007-01-09 21:27
User since 2007-01-09
192
Artikel
BenutzerIn
Geil, danke. Habe rausgefunden, wie man einzeln Zellenattribute ändert, nämlich mit $t->tagCell(tag, index); tag musste man vorher mit $t->tagConfigure(name, attribute) erstellen.. Hier jetzt das TestScript in seiner Endfassung:
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
#!/usr/local/bin/perl -w
use Tk; use Tk::TableMatrix; require Tk::JBrowseEntry; require Tk::DragDrop; require Tk::DropSite; use strict;
my $tm_array = {}; my $t; my @drag = (); my @drop = ();
sub switch_cells { if ($drag[0] == $drop[0]) # Selbe Zeile { if ($drag[1] >= 0) # Kein Titel { my $drag_coords = $drag[0].','.$drag[1]; my $drop_coords = $drop[0].','.$drop[1]; my $drag_val = $tm_array->{$drag_coords}; my $drop_val = $tm_array->{$drop_coords};
$t->set($drop_coords, $drag_val); $tm_array->{$drop_coords} = $drag_val;
$t->set($drag_coords, $drop_val); $tm_array->{$drag_coords} = $drop_val; } } }
my $start_row = -3; my $end_row = 7; my $start_col = -2; my $end_col = 6; my $display_cols = 10; my $display_rows = 10; my $nr_rows = $end_row - $start_row + 1; my $nr_cols = $end_col - $start_col + 1; my $title_rows = ($start_row < 0) ? (abs($start_row)) : (0); my $title_cols = ($start_col < 0) ? (abs($start_col)) : (0);
foreach my $row (($start_row - $title_rows)..$end_row) { foreach my $col (($start_col - $title_cols)..$end_col) { $tm_array->{"$row,$col"} = "$row:$col"; } }
my $top = MainWindow->new; $top->geometry('870x300');
$top->bind( '<MouseWheel>', [ sub { $_[0]->yviewScroll(-($_[1]/120)*3, 'units'); }, Tk::Ev('D') ] );
$t = $top->Scrolled( 'TableMatrix', -titlerows => $title_rows, -titlecols => $title_cols, -rows => $nr_rows, -cols => $nr_cols, -height => $display_rows, -width => $display_cols, -variable => $tm_array, -roworigin => $start_row, -colorigin => $start_col, -colstretchmode => 'none', -rowstretchmode => 'none', -selectmode => 'single', -drawmode => 'fast', -maxwidth => 800, -maxheight => 600, -rowheight => -20, -colwidth => -100, -resizeborders => 'none', -sparsearray => 0, -selecttitle => 0, -state => 'disabled', -font => ['Tahoma', 10, 'bold'], -bg => '#D4D0C8', -fg => '#000000' );
$t->tagConfigure('Normal', -bg => '#D4D0C8', -fg => 'black'); $t->tagConfigure('DragSelected', -bg => '#EEEE11', -fg => 'black'); #$t->tagConfigure('DarkRed', -bg => '#881111', -fg => 'black'); #$t->tagConfigure('LightRed', -bg => '#EE9999', -fg => 'black'); #$t->tagConfigure('DarkGreen', -bg => '#118888', -fg => 'black'); #$t->tagConfigure('LightGreen', -bg => '#99EEEE', -fg => 'black');
my $cb_use = $t->Checkbutton( -text => 'nutzen' ); my @test_arr = ( 'TEXT', 'ZAHL', '#.## ¤', '#.## ¤ / # ¤', 'PLZ', 'TT.MM.JJJJ', 'TT.MM.JJ' ); my $test_var = $test_arr[0]; my $be_format = $t->JBrowseEntry( -label => '', -variable => \$test_var, -choices => \@test_arr, -state => 'normal', -font => ['Tahoma', 8], -width => 10 ); my $lbl_hl = $top->Label(-text => "Headline");
$t->windowConfigure("-3,0", -window=>$cb_use); $t->windowConfigure("-2,0", -window=>$be_format); $t->windowConfigure("-1,0", -window=>$lbl_hl);
my ($dnd_t, $ds_t); $dnd_t = $t->DragDrop( -event => '<B1-Motion>', -sitetypes => [qw(Local)], -startcommand => sub { $t->tagCell('Normal', $drag[0].','.$drag[1]) if (@drag); @drag = split(",", $t->index('@'.($t->pointerx - $t->rootx).','.($t->pointery - $t->rooty))); $dnd_t->configure( -text => $tm_array->{$drag[0].','.$drag[1]} ); $t->tagCell('DragSelected', $drag[0].','.$drag[1]); return 0; } ); $ds_t = $t->DropSite ( -droptypes => ['Local'], -dropcommand => sub { @drop = split(",", $t->index('@'.($t->pointerx - $t->rootx).','.($t->pointery - $t->rooty))); $t->tagCell('Normal', $drag[0].','.$drag[1]); &switch_cells; } );
$t->place( -x => 20, -y => 20 );
my $button = $top->Button( -text => "Exit", -width => 135, -command => sub{ $top->destroy } ); $button->place( -x => 20, -y => 260 );
Tk::MainLoop;
Hoffe, dass die, die nach mir kommen, es dadurch nicht so schwer haben.
View full thread Suche: Tabelle mit DragDrop-Funktionalität
|