Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

Выделение объекта по щелчку мышки   Найти похожие ветки 

 
Pavor ©   (2005-11-23 10:06) [0]

Приветствую, уважаемые профессионалы!

Пишется программа, что-то вроде  специального векторного графического редактора. В памяти элементы содержатся в динамическом массиве Items, структура следующая
type TNode= record
 x,y: integer;
end;

type TBranchType= (PLAIN, DC_EMF, DC_R);// значения для типа ветви
// PLAIN  - без элементов ("закоротка")
// DC_EMF - ЭДС постоянного тока
// DC_R   - резистор постоянного тока

type TItems=record
 Node1,Node2: TNode;
 BranchType: TBranchType;
 Selected: Boolean;
end;

var   Items: array of TItems;


При событии OnPaint массив сканируется и все элементы отрисовываются в соответствии со своим типом.

Вопрос в следующем: как узнать, что по объекту произведен щелчек мышкой? То есть, на входе X,Y курсора, а на выходе - установленные свойства Selected в массиве.
Огромная просьба описать подход, либо дать ссылку, где можно почитать материал на эту тему. Заранее спасибо.


 
clickmaker ©   (2005-11-23 10:08) [1]


> Вопрос в следующем: как узнать, что по объекту произведен
> щелчек мышкой?

ТоНаЧемРисуется.OnMouseDown
ну а дальше поиск по массиву со сравнением X,Y c Node.x, y


 
MBo ©   (2005-11-23 10:10) [2]

Если элементов много, и форма у них может быть сложная, то удобен и быстр такой метод - все рисуется на битмапе, каждый элемент - уникальным цветом, например, цвет=индексу элемента. Затем просто проверяешь цвет в точке нажатия.


 
Pavor ©   (2005-11-23 10:48) [3]

2 clickmaker:

> ТоНаЧемРисуется.OnMouseDown
> ну а дальше поиск по массиву со сравнением X,Y c Node.x,
>  y


Я прошу прощения, чего-то не понял: ну проверил, совпадений нет - это же значит, что курсор не попал на начало/конец ветви? А с объектом как?

2 MBo:

С цветами здорово, конечно :), но, наверное, это не подходит.

Всякие Компасы с Автокадами же работают, может кто-нить знает все-таки, как сделать?


 
Плохиш ©   (2005-11-23 10:52) [4]


> Pavor ©   (23.11.05 10:48) [3]
> 2 clickmaker:
>
> > ТоНаЧемРисуется.OnMouseDown
> > ну а дальше поиск по массиву со сравнением X,Y c Node.
> x,
> >  y
>
>
> Я прошу прощения, чего-то не понял: ну проверил, совпадений
> нет - это же значит, что курсор не попал на начало/конец
> ветви? А с объектом как?

Ты, эта, думалку включать не пробовал? Намекаю, объекты обычно кроме координат x и y ещё имеют длину и ширину, плюс ко всему могут, наверное, перекрывать друг друга.


 
Pavor ©   (2005-11-23 11:16) [5]

2 Плохишь:

> Ты, эта, думалку включать не пробовал? Намекаю, объекты
> обычно кроме координат x и y ещё имеют длину и ширину, плюс
> ко всему могут, наверное, перекрывать друг друга.


Пробую помаленьку, пока не заводится :)
То есть получается, все ветви составными делать (резистор = отрезок-прямоугольник-резистор), еще и счетчик "уровня" для каждой ветви... Спасибо, вроде подтолкнул, может поедет даже ;)

А у кого еще идеи есть? О:-)


 
Pavor ©   (2005-11-23 11:18) [6]


> (резистор = отрезок-прямоугольник-резистор),

резистор = отрезок-прямоугольник-отрезок, тьфу ты :))))


 
clickmaker ©   (2005-11-23 11:32) [7]


>
> резистор = отрезок-прямоугольник-отрезок, тьфу ты

в общем случае - регион
см. в MSDN про регионы и PtInRegion()


 
Pavor ©   (2005-11-23 11:50) [8]

2 clickaker:

О! Вот и ссылка! Спасибо, пойду почитаю...



Страницы: 1 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
14-1132822312
HabarovSergey
2005-11-24 11:51
2005.12.18
Кто нибуть знает что это за компонеты для Delphi?


1-1132804734
Separator
2005-11-24 06:58
2005.12.18
Запись через BlockWtite


1-1132172994
gdaujk
2005-11-16 23:29
2005.12.18
ListView без полос прокрутки


14-1132737161
TUser
2005-11-23 12:12
2005.12.18
Тюнинг компьютера


4-1129564766
GEN++
2005-10-17 19:59
2005.12.18
Как узнать кто убит/родился