Schrift
[thread]4994[/thread]

Meine letzte Frage: Menü in HList



<< >> 8 Einträge, 1 Seite
Froschpopo
 2005-05-01 06:02
#43885 #43885
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
meine letzte Frage im Thema Perl Tk lautet:

Ich habe eine HList. Nun möchte ich für jeden Datensatz ein Menü erzeugen, welches sich bei einem Rechtsklick auf den Datensatz öffnet.
ptk
 2005-05-02 15:00
#43886 #43886
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Guck dir mal den Sourcecode zu tktimex an (http://ptktools.sourceforge.net)
Strat
 2005-05-02 17:52
#43887 #43887
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
du koenntest mit Derived was von HList ableiten, und dort dann die bindung machen, z.B.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
package Tk::MyHList;
use base qw(Tk::Derived Tk::HList);
Construct Tk::Widget 'MyHList';

sub Populate {
my ($self, $args) = @_;

my $rightClick = delete $args->{-rightClick};
ref($rightClick) and $self->bind('<ButtonPress-3>', $rightClick);

$self->SUPER::Populate($args);
} # Populate

Dann kannst du es folgendermaszen aufrufen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my $hlist = $parent->MyHList(-rightClick => \&rightClicked, ...);
sub rightClicked {
my ($w) = @_;
my $event = $w->XEvent();

my $entry = $w->GetNearest($event->y, 1);
return unless defined $entry;
$w->anchorSet($entry);
$w->selectionClear();
$w->selectionSet($entry);

# usw... weiss ich jetzt nicht mehr auswendig, irgendwie ein
# ->Menu erzeugen und das dann mit $menu->Post(x,y) an der
# richtigen stelle posten...

} # rightClicked
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Froschpopo
 2005-05-03 03:26
#43888 #43888
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich find ja auch das Ereignis von der HList-Option: -browsecmd => sub { print $_[0]."\n"; } interessant ! sowas müsste es auch mal für die rechte maustaste geben das würde vieles vereinfachen...

ich hab das jetzt folgendermaßen gemacht:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
    $config{BuddyListPane}->bind(
        '<3>' => sub {
            my $last_clicked = $config{BuddyListPane}->nearest(shift->{'_XEvent_'}->y);
            $popup->Popup(
               
 -popover => "cursor",
               
 -popanchor => 'nw'
            );
        },
    );

Allerdings erscheint das Menü für den Eintrag auch, wenn ich irgendwo in der HList hinklicke, also z.b. NICHT auf die eine Zeile.\n\n

<!--EDIT|Froschpopo|1115078234-->
Strat
 2005-05-03 14:52
#43889 #43889
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
dann schau dir mein beispiel nochmal an...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Froschpopo
 2005-05-03 21:32
#43890 #43890
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich versteh nicht, wieso du dafür ein Modul genommen hast!\n\n

<!--EDIT|Froschpopo|1115141612-->
Crian
 2005-05-04 12:53
#43891 #43891
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Meistens macht man aus etwas ein Modul, wenn man den Code leicht wiederverwenden möchte.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Strat
 2005-05-04 17:37
#43892 #43892
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Froschpopo,03.05.2005, 19:32]ich versteh nicht, wieso du dafür ein Modul genommen hast![/quote]
das Modul Tk::Derived habe ich genommen, weil man damit ein Widget einfach weitere Optionen verpassen kann (hier -rightClick). Dann kannst Du anstelle von $parent->HList(...) einfach $parent->MyHList(-rightclick => \&..., ...) aufrufen, und musst am programm selbst kaum was aendern.

Ob du aus dem package Tk::MyHList ein eigenes Modul machst oder nicht, ueberlasse ich ganz dir. Ich wuerde es eher woanders dazuschreiben, z.B. bei den Wrappern (heisst bei mir haeuffig MEIN::PROJEKT::Widgets), die ich mir haeufig um viele verschiedenen Widget-Aufrufe herumbastle, damit ich einfacher ein einheitliches Look&Feel bekomme, und einfacher globale Layout-Aenderungen machen kann.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 8 Einträge, 1 Seite



View all threads created 2005-05-01 06:02.