Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
2 / 2 / 2
Регистрация: 02.12.2013
Сообщений: 175

Как сделать каждый круг разного цвета?

22.05.2014, 12:47. Показов 4916. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
procedure Circle(x,y,R:integer);
begin
 Form1.PaintBox1.Canvas.Ellipse(x-R,y-R,x+R,y+R);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  n,Centr,L, i,R,x0,y0,x1,y1,x,y:Integer;
   rr:Real;
begin
   n:=5; //количество окружностей
   x:=paintbox1.Width div 2;  // центр окружности
   y:=PaintBox1.Height div 2; // центр окружности
   if x>y then R:=y else R:=x;
 
   Circle(x,y,R);
 
   rr := R / ( 1 + 1/sin(Pi/n) );
 
   for i:=0 to n-1 do
   begin
    x0 := Round((x) + (r-rr)*cos(((i*360/n))*pi/180));
    y0 := Round((y) + (r-rr)*sin(((i*360/n))*pi/180));
     Circle(x0,y0,Round(rr));
   end;
 
   x1:=x;
   y1:=y;
   Centr:=Round(r-rr);
 
      for l:=0 to n-1 do
   begin
    x := Round((x1) + (Centr)*cos(((l*360/n))*pi/180));
    y := Round((y1) + (centr)*sin(((l*360/n))*pi/180));
    if l=0 then R:=Round(rr);
    rr := R / ( 1 + 1/sin(Pi/n) );
 
   for i:=0 to n-1 do
   begin
    x0 := Round((x) + (r-rr)*cos(((i*360/n))*pi/180));
    y0 := Round((y) + (r-rr)*sin(((i*360/n))*pi/180));
     Circle(x0,y0,Round(rr));
   end;
   end;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.05.2014, 12:47
Ответы с готовыми решениями:

Как в Delphi 7 сделать круг разделенный на сектора различного цвета
Как в Delphi 7 сделать круг разделенный на сектора различного цвета. И чтобы по нажатию кнопки происходила подсветка сектора. За 3-5 сек...

Разделить круг на 2, 3, 4, 5 секторов в зависимости от выбора радиокнопок, каждый полученный сектор следует закрасить в разные цвета.
Создать программу Delphi, которая позволит разделить круг на 2, 3, 4, 5 секторов в зависимости от выбора радиокнопок, каждый полученный...

Возможно ли в компоненте chart сделать каждый столбец разного цвета
Здравствуйте, возможно ли в компоненте chart сделать каждый столбец разного цвета? если да, то Вы не могли подсказать как.

32
2 / 2 / 2
Регистрация: 02.12.2013
Сообщений: 175
23.05.2014, 09:40  [ТС]
Студворк — интернет-сервис помощи студентам
таймер все равно остается?
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.05.2014, 09:56
Конечно, ведь смена координат по таймеру.
0
2 / 2 / 2
Регистрация: 02.12.2013
Сообщений: 175
23.05.2014, 09:58  [ТС]
добавьте пожалуйста в мой код, у меня что-то не получается.
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.05.2014, 10:00
Цитата Сообщение от mashka4190 Посмотреть сообщение
добавьте пожалуйста в мой код
В который? Где его взять?
0
2 / 2 / 2
Регистрация: 02.12.2013
Сообщений: 175
23.05.2014, 10:09  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Menus;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    PaintBox1: TPaintBox;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
 procedure Circle(x,y,R:integer);
begin
 
 Form1.PaintBox1.Canvas.Ellipse(x-R,y-R,x+R,y+R);
 
end;
procedure TForm1.Button1Click(Sender: TObject);
 var
  n,Centr,L, i,R,x0,y0,x1,y1,x,y:Integer;
   rr:Real;
begin
   n:=5; //количество окружностей
   x:=paintbox1.Width div 2;  // центр окружности
   y:=PaintBox1.Height div 2; // центр окружности
   if x>y then R:=y else R:=x;
    Form1.PaintBox1.Canvas.Brush.Color:= clyellow;
   Circle(x,y,R);
   rr := R / ( 1 + 1/sin(Pi/n) );
 
   for i:=0 to n-1 do
   begin
 
 
 
Form1.PaintBox1.Canvas.Brush.Color:= clGreen;
    x0 := Round((x) + (r-rr)*cos(((i*360/n))*pi/180));
    y0 := Round((y) + (r-rr)*sin(((i*360/n))*pi/180));
     Circle(x0,y0,Round(rr));
     x1 := Round((x) + (r-rr)*cos(((i*360/n))*pi/90));
    y1 := Round((y) + (r-rr)*sin(((i*360/n))*pi/90));
     Circle(x1,y1,Round(rr));
   end;
   x1:=x;
   y1:=y;
   Centr:=Round(r-rr);
 
      for l:=0 to n-1 do
   begin
 
    x := Round((x1) + (Centr)*cos(((l*360/n))*pi/180));
    y := Round((y1) + (centr)*sin(((l*360/n))*pi/180));
    if l=0 then R:=Round(rr);
    rr := R / ( 1 + 1/sin(Pi/n) );
 
   for i:=0 to n-1 do
   begin
     Form1.PaintBox1.Canvas.Brush.Color:= clBlue;
    x0 := Round((x) + (r-rr)*cos(((i*360/n))*pi/180));
    y0 := Round((y) + (r-rr)*sin(((i*360/n))*pi/180));
     Circle(x0,y0,Round(rr));
   end;
   end;
end;
 
 
 
procedure TForm1.Timer1Timer(Sender: TObject);
var x,y,a: integer;
begin
 Form1.DoubleBuffered:=true;
X := Round(300 + 100*cos(a*pi/180));
  Y := Round(200 + 100*sin(a*pi/180));
  inc(a);
  Canvas.FillRect(Canvas.ClipRect);
  ellipse(x, y, 100, 0, 360);
end;
 
end.
Добавлено через 5 минут
нужно сделать так, чтобы зеленые круги вращались по желтому, а синие по зеленым.
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.05.2014, 12:15
Лучший ответ Сообщение было отмечено mashka4190 как решение

Решение

Что-то забыли про тему, наверное ТС написал программу.
Но на всякий случай мой вариант.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
const n=5;
var
  Form1: TForm1;
  xc,yc,r,x1,y1,r1,x2,y2,r2,r3:integer;
  u,du:real;
  f:boolean;
implementation
 
{$R *.dfm}
procedure Krug(x,y,r,c:integer);
begin
with Form1.PaintBox1.Canvas do
 begin
  pen.Color:=c;
  brush.Color:=c;
  ellipse(x-r,y-r,x+r,y+r);
 end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//центр желтой окружности
xc:=paintbox1.Width div 2;
yc:=PaintBox1.Height div 2;
if xc>yc then r:=yc else r:=xc;//радиус желтой
r1:=round(r/(1+1/sin(pi/n)))-1;// радиус центров зеленых
r2:=round(r1/(1+1/sin(pi/n)))-1;// радиус центров синих
u:=pi/2; //верхний круг по середине
du:=0.1;
Timer1.Enabled:=false; //выключим таймер
Timer1.Interval:=100; //интервал 0.1 сек
doublebuffered:=true; //двойная буферизация от мерцания
f:=false;//выключено вращение
Button1.Caption:='ПУСК'; //кэпшен кнопки
end;
 
procedure TForm1.PaintBox1Paint(Sender: TObject);
var i,j:byte;
begin
Krug(xc,yc,r,clyellow);//рисуем желтый круг
for i:=0 to n-1 do //рисуем зеленые
 begin
  x1:=round(xc+(r-r1)*cos(u+i*2*pi/n));
  y1:=round(yc+(r-r1)*sin(u+i*2*pi/n));
  krug(x1,y1,r1,clGreen);
  for j:=0 to n-1 do//рисуем синие
   begin
    x2:=round(x1+(r1-r2)*cos(u+j*2*pi/n));
    y2:=round(y1-(r1-r2)*sin(u+j*2*pi/n));
    Krug(x2,y2,round(r2),clBlue);
   end;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
if not f then //если выключено вращение
 begin
  Button1.Caption:='СТОП';
  du:=0.1;//увеличение угла на 0.1
  f:=true //включим
 end
else //если включено
begin
 Button1.Caption:='ПУСК';
  du:=0; //не уаеличиваем угол
  f:=false //выключим
 end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
u:=u+du; //увеличиваем угол
PaintBox1.Repaint //перерисовываем
end;
Вложения
Тип файла: rar Вращение кругов.rar (162.7 Кб, 13 просмотров)
1
2 / 2 / 2
Регистрация: 02.12.2013
Сообщений: 175
03.06.2014, 11:59  [ТС]
а можно как-то сделать, чтоб сначала рисовать круги по уровням, а потом уже шла анимация?
и чтоб пользователь сам выбирал цвет кругов.
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.06.2014, 12:03
Цитата Сообщение от mashka4190 Посмотреть сообщение
чтоб сначала рисовать круги по уровням, а потом уже шла анимация?
Так пока не нажмешь кнопку анимации нет. А выбор цвета можно сделать в ColorDialog.
0
2 / 2 / 2
Регистрация: 02.12.2013
Сообщений: 175
03.06.2014, 12:06  [ТС]
вот мне и нужно, чтоб сначала при нажатии на кнопку по уровням рисовались круги, а затем шла анимация.
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.06.2014, 12:09
Судя по нику вроде блондинка, зарекался с ними связываться, опять черт дернул...
0
2 / 2 / 2
Регистрация: 02.12.2013
Сообщений: 175
03.06.2014, 12:15  [ТС]
нет, не блондинка, просто не шарю в делфи.
точнее именно графика в делфи.
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.06.2014, 12:52
Сделал так, смотрите.
Вложения
Тип файла: rar Вращение кругов_1.rar (182.6 Кб, 7 просмотров)
1
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.06.2014, 13:03
При выборе цветов оставьте так, а то я черный цвет проигнорировал
Delphi
1
2
3
4
5
6
7
8
if (ColorBox1.Selected=ColorBox2.Selected)
or (ColorBox1.Selected=ColorBox3.Selected)
or (ColorBox2.Selected=ColorBox3.Selected)
then
 begin
  ShowMessage('Выбраны одинаковые цвета');
  exit
 end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.06.2014, 13:03

Вывести треугольник, прямоугольник, ромб, шестиугольник, круг линиями разного цвета
3. Вывести треугольник, прямоугольник, ромб, шестиугольник, круг линиями разного цвета, с разной внутренней штриховкой и закраской на...

Вывести треугольник, прямоугольник, ромб, шестиугольник, круг линиями разного цвета
помогите... "Вывести треугольник, прямоугольник, ромб, шестиугольник, круг линиями разного цвета, с разной внутренней штриховкой и...

Как сделать отрезки Polyline разного цвета?
Всем привет! Кто знает как сделать отрезки Polyline разного цвета? Если можно краткий пример.....

Как сделать строки разного цвета в TextArea?
Нужно сделать на AWT вывод в многострочном контроле (в нем будут отображаться сообщения чата) разными цветами. В принципе, мне не...

Как сделать движущийся круг со сменой цвета
Как сделать круг,чтобы он доходил например до определенного момента с одним цветом и далее шёл с другим? Подскажите,пожалуйста. Круг у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru