Доброе утро, столкнулся с маленькой проблемой, задача была такая нарисовать на форме клетку и на ней рисовать квадраты такой же ширины и высоты как в клетке, задача была выполнена но поменялось условие, надо сделать так что на какой квадрат нажал пользователь то он должен заполниться выбранным цветом. Вот код программы:
| Код | #!perl
use threads; use Win32::GUI();
my ( $MW, %MP, $X, $Y, );
$MR = 40; # Количество клеток по вертикали $MC = 40; # Количество клеток по горизонтале $LEFT = 0; # по X $TOP = 1; # по Y $W = 15; # Ширина клетки поля $H = 15; # Высота клетки поля $status = 0; #0 - Рисуем клетку, 1 - Рисуем символы $MP{'Menu'} = Win32::GUI::MakeMenu ( "&Файл" => "Файл", ">&Цвет" => { -name => "ChooseColor", -onClick => \&Form1_Color}, ); $MW = new Win32::GUI::Window ( -name => "Form1", -size => [800, 700], -title => "Клетка", -vscroll => 1, -menu => $MP{'Menu'}, ) or die "$!"; $MW->Center(); $MW->Show(); Win32::GUI::Dialog();
sub Form1_Color { $color = Win32::GUI::ChooseColor ( -owner => $WM, ); $MP{'Brush'} = new Win32::GUI::Brush ( -color => $color, ); } sub Form1_Paint { $DC = shift; $threads = threads->new(\&ShamePoleShow,$status); } sub Form1_MouseDown { ($X, $Y) = @_; $status = 1; ShamePoleShow(); } sub ShamePoleShow { for($row = 1; $row <= $MR; $row++) { for($col = 1; $col <= $MC; $col++) { Kletka($row,$col); } } } sub Kletka { my($row,$col) = @_; $x = $LEFT + ($col-1) * $W; $y = $TOP + ($row-1) * $H; if( $status == 0) { $DC->Rectangle($x-1,$y-1,$x+$W,$y+$H); return; } if( $status == 1) { $DC->SelectObject($MP{'Brush'}); $DC->Rectangle($X-1,$Y-1,$X+$W,$Y+$H); } }
|
Проблема в том что не как не могу закрасить квадрат на который я нажимаю, или хотя бы перерисовать на его месте другой квадрат с другим цвет, квадрат нарисовать по вверх старого можно но это не делает поставленную задачу выполнимой. То есть что нужно, я нажимаю мышкой на квадрат в клетке и по верх него перерисовывается другой квадрат и строго над ним, т.е если нажать не на квадрат то он перерисовывается не должен, в общем не как не могу это сделать. Можете помочь? |