Here is the basic idea, use canvas tags. It dosn't deal with your screen clutter of multiple rectangles as you drag, but the solution to that is in the previous example I showed, where you $mw->bind( 'Tk::Canvas','<Motion>' => \&making_rect );
You should be able to implement that yourself. You need to work thru it once, to get it into your head how it works. So I throw you 1 fish, but not 2. :-)
So to correct your code above to using tags, here are the modified subs
$mw->bind('<ButtonPress>' =>
sub {
$x_begin = $Tk::event->x;
$y_begin = $Tk::event->y;
print "x_begin = $x_begin y_begin=$y_begin\n";
$mw->bind('<Motion>' =>
sub {
$x_now = $Tk::event->x;
$y_now = $Tk::event->y;
print "x_now = $x_now y_now=$y_now\n";
$rec = $chart->createRectangle(
$x_begin, $y_begin,
$x_now, $y_now, -width => 2,
-outline => 'yellow',
###################
-tags => ['rect'] );
###################
$rec2 = $chart2->createRectangle(
$x_begin, $y_begin,
$x_now, $y_now, -width => 2,
-outline => 'orange',
#################
-tags => ['rect'] );
##################
});
}
);
$mw->bind('<ButtonRelease>' => sub {
print "ButtonReleased\n"; #$chart->delete($rec);
$mw->bind('<Motion>', "");
$chart_width = $chart->width;
$chart->delete($rec);
$chart2->delete($rec2);
######################################
$chart->delete('rect');
$chart2->delete('rect');
######################################
$d = $x_begin/$chart_width;
$e = $x_now/$chart_width;
print "draw next chart at $d percent of timeline,
end at $e percent of timeline\n";
$chart->clearchart;
$chart2->clearchart;
&update_data($d, $e);
$chart->plot(\@data);
$chart2->plot(\@data2);
}
);
|