Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
zangetsu
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
#1

закраска фигуры

05.03.2012, 16:47. Просмотров 1819. Ответов 11
Метки нет (Все метки)

помогите!
на Image находится 7 треугольников. Нужно чтобы при нажатии мыши в любой части 1-го из треугольников (заданной 3-мя координатами) его закрасило, и так со всеми треугольниками.
при условии что треугольники расположены так - Название: треугольники.jpg
Просмотров: 285

Размер: 5.1 Кб
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2012, 16:47
Ответы с готовыми решениями:

Закраска StringGrid
Вот не могу понять, что-то не получается вообще, как закрасить стриггридовские...

Закраска StringGrid
Здравствуйте!задача такова!я пишу игру сапёр с использованием компонента...

Закраска изображения полосами
Ну вот например я хочу не по пиксельно закрашиваить имагу а сразу полосами? И...

Закраска области StringGrid
procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer; ...

Закраска области stringgrid
var Form1: TForm1; x: boolean; u:Tcolor; procedure...

11
zangetsu
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
05.03.2012, 21:14  [ТС] #2
это вроде бы надо сделать через массив переменных, каждая из которых содержит координаты 3-х вершин треугольника, но как это сделать((
0
Arcor
4882 / 1834 / 382
Регистрация: 20.11.2009
Сообщений: 5,888
Записей в блоге: 1
05.03.2012, 21:39 #3
вспомни геометрию, когда вектор учили, как в геометрии находится площадь треугольника
0
zangetsu
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
05.03.2012, 21:55  [ТС] #4
так а как из этого массив сделать чтобы можно было треугольники закрашивать по одному, и так чтобы треугольник который закрасили не исчезал?
0
Puporev
Модератор
54384 / 41966 / 28987
Регистрация: 18.05.2008
Сообщений: 98,859
05.03.2012, 22:19 #5
Цитата Сообщение от zangetsu Посмотреть сообщение
треугольник который закрасили не исчезал?
В каком смысле не исчезал?

Добавлено через 8 минут
Еще вопрос. После закрашивания следующего треугольника предыдущие тоже остаются закрашенными?
0
Arcor
4882 / 1834 / 382
Регистрация: 20.11.2009
Сообщений: 5,888
Записей в блоге: 1
05.03.2012, 22:22 #6
закрашивать только пикселом прийдется, по одному, что будет грузить немного программу, если не использовать какие-нибудь методы потока
0
zangetsu
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
05.03.2012, 22:23  [ТС] #7
а примеры можешь показать, или ссылку на этот материал дать, а то мы только 2 пары делфи разбирали, толком не понял
0
Puporev
Модератор
54384 / 41966 / 28987
Регистрация: 18.05.2008
Сообщений: 98,859
05.03.2012, 22:23 #8
floodfill быстро закрасит, если треугольники разумных размеров.
0
Arcor
4882 / 1834 / 382
Регистрация: 20.11.2009
Сообщений: 5,888
Записей в блоге: 1
05.03.2012, 22:25 #9
Цитата Сообщение от zangetsu Посмотреть сообщение
а примеры можешь показать
меня сейчас дома нету, соответственно дельфи нет под рукой, буду, попробую помочь, если успею до кого-то
1
zangetsu
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
05.03.2012, 22:25  [ТС] #10
так мне надо на клик мыши на image сделать, причём закрасить столько треугольников сколько потребуется.
0
Puporev
Модератор
54384 / 41966 / 28987
Регистрация: 18.05.2008
Сообщений: 98,859
06.03.2012, 12:51 #11
Если фигура именно такая, а именно трапеция разбитая на треугольники и все линии одного цвета, то собственно треугольники нам и не нужны, нужны координаты вершин трапеции.
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type trg=record
         a,b,c:TPoint;
         end;
var
  Form1: TForm1;
  x1,y1,x2,y2,x3,y3,x4,y4:integer;
implementation
 
{$R *.dfm}
//принадлежность точки треугольнику
function Prin(x,y,x1,y1,x2,y2,x3,y3:integer):boolean;
var s,s1,s2,s3:real;
begin
//определим удвоенные площади 4х треугольников
s:=abs((x1-x3)*(y2-y3)-(x2-x3)*(y1-y3));//основного
s1:=abs((x-x3)*(y2-y3)-(x2-x3)*(y-y3)); //и 3х внутренних
s2:=abs((x1-x3)*(y-y3)-(x-x3)*(y1-y3));
s3:=abs((x1-x)*(y2-y)-(x2-x)*(y1-y));
Prin:=abs(s-s1-s2-s3)<0.1;//если площади равны с заданной точностью, точка в треугольнике
end;
//рисуем фигуру=трапеция разбита на 7 треугольников
procedure TForm1.Button1Click(Sender: TObject);
var xc,yc,w,h,x,i:integer;
begin
xc:=Image1.Width div 2;
yc:=Image1.Height div 2;
w:=50;
h:=40;
x1:=xc-4*w;y1:=yc+h;
x2:=xc-3*w;y2:=yc-h;
x3:=xc+3*w;y3:=yc-h;
x4:=xc+4*w;y4:=yc+h;
with Image1.Canvas do
 begin
  pen.Color:=clRed;
  pen.Width:=3;
  moveto(x1,y1);
  lineto(x4,y4);
  moveto(x2,y2);
  lineto(x3,y3);
  x:=x1;
  for i:=1 to 8 do
  if odd(i) then
   begin
    moveto(x+(i-1)*w,y1);
    lineto(x+(i-1)*w+w,y2)
   end
  else
   begin
    moveto(x+(i-1)*w,y2);
    lineto(x+(i-1)*w+w,y4);
   end;
  end;
end;
 
//закрашиваем треугольники по одному
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
with Image1.Canvas do
 begin
  Brush.Style:=bsSolid;
  Brush.Color:=clRed;
  //если курсор в пределах трапеции
  if Prin(x,y,x1,y1,x2,y2,x3,y3)or Prin(x,y,x3,y3,x4,y4,x1,y1)
  then floodfill(x,y,clRed,fsBorder);//закрасим треугольник
 end;
end;
 
end.
2
zangetsu
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
09.03.2012, 19:09  [ТС] #12
спасибо но я сделал по проще))
0
09.03.2012, 19:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2012, 19:09

Закраска матрицы stringgrid
Здравствуйте, мне нужно закрасить элементы матрицы, в которых нарушается...

StringGrid, закраска min и max
В программе создаю матрицу, хочу закрасить min и max элементы, нашла на форуме...

Закраска области между 2 координатами
Имеется stringgrid заполненный из файла (). В нём необходимо найти пару 0 и 1...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru