Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выделение объекта по щелчку мышки [D7, WinXP]


Pavor ©   (2005-11-23 10:06:00) 

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

Пишется программа, что-то вроде  специального векторного графического редактора. В памяти элементы содержатся в динамическом массиве 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в массиве.
Огромная просьба описать подход, либо дать ссылку, где можно почитать материал на эту тему. Заранее спасибо.


Pavor   (2005-11-23 11:50:00) [1]

2 clickaker:

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


clickmaker   (2005-11-23 11:32:00) [2]


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

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


Pavor   (2005-11-23 11:18:00) [3]


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

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


Pavor   (2005-11-23 11:16:00) [4]

2 Плохишь:

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


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

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


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


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

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


Pavor   (2005-11-23 10:48:00) [6]

2 clickmaker:

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


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

2 MBo:

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

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


MBo   (2005-11-23 10:10:00) [7]

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


clickmaker   (2005-11-23 10:08:00) [8]


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо