Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2011, 23:25   #1
Alexsandr
Пользователь
 
Аватар для Alexsandr
 
Регистрация: 30.09.2007
Сообщений: 70
Вопрос Графика

Всем доброго времени суток! помогите плиз,есть рисунок две окружности одна в одной и каждая из окружностей разбита на сектора,как сделать чтобы делая клик по одному из секторов он выделялся определённым цветом?
Изображения
Тип файла: jpg 2011-08-30_164653.jpg (24.8 Кб, 131 просмотров)
Alexsandr вне форума Ответить с цитированием
Старый 04.09.2011, 23:56   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,827
По умолчанию

перебрать все пиксели в данной области и перекрасить их. два цикла надо. т.к. у тебя область круглая, то лучше использовать полярные координаты: x =r *cos(alpha) и y=r*sin(alpha).
например, так:
Код:
for r= 2 to 4 do//2 - это внутренний радиус кольца, 4 - это внешний радиус кольца
begin
for alpha=0 to 180 do//угол альфа в градусах, но придётся переделать в радианы
begin
     x=r*cos(alpha*3.14/180);
     y=r*sin(alpha*3.14/180);//
     //и вот тут закрашиваешь свой пиксель с координатами (x,y)
end;
end;
угол alpha выбираешь сам, исходя из сектора.
вся окружность - от 0 до 360
верхняя половина - от 0 до 180
нижняя половина - от 180 до 360
левая половина - от 90 до 270
правая половина - от 270 до 360 и от 360 до 90.
и будет ещё одна проверка - на какой области твоя мышка. её координаты узнаешь так:
Код:
xmous=Mouse.CursorPos.X;
ymous=Mouse.CursorPos.Y;
а дальше только ставь условия и сравнивай: в нужном она у тебя месте или не там, где надо...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 05.09.2011 в 00:02.
NetSpace вне форума Ответить с цитированием
Старый 05.09.2011, 03:07   #3
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

Проще использовать Canvas.FloodFill (или API-шную функцию ExtFloodFill)
WhiteSpirit вне форума Ответить с цитированием
Старый 05.09.2011, 10:38   #4
Alexsandr
Пользователь
 
Аватар для Alexsandr
 
Регистрация: 30.09.2007
Сообщений: 70
По умолчанию

Цитата:
Сообщение от WhiteSpirit Посмотреть сообщение
Проще использовать Canvas.FloodFill (или API-шную функцию ExtFloodFill)
а поподробней о функции ExtFloodFill как применить,если можно на моём примере.
Alexsandr вне форума Ответить с цитированием
Старый 06.09.2011, 01:25   #5
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

procedure TCanvas.FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle);
Эта функция закрашивает произвольную замкнутую область. Аргументы X и Y задают координаты точки внутри области. FillStyle определяет, как её заливать: если FillStyle = fsSurface, то точки принадлежат заливаемой области, если они имеют цвет Color; если FillStyle = fsBorder, то точки, имеющие цвет Color, считаются принадлежащими границе области.
Пример:
Код:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (Canvas.Pixels[X, Y] and $00FFFFFF) = clWhite then begin
    Canvas.Brush.Color:=clRed;
    Canvas.FloodFill(X, Y, clWhite, fsSurface);
    end;
end;
WhiteSpirit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика plm Общие вопросы по программированию, компьютерный форум 0 18.01.2011 19:07
Графика Kravec Паскаль, Turbo Pascal, PascalABC.NET 5 23.07.2010 11:26
C# - Графика Gantz Помощь студентам 1 10.06.2010 11:16
графика в С# Mclaren Помощь студентам 4 05.03.2010 10:17