Schrift
[thread]5278[/thread]

Suche: Tabelle mit DragDrop-Funktionalität



<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten
GoodFella
 2007-01-09 21:27
#46078 #46078
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Ich schreibe gerade an einer GUI, die u.a. Exceldateien zusammenfügen soll, die z.T. nicht übereinstimmende Tabellenüberschriften, dafür aber übereinstimmende Datensorten haben.
In meinem ersten Versuch habe ich einen scrollbaren Frame erstellt, der mit in Tabellenform angeordneten JBrowseEntrys gefüllt wurde; nach einigem Testen stellte sich diese Methode allerdings als zu unkomfortabel heraus; die Dropdownmenus sind z.T. sehr lang und es dauert ewig, die Einstellungen vorzunehmen.
Nach 2 Wochen intensivem Nachdenken ist mir dann die Idee gekommen, die Daten ähnlich einer Exceltabelle anzuordnen und seitliche Drag&Drop-Funktionalität hinzuzufügen. Erstmal lange gegoogled... bin dann auf diese Seite gestossen:

http://groups.google.de/group....4b7c8fa


Wobei eigentlich nur Tk::MList in Frage käme; also, gleich auf CPAN, nachgeschaut, gibts nicht -> http://search.cpan.org/search?query=Tk%3A%3AMList&mode=all
..Weitergegoogled, bin dann auf Tk::DragDrop gestossen, auf ausserdem auf folgendes Beispiel:
http://search.cpan.org/src/NI-S/Tk-804.027/dnd_demo

Leider steht ganz am Ende unter "Bugs":
Quote
DropSites can't be within a scrolling Table (this is a Table bug,
not a DragDrop one).


..Und ich brauche Scroll-Funktionalität, da es sich um bis 50 Exceldateien, deren Überschriften in einem 2d-Array dargestellt werden sollen, handeln kann. Hab das mal fett gemacht, um Missverständnisse auszuschliessen; ich will keine ganzen Exceldateien darstellen, es geht nur um die Überschriften, die einander zugeordnet werden sollen.

Kennt jemand ein Modul bzw. Beispielscript, womit die gewünschte Funktionalität stabil erreicht werden kann?


                 Gruss

                                     Pete\n\n

<!--EDIT|GoodFella|1168370959-->
renee
 2007-01-09 21:31
#46079 #46079
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vielleicht meintest Du Tk::MListbox. Du musst hier mal in diesem Subforum suchen. Ich bin mir nicht ganz sicher, aber ich glaube, so eine ähnliche Frage hatten wir hier schonmal...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
GoodFella
 2007-01-09 21:51
#46080 #46080
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
wow, das ging schnell :)

Habe mich mal durch Tk::MListBox gearbeitet, um dann festzustellen, dass ich damit auch nicht wie gewollt arbeiten kann :(

Auf http://search.cpan.org/src....al.html

steht:
Quote
MListbox does not and cannot support several individually color rows - columns, yes, but not rows.



..Ich möchte die Hintergrundfarbe jedes einzelnen Eintrages ändern können; und zwar derart, dass mit der globalen Überschrift übereinstimmenden Unterüberschriften grün unterlegt werden, die anderen rot.

Die Boardsuche hatte ich bereits hinter mir, als ich diesen Thread eröffnet habe.
Es gab da einen Treffer, wo du geantwortet hast, da jemand Probleme mit Tk::TableMatrix hatte, jedoch nur mit der Installation (genau wie ich auch als ich es versucht habe und bis jetzt nicht erfolgreich damit war), leider hat mir dies nicht weitergeholfen.. Trotzdem danke.


Übrigens: Dieser Artikel hier: http://www.arcknowledge.com/gmane.c....75.html
macht mich ziemlich unsicher, ob ich nicht viel Zeit für nichts investiere - weiss jemand mehr darüber?


Mal nebenbei: Es ist ein bischen stressig, dass Perl/Tk, ähnlich HTML in verschiedenen Browsern, relativ unvorhersagbare Ergebnisse liefert; insbesondere bei verschiedenen Versionen..
Meine Blutgruppe ist zwar Perl - aber bei GUIs kommen mir manchmal Sachen wie VC# besser vor; da kann man sich wenigstens auf das meiste verlassen. Müsste mal ein standartisiertes Visual Perl geben..
\n\n

<!--EDIT|GoodFella|1168373014-->
renee
 2007-01-09 22:03
#46081 #46081
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann weiß ich auf die Schnelle auch nichts (außer selbst irgendwie basteln). Vielleicht habe ich morgen früh mal etwas Zeit, zu recherchieren...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2007-01-09 22:28
#46082 #46082
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
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.
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-->
ptk
 2007-01-11 23:49
#46084 #46084
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=GoodFella,11.01.2007, 20:56][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
[/quote]Es gibt wohl ein paar Versuche, grafische Builder für Perl/Tk zu schreiben, aber ich konnte mich mit keinem anfreunden. Ich bin aber auch ein Freund der Tastatur.
Quote
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.
Das 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.

Quote
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 :/
Das 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.
Quote
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...
Das 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?

Quote
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
Machst du Scherze? Ein Forum, in dem es in vier Jahren nur fünf Themen gab?
GoodFella
 2007-01-12 00:42
#46085 #46085
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Hab auch alle Tk Builder durch, durchweg alles Müll, was ich gesehen habe.

Ja, Windows XP. Soll unter XP und 2000 eingesetzt werden.

Hmmm... sieht also schlecht aus für mich :(
Was würdest du an meiner Stelle tun bzw. wie würdest du das Problem effizient lösen?

Ich habe das Verhalten mal per Screenshot eingefangen:

Anfangszustand: http://img158.imageshack.us/my.php?image=1zj1.jpg
Nach DragnDrop: http://img162.imageshack.us/my.php?image=2cp8.jpg

..Wie man erkennen kann, wird ein neues Fenster erzeugt; ausserdem ist der DropSite Fehler per DragnDrop von rechts unten nach links oben reproduzierbar (links oben im nach voll nach unten gescrollten Fenster).. er will in 1:1 droppen, obwohl links oben hier 5:4 ist.

Übrigens: $dnd_tmp[$r][$c]->overrideredirect(1);  lässt die Fenster nur kurz auftauchen und gleich wieder verschwinden.. zwar nur ein workaround, aber besser als nichts ;)


..und wegen Buha: das war nicht immer so :~(\n\n

<!--EDIT|GoodFella|1168555590-->
ptk
 2007-01-12 01:57
#46086 #46086
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wegen Tk::TableMatrix: schau mal bei https://rt.cpan.org/Ticket/Display.html?id=21047 nach (es ist immer eine gute Idee, bei rt.cpan.org nachzuschauen).
GoodFella
 2007-01-12 02:56
#46087 #46087
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,12.01.2007, 00:57]Wegen Tk::TableMatrix: schau mal bei https://rt.cpan.org/Ticket/Display.html?id=21047 nach (es ist immer eine gute Idee, bei rt.cpan.org nachzuschauen).[/quote]
Werd ich machen.. [edit] Der auf der Seite empfohlene Link mit den zusätzlichen ppms geht leider nicht: http://www.krkeegan.com/archive....33;.htm .. werd mal googeln, vielleicht bekomm ich die noch woanders..[/edit]

Mir ist da gerade eine Idee wegen DnD gekommen: Ich könnte das X / Y Offset bei allen DropSites ja manuell anhand der aktuellen Scrollposition und der Widgetgrösse berechnen (haben alle dieselbe Grösse).
Werd mal perldoc befragen.

Bliebe aber das Problem mit der Geschwindigkeit bei grösseren Tabellen.
Tablematrix würde kein Problem darstellen, ich möchte eh nur Text hin- und herdragNdroppen; allerdings: wie schwer wäre es, TableMatrix so zu modifizieren, dass es diese Funktionalität besitzt?

Danke für deine Mühe, ptk.


[UPDATE>>]
Nach einer Stunde abwechselnd googlen, installieren und manuelle Fixes machen komme ich jetzt nicht mehr weiter.
Habe versucht, TableMatrix manuell zu installieren, sagt er mir "cl not found" -> google, is wohl der c-compiler; also gleich VC++ Express und SP1 von Microsoft runtergeladen, installiert, Fehlermeldung irgendeine .dll nicht gefunden; also wieder google, lag an fehlendem Pfad in der autoexec.nt; ok, also pfad hinzugefügt.. (mal abgesehen davon, dass dies meine erste manuelle Installation per make ist, also auch alles per google-tutorial gemacht) .. geht wieder nicht:
Quote
C:\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>


Also nochmal TableMatrix von CPAN runtergeladen, nochmal entpackt, alle Verzeichnisse nach string.h durchsucht - nix. Google hat diesbetreffend nur einen Treffer, der aber von etwas ganz anderem handelt. Vielleicht weiss einer von euch Rat?

[UPDATE2>>]
Hier mal alle von mir hinzugefügten Pfade meiner autoexec.nt:

C:\Programme\Microsoft Visual Studio 8\VC\bin
C:\Programme\Microsoft Visual Studio 8\Common7\IDE
C:\Programme\Microsoft Visual Studio 8\VC\include

Die besagte string.h befindet sich im letzten der drei; trotzdem findet der C-Compiler sie nicht. (ja, ich habe vorher neugestartet, ein aufruf von echo %path% zeigt mir alle drei auch korrekt an und ja, ich habe sie mit Semikolon getrennt.)
Werd jetzt schlafen gehen, war ne lange nacht :)

[UPDATE3>>]

Hat mir doch keine Ruhe gelassen. Habe alle Anweisungen von
http://msdn.microsoft.com/vstudio....lt.aspx befolgt, leider bleibt die Fehlermeldung bestehen.

                                 Gruss

                                              Pete\n\n

<!--EDIT|GoodFella|1168852565-->
<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten



View all threads created 2007-01-09 21:27.