Foo JH:
> Care to share the solution with us?

Of course. Here is the table with textctrls.
Navigation: Up,Down,Tab and ShiftTab, and don't forget my remark about 
SimpleApp.



#!/usr/bin/perl
use strict;
use warnings;
use Wx qw ( wxDEFAULT_FRAME_STYLE wxEVT_CHAR 
    WXK_UP
    WXK_DOWN
    WXK_TAB
);
use Wx::Event qw ( EVT_CHAR );

use vars qw(@ISA);
@ISA = qw(Wx::Frame);

#---------------------------------------------------------------------------------------------------

my ( $max_i,$max_j,$now_i,$now_j ) = (5,5,0,0);
my @text;

#---------------------------------------------------------------------------------------------------
my $app = Wx::SimpleApp->new;
my $frame = Wx::Frame->new( undef, -1, "$max_i x $max_j", [ 100, 100 ], [ 
$max_i*101+20, $max_j*21+20 ], wxDEFAULT_FRAME_STYLE );
my $fga = new Wx::Colour( 0, 100, 0 );
$frame->SetBackgroundColour( $fga );

for( my $i=0; $i<$max_i;$i++) {
        for( my $j=0; $j<$max_j;$j++) {
                $text[$i][$j] = Wx::TextCtrl->new( $frame, -1, "$i-$j", [ 10 + 
101*$i , 10+21*$j ], [ 100, 20], 1 );
                EVT_CHAR( $text[$i][$j], \&Onkeydown   );
        }
}


Wx::Window::SetFocus( $text[$now_i][$now_j] );
$frame->Show( 1 );
$app->MainLoop;

#-----------------------------------------------------------

sub Onkeydown {
        my ( $this, $event ) = @_;
        my $key   = $event->GetKeyCode();
        my $shift = $event->ShiftDown;
        
        if ( $key== WXK_TAB  ){ 
                if ( $shift ) {
                        $now_i--; $now_i = $max_i-1 if $now_i < 0; 
                } else {
                        $now_i++; $now_i = 0 if $now_i >= $max_i; 
                }
        }
        if ( $key== WXK_UP   ){ $now_j--; $now_j = $max_j-1 if $now_j <  0; }
        if ( $key== WXK_DOWN ){ $now_j++; $now_j = 0 if $now_j >= $max_j; }
        
        Wx::Window::SetFocus( $text[$now_i][$now_j] );
        
        return 0;
}

Attachment: test3.pl
Description: Perl program

Reply via email to