![]() |
|< 1 2 3 4 >| | ![]() |
32 Einträge, 4 Seiten |
QuoteDropSites can't be within a scrolling Table (this is a Table bug,
not a DragDrop one).
QuoteMListbox does not and cannot support several individually color rows - columns, yes, but not rows.
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;
QuoteDas ist unter Windows, nicht wahr? Ich habe hier nur FreeBSD/X11 zur Verfügung und das Verhalten sieht korrekt aus: wenn ich nach ganz unten und ganz rechts scrolle, dann sind die Koordinaten, die nach STDOUT geschrieben werden, richtig.Ich habe jetzt ein Beispielscript geschrieben:
Code: (dl )...
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.
QuoteDas stimmt, Tk::Table sollte man nur für kleine Sachen verwenden. Bei größeren Tabellen sollte man Tk::TableMatrix, Tk::HList oder andere Lösungen bevorzugen. Leider bauen diese Lösungen nicht wie Tk::Table auf "echten" Unterwidgets auf, sondern haben besondere, effizientere Unterwidgets, die aber nicht mit Drag'n'Drop zusammenarbeiten.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 :/
QuoteDas hört sich komisch an. Ich dachte immer, dass die DnD-Fenster mit overrideredirect(1) geöffnet werden und diese für das Fenstersystem (und damit auch die Taskleiste) komplett unsichtbar sein sollen. Wie sieht es aus, wenn du selber overrideredirect(1) auf ein Toplevel aufrufst?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...
QuoteMachst du Scherze? Ein Forum, in dem es in vier Jahren nur fünf Themen gab?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
QuoteC:\Programme\Perl\lib\Tk\Tk-TableMatrix-1.22>make
Microsoft ® Program Maintenance Utility Version 1.50
Copyright © Microsoft Corp 1988-94. All rights reserved.
cp TableMatrix.pm blib\lib\Tk\TableMatrix.pm
AutoSplitting blib\lib\Tk\TableMatrix.pm (blib\lib\auto\Tk\TableMatrix)
cp TableMatrix/Spreadsheet.pm blib\lib\Tk\TableMatrix\Spreadsheet.pm
cp TableMatrix/SpreadsheetHideRows.pm blib\lib\Tk\TableMatrix\SpreadsheetHideRow
s.pm
cd pTk && MAKE
Microsoft ® Program Maintenance Utility Version 1.50
Copyright © Microsoft Corp 1988-94. All rights reserved.
cp mm.h ..\blib\arch\Tk\pTk\mm.h
cp tkTable.h ..\blib\arch\Tk\pTk\tkTable.h
cp tkTableversion.h ..\blib\arch\Tk\pTk\tkTableversion.h
cp version.h ..\blib\arch\Tk\pTk\version.h
cl -c -I../../../Tk -I../../../Tk/pTk/mTk/xlib -IC:/Programme/Perl/lib/
Tk/pTk -I. -Ibitmaps -I../../../Tk/pTk/mTk/xlib -nologo -GF -W3 -MD -Zi -DNDEBU
G -O1 -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DNO_HASH_SEED -DUSE_SITE
CUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT
_READFIX -MD -Zi -DNDEBUG -O1 -DVERSION=\"1.22\" -DXS_VERSION=\"0.9\" "-IC:
\Programme\Perl\lib\CORE" tkTable.c
tkTable.c
c:\programme\perl\lib\tk\tk-tablematrix-1.22\ptk\tkTable.h(20) : fatal error C10
83: Cannot open include file: 'string.h': No such file or directory
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x2'
Stop.
C:\Programme\Perl\lib\Tk\Tk-TableMatrix-1.22>
![]() |
|< 1 2 3 4 >| | ![]() |
32 Einträge, 4 Seiten |