Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Обработка нажатия мыши и закрашивание


Автор: jDeuterium 10.1.2013, 12:29
Я рисую на canvas окружность и две линии, которые делят ее на 4 части, при нажатии на одну из частей необходимо ее закрасить, а все остальные оставить не закрашенными.
Заранее спасибо

Добавлено через 12 минут и 58 секунд
С этим я разобрался:
Код

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Form1.Image1.Canvas.brush.color:=RGB(50, 205, 50);
Form1.Image1.Canvas.FloodFill(x, y,Image1.Canvas.Pixels[x,y], fssurface);
end;


Теперь другой вопрос, так как я делаю тест, то мне надо проверить ту ли я часть окружности выбрал.
 Например вопрос в какой части окружности находится 45 градусов? 
И если я выбрал правильно, то закрашиваем зеленым, а если не правильно, то красным

Автор: DarkProg 10.1.2013, 13:37
Самый простой способ - это интерпретировать окружность как квадрат. Квадрат ведь разбить на 4 части и вычислить что координаты входят в ту четвертинку что вы нажали не сложно ;)
И проверка на то что нажали внутри окружности.

Ну а правильнее это привязать параметрической уравнение окружности.
http://upload.wikimedia.org/math/6/f/d/6fd7238e42de9346616e450a99743f36.png

Знак меняете с равенства на меньше либо равно, только не ошибитесь с углом ;)

Автор: jDeuterium 10.1.2013, 13:51
Сделал намного проще
Код

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (x>150) and (y<150) then
begin
Form1.Image1.Canvas.brush.color:=RGB(50, 205, 50);
Form1.Image1.Canvas.FloodFill(x, y,Image1.Canvas.Pixels[x,y], fssurface);
ShowMessage('Правильно!');
Form1.Image1.Enabled:=false;
end
else
begin
Form1.Image1.Canvas.brush.color:=RGB(255, 48, 48);
Form1.Image1.Canvas.FloodFill(x, y,Image1.Canvas.Pixels[x,y], fssurface);
ShowMessage('Не правильно!');
end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)